iOS开发之自定义View

@interface HypnosisViewUIView

自定义View的关键是定义drawRect: 方法,因为主要是通过重载这个方法,来改变view的外观。例如,可以使用下面代码绘制一个很多环中环的效果的view。

- (void)drawRect:(CGRect)rect {
    CGRect bounds = [self bounds];
    CGPoint center;
    center.x = bounds.origin.x + bounds.size.width / 2.0;
    center.y = bounds.origin.y + bounds.size.height / 2.0;
    // hypot()是C语言函数,求直角三角形的斜边长度
    float maxRadius = hypot(bounds.size.width, bounds.size.height) / 2.0;
    // 获取上下文饮用
    CGContextRef context = UIGraphicsGetCurrentContext();
    // 设置线条宽度
    CGContextSetLineWidth(context, 10);
    // 设置线条颜色以及加宽显示
    [[UIColor lightGrayColor] setStroke];
 
    for (float currentRadius = maxRadius; currentRadius > 0; currentRadius -= 20) {
        CGContextAddArc(context, center.x, center.y, currentRadius, 0.0, M_PI * 2.0, YES);
        CGContextStrokePath(context);
    }
}

我们可以继续绘制一些东西,比如绘制文字,将下面代码添加带这个方法后面。

// Create a string
    NSString *text = @"我是123,不是123";
    UIFont *font = [UIFont boldSystemFontOfSize:28];
    CGRect textRect;
    textRect.size = [text sizeWithFont:font];
    textRect.origin.x = center.x - textRect.size.width / 2.0;
    textRect.origin.y = center.y - textRect.size.height / 2.0;
 
    [[UIColor blackColor] setFill];
    // Set the shadow to be offset 4 points right, 3 points down, 
    // dark gray and with a blur radius of 2 points 
    CGSize offset = CGSizeMake(4, 3);
    CGColorRef color = [[UIColor darkGrayColor] CGColor];
    CGContextSetShadowWithColor(context, offset, 2.0, color);
    // Draw the string
    [text drawInRect:textRect withFont:font];


如果view过大,我们可以把它放置到一个UIScrollView中间,这样就可以进行拖动了。UIScrollView与View的关系如下图:


使用下面代码创建一个比iPhone屏幕大4倍的View,然后通过UIScrollView来展示,代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    CGRect wholeWindow = [[self window] bounds];   //创建一个窗体大小的CGRect
    view = [[HypnosisView alloc] initWithFrame:wholeWindow];  // 创建一个窗体大小的HypnosisView实例
 
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:wholeWindow];
    [[self window] addSubview:scrollView];
 
    CGRect reallyBigRect;
    reallyBigRect.origin = CGPointZero;
    reallyBigRect.size.width = wholeWindow.size.width * 2.0;
    reallyBigRect.size.height = wholeWindow.size.height * 2.0;
    [scrollView setContentSize:reallyBigRect.size];
    CGPoint offset;
    offset.x = wholeWindow.size.width * 0.5;
    offset.y = wholeWindow.size.height * 0.5;
    [scrollView setContentOffset:offset];
    
    // Create the view
    view = [[HypnosisView alloc] initWithFrame:reallyBigRect];
    [view setBackgroundColor:[UIColor clearColor]];
    [scrollView addSubview:view];
    [scrollView release];    
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
    [[self window] makeKeyAndVisible];
    return YES;
}

通过UIScrollView我们还可以设置view的缩放功能,将下面代码添加到中。这样我们就可以使用两根手指缩放view了。

   // Enable zooming
    [scrollView setMinimumZoomScale:0.5];
    [scrollView setMaximumZoomScale:5];
    [scrollView setDelegate:self];


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
以下是一个简单的示例代码,展示了如何生成一个自定义的TabBar: 首先,创建一个名为CustomTabBarController的自定义视图控制器,作为TabBar的容器: ```swift import UIKit class CustomTabBarController: UIViewController { // 自定义TabBar视图 let customTabBar = CustomTabBar() override func viewDidLoad() { super.viewDidLoad() // 添加自定义TabBar视图 view.addSubview(customTabBar) // 设置自定义TabBar的位置和大小 customTabBar.frame = CGRect(x: 0, y: view.frame.height - 100, width: view.frame.width, height: 100) // 设置自定义TabBar的按钮点击事件 customTabBar.button1.addTarget(self, action: #selector(button1Tapped), for: .touchUpInside) customTabBar.button2.addTarget(self, action: #selector(button2Tapped), for: .touchUpInside) customTabBar.button3.addTarget(self, action: #selector(button3Tapped), for: .touchUpInside) } // 按钮1点击事件 @objc func button1Tapped() { // 切换到第一个视图控制器 selectedIndex = 0 } // 按钮2点击事件 @objc func button2Tapped() { // 切换到第二个视图控制器 selectedIndex = 1 } // 按钮3点击事件 @objc func button3Tapped() { // 切换到第三个视图控制器 selectedIndex = 2 } } ``` 接下来,创建一个名为CustomTabBar的自定义TabBar视图,用于显示TabBar按钮: ```swift import UIKit class CustomTabBar: UIView { // TabBar按钮 let button1 = UIButton() let button2 = UIButton() let button3 = UIButton() override init(frame: CGRect) { super.init(frame: frame) // 设置按钮的样式、位置和大小 button1.setTitle("Tab 1", for: .normal) button1.frame = CGRect(x: 0, y: 0, width: frame.width / 3, height: frame.height) button2.setTitle("Tab 2", for: .normal) button2.frame = CGRect(x: frame.width / 3, y: 0, width: frame.width / 3, height: frame.height) button3.setTitle("Tab 3", for: .normal) button3.frame = CGRect(x: (frame.width / 3) * 2, y: 0, width: frame.width / 3, height: frame.height) // 添加按钮到自定义TabBar视图 addSubview(button1) addSubview(button2) addSubview(button3) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } ``` 最后,在AppDelegate中设置CustomTabBarController为应用程序的主视图控制器: ```swift import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) // 创建自定义TabBar视图控制器 let customTabBarController = CustomTabBarController() // 设置自定义TabBar视图控制器为主视图控制器 window?.rootViewController = customTabBarController window?.makeKeyAndVisible() return true } } ``` 在这个示例中,我们创建了一个CustomTabBarController作为自定义TabBar的容器,并在其中添加了CustomTabBar视图。CustomTabBar视图中包含了三个按钮,分别用于切换到不同的视图控制器。你可以根据需要进行修改和扩展,以满足你的具体需求。 希望对你有所帮助!如果你有任何进一步的问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值