zoukankan      html  css  js  c++  java
  • 【IOS开发—视图控制器】

    一、UIViewController

      视图控制器是UIViewController类或者其子类对象,每个视图控制器都负责管理一个视图层次结构。在UIViewController中有一个重要的UIView属性, 这个view就是这个视图层的根视图,当程序将view作为子视图加入窗口时,也会加入UIViewController对象所管理的整个视图层次结构。

      视图控制器只有在将某个视图显示在屏幕上时,相应的视图控制器才会创建其视图,这种延迟加载视图的做法能提高内存的使用效率。视图控制器创建视图的方式有两种:

      1)重写UIViewController中的loadView方法。

      2)使用nib文件。

    二、将当前时间(无论哪个时区)转换成系统时区的时间

        //返回系统当前的时区,对比localTimeZone(区别是localTimeZone时区是可以被修改的)
        NSTimeZone *timeZone=[NSTimeZone systemTimeZone];
        //目标日期与本地时区的偏移量
        NSInteger seconds=[timeZone secondsFromGMTForDate:date];
        //将目标日期+上偏移量转化成本时区的时间
        NSDate *newDate=[date dateByAddingTimeInterval:seconds];

    三、UITabBarController

      UITabBarController也是继承于ViewController的类,他能够实现tab,来管理多个ViewCOntroller标签项。

        //添加一个UITabBarController
        UITabBarController *tabController = [[UITabBarController alloc] init];
        tabController.viewControllers = @[BNRController, XKController];

    另外,标签项的标签栏上可以设置图片和title,具体数据是由视图控制器的tabBarItem属性提供。ViewController需要重写initWithNibName方法

    - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        
        if (self) {
            //设置标签页的标题
            self.tabBarItem.title = @"Hypnotize";
            
            //从图像文件创建一个UIImage对象
            UIImage *image = [UIImage imageNamed:@"Hypno.png"];
            
            //将UIImage对象赋给标签页的image属性
            self.tabBarItem.image = image;
        }
        
        return self;
    }

    四、添加本地提醒

    直接上代码

        
        //添加本地提醒
        UILocalNotification *note = [[UILocalNotification alloc] init];
        
        if (note) {
            
            //notification触发的时间
            note.fireDate  = date;
            
            //显示在图标上的红色数字
            note.applicationIconBadgeNumber = 1;
            
            //设置时区
            note.timeZone = [NSTimeZone defaultTimeZone];
            
            
            // 设置重复间隔
            note.repeatInterval = kCFCalendarUnitDay;
            
            //通知的body
            note.alertBody = @"Hypontize me!!";
            
            //这个是触发对应按钮上的文字
            note.alertAction = NSLocalizedString(@"mememe", nil);
            
            //UIApplication是一个单例对象,通过sharedApplication可以获得这个单例
            //scheduleLocalNotification 用于通知系统去执行这个notification
            [[UIApplication sharedApplication] scheduleLocalNotification:note];

    我试验那个alertAction并没有见到效果(后面做应用用到本地notification时再研究)。

     五、视图控制器相关的生命周期方法

    1)didFinishLaunchingWithOptions

      该方法用于设置和初始化应用窗口的根视图控制器,会在应用启动完毕时调用一次。

    2)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

      是UIViewController的指定初始化方法

    3)loadView

      覆盖该方法,使用代码方式设置试图控制器的View属性,

    4)viewDidLoad(视图控制器加载完NIB文件之后调用)

      覆盖该方法,设置使用NIB对象创建的视图对象,该方法会在试图控制器加载完视图后被调用。

    5)ViewWillAppear(视图控制器的view被添加到应用窗口前被调用)

      覆盖该方法,设置使用NIB对象创建的视图对象,和viewDidLoad的区别是:viewDidLoad只会在视图被夹在时调用,而ViewWillAppear每次视图显示到window时都会被调用。

    6)viewDidAppear(视图控制器的view已经被添加到应用窗口)

    7)viewWillDisappear(视图控制器的view在将要从窗口移除时调用)

    8)viewDidDisappear(视图控制器的view在已经从窗口移除时调用)

    六、为视图添加运动效果

    直接上代码:

            //添加视觉差效果
            UIInterpolatingMotionEffect *motionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
            
            motionEffect.minimumRelativeValue = @(-25);
            motionEffect.maximumRelativeValue = @(25);
            
            [label addMotionEffect:motionEffect];
            
            //添加视觉差效果
            motionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
            
            motionEffect.minimumRelativeValue = @(-25);
            motionEffect.maximumRelativeValue = @(25);
            
            [label addMotionEffect:motionEffect];
  • 相关阅读:
    [刷题] 1023 组个最小数 (20分)
    [刷题] 1018 锤子剪刀布 (20分)
    Leetcode 542 01矩阵 图的按距离遍历
    Leetcode 515 每个树行中的最大值 BFS
    Leetcode17.12 BiNode 中序遍历
    Leetcode 513 树左下角的值 DFS 与 BFS
    leetcode 787 K 站中最便宜的航班 DP
    数据可视化基础专题(43):NUMPY基础(8)切片和索引,高级索引(二) 高级索引
    数据可视化基础专题(42):NUMPY基础(7)切片和索引,高级索引(一)
    数据可视化基础专题(41):NUMPY基础(6)数组创建(3) 从数值范围创建数组
  • 原文地址:https://www.cnblogs.com/zhouliweiblog/p/4984720.html
Copyright © 2011-2022 走看看