iOS开发之ViewControler

原创 2016年08月30日 14:19:56

关于视图控制器
**视图控制器用来控制 view 和 model 之间的交互,在iOS中,用UIViewControler表示视图控制器
此类中有一些特定的方法需要开发者在开发过程中完成
1.初始化方法
2.加载视图的方法**

初始化方法

//下面两个初始化方法,可以重写父类方法,实现自己需要的功能
- (id)init {
    if(self = [super init]){

    }    
    return  self;
}
//带nib文件的初始化方法
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
    if(self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]){


    }
    return  self;
}

视图的生命周期
在视图的不同生命周期中,视图控制器会回调不同的方法
一个控制器必须带有一个根视图

//加载视图
- (void)loadView{
    //调用super让父类去帮我们完成一些初始化工作,override重写父类的方法
    [super loadView];

    NSLog(@"加载视图");
}

//在视图控制器已被实例化,还会被加载到内存中的时候,会调用viewDidLoad,这时视图并没有出现。该方法只调用一次。
- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor orangeColor];
    //打印方法名
    NSLog(@"%s",__func__);
}
//以上两种方法在视图控制器类被实例化后,只执行一次。

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];
    NSLog(@"视图将要出现");
}
- (void)viewDidAppear:(BOOL)animated{

    [super viewDidAppear:animated];
    NSLog(@"视图已经出现");
}
- (void)viewWillDisappear:(BOOL)animated{

    [super viewWillDisappear:animated];
    NSLog(@"视图将要消失");

}
- (void)viewDidDisappear:(BOOL)animated{

    [super viewDidDisappear:animated];
    NSLog(@"视图已经消失");
}

创建一个button,添加到buttonAction方法

- (IBAction)buttonAction:(UIButton *)sender { 
    NSLog(@"点我");   
    //初始化一个视图控制器
    BViewController *bVC = [[BViewController alloc] initWithNibName:@"BViewController" bundle:[NSBundle mainBundle]];
    //从本视图推送到另一个视图,即bVC控制器所在视图
    [self presentViewController:bVC animated:YES completion:^{
        //完成后实现的方法
        NSLog(@"模态推送完成");
    }];
}
//返回到推送之前的视图,到BViewController类里创建一个按钮并添加到方法
- (IBAction)backAction:(UIButton *)sender {

    NSLog(@"b点我");
    //返回到上一个视图
    [self dismissViewControllerAnimated:YES completion:^{
        //完成后实现的方法
    }];

与UIView有关的属性

- (void)viewDidLoad {
    [super viewDidLoad];

    flag = YES;
    self.view.backgroundColor = [UIColor orangeColor];
    //打印方法名
    NSLog(@"%s",__func__);

    //UIView
    //UIView为所有控件的父类
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 50, 100, 100)];
    //给视图添加背景颜色
    view.backgroundColor = [UIColor blueColor];
    //设置圆角
    view.layer.cornerRadius = 5.0;
    //其它层超出范围的部分隐藏起来
    view.layer.masksToBounds = YES;

    view.layer.borderWidth = 1.0;
    view.layer.borderColor = [UIColor yellowColor].CGColor;

    [self.view addSubview:view];

    UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(35, 35, 30, 30)];
    view1.backgroundColor = [UIColor greenColor];
    [view addSubview:view1];
    /*
     理解子视图和父视图的概念
     有且仅有一个父视图
     UIView *superView = view.superview;
     有多个子视图
     NSArray *array = self.view.subviews;

     每个视图都有添加子视图的方法:addSubview
     UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(35, 35, 30, 30)];
     view1.backgroundColor = [UIColor greenColor];
     [view addSubview:view1];

     //关于视图的位置:UIView类给了三个属性:frame  bounds  center
     /*
     frame 和 bounds 的区别
     其中frame是参考父视图的左上角
     而bounds是参考它自己

     */

    NSLog(@"view.frame = %@",[NSValue valueWithCGRect:view.frame]);
    NSLog(@"view.bounds = %@",[NSValue valueWithCGRect:view.bounds]);
    NSLog(@"view.center = %@",[NSValue valueWithCGPoint:view.center]);

    //写一个button
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(10, 200, 100, 300);
    button.backgroundColor = [UIColor greenColor];
    [button setTitle:@"点击" forState:UIControlStateNormal];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    //添加点击事件
    [button addTarget:self action:@selector(buttonAction2:) forControlEvents:UIControlEventTouchUpInside];
    //每一个view都有一个tag属性
    view.tag = 1000;

    [self.view addSubview:button];
}

实现视图的移动大小变化及回到原来状态,即用UIView实现简单的动画

- (void)buttonAction2:(UIButton *)sender{
    //通过tag值获得viewDidLoad里的view,是同一个view
    UIView *view = [self.view viewWithTag:1000];
    //BOOL默认为NO,即flag默认为NO,所以在viewDidLoad设置flag值为YES
    if (flag) {
         //表示在2.0秒之内从原来位置移动到指定目标位置,并且逐渐变大    
        [UIView animateWithDuration:2.0 animations:^{
            view.frame = CGRectMake(200, 50, 150, 150);
        }];
    }
    else{
    //表示回到原来状态(位置和大小)
        [UIView animateWithDuration:2.0 animations:^{
            view.frame = CGRectMake(10, 50, 120, 120);
        }];        
    }
    //两个状态,可以想到用BOOL来进行判断
    flag = !flag;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

IOS使用Launch Screen.storyboard制作广告启动界面

IOS使用Launch Screen.storyboard制作广告启动界面最近项目在做的广告sdk,刚好自己需要去了解这个实现启动图加载广告这个功能,大家应该都了解,之前Xcode 6是LaunchS...
  • WX_JIN
  • WX_JIN
  • 2016年02月01日 09:55
  • 9265

iOS透明viewControler

有时候在跳转控制器的时候需要,跳转到当前控制器上方,显示一个可以看到下方原来控制器的半透明控制器。 跳转方式可以修改这句代码来实现,激变,从下往上。或者也可以自定义一些动画。(已经被我注释掉的那些)c...

iOS开发中,应用内直接跳转到Appstore评分

1.进入appstore中指定的应用 NSString *str = [NSString stringWithFormat:                           @"itms-apps...

iOS开发之UIWebView入门教程

UIWebView是iOS sdk中一个最常用的控件。是内置的浏览器控件,我们可以用它来浏览网页、打开文档等等。这篇文章我将使用这个控件,做一个简易的浏览器。如下图: 我们创建一个Window-...
  • WHY_IOS
  • WHY_IOS
  • 2012年07月27日 07:29
  • 7759

iOS开发时XCode里面的空模板

  • 2015年12月08日 20:50
  • 65KB
  • 下载

IOS开发 视频合成

  • 2017年05月31日 11:16
  • 5.1MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS开发之ViewControler
举报原因:
原因补充:

(最多只允许输入30个字)