zoukankan      html  css  js  c++  java
  • ViewController

    ViewController

    • ViewController

      • 进入VC后先调用loadView,再调用ViewDidLoad
        • ViewDidLoad皆为系统调用
        • 需要先调用[super viewDidLoad]
        • 控制器的View加载完毕的时候调用
        • viewLoad进行控件的初始化,数据的初始化
        • 其中的self指的是控制器
        • 添加控件的顺序是栈的顺序,即先添加的在底下,后添加的在上面
      • 接着调用viewWillAppear,再调用viewDidAppear
        • 先调用[super viewDidAppear]
        • viewDidAppear中可查看控制器的View的父控件UIWindow,只有在加载完毕后才会呈现父控件
        • viewDidAppear可以移除view控件
      • didReceiveMemoryWaring
        • 系统调用
        • 当控制器接收到内存警告是调用
        • 去除一些不必要的内存,去除耗时内存
    • viewController的方法

      • performSelector: (nonnull SEL) withObject: (nullable id) afterDelay: (NSTimeInterval):延迟多少时间执行某个方法
        • nonull SEL:需要延迟执行的方法
        • nullable:该方法传入的参数
        • NSTimeInterval:延迟的时间
    • viewController系统自动调用的方法

      • prefersStatusBarHidden:是否隐藏状态栏,返回BOOL类型

    XIB

    • xib的展示
    - (void)viewDidLoad {
        [super viewDidLoad];
        //方式一
        UIView *view1 = [[[NSBundle mainBundle] loadNibNamed:@"XIB-NAME" owner:nil options:nil] firstObject];
        [self.view addSubview:view1];
        //方式二
        UINib *nib = [UINib nibWithNibName:@"XIB-NAME" bundle:nil];
        UIView *view2 = [[nib instantiateWithOwner:nil options:nil] firstObject];
        [self.view addSubview:view2];
        }
    • xib的注意事项
      • 如果一个View从Xib中加载,就不能使用[[XX alloc] init]和initwithframe这两个方法
      • 如果一个xib经常被使用,应该提供快速构造方法
      • 如果View从Xib创建,会调用initWithCode和awakeFromNib两个方法
      • 如果子控件是从Xib中创建的,是出于未唤醒状态的,若要在Xib上创建的子控件上添加子控件,要在awakeFromNib方法中创建

    UIView

    • UIView

      • 每个控件都继承于UIView
      • 比较常见的是将UIView作为容器
      • view中只能存放控件,不能拥有属性???
      • storyboard中只能用UIView作为容器,只能用UIView添加子控制器
      • 所有的控件都是一个容器
      • 每个控制器(viewController)都有一个UIView
      • 控制器(viewController)本身是不可见的,能够看见的是控制器的View
      • 每一个控制器(viewController)都有一个UIView属性
    • UIView对象的常见属性

      • superview:获得父控件
        • view的父控件为UIWindow
      • subViews:获得子控件
        • 返回的为一个泛型,为一个数组
        • 获取subview的数组通过self.subviews获取到
      • tag:控件的ID
        • 父控件可以通过tag找到对应的子控件
      • transfrom:控件的形变属性
        • 可以设置旋转角度、比例缩放、平移等属性
      • frame:控件矩形框在父控件中的位置和尺寸
        • 以父控件的左上角为坐标原点,更改尺寸是以自身的左上角向右方和下方延伸
        • frame.origin:可更改CGRect的x与y
        • frame.size:可更改CGRect的wigth和height
        • 其中CGRect等都是结构体,在定义该类型属性前不需要加‘*’星号
        • bounds:控件矩形框的位置和尺寸
        • 以自己左上角为坐标原点,所以bounds的x、y一般为0,也就是说一般只能改变尺寸(ios9以后中心点不变向四周延伸更改尺寸)
      • centre:控件中点的位置
        • 以父控件的左上角为坐标原点
      • autoresizingMask:autoresizingMask的设置
        • UIViewAutoresizingFlexibleLeftMargin:距离父控件左边是可以变动的
        • UIViewAutoresizingFlexibleRightMargin:距离父控件右边是可以变动的
        • UIViewAutoresizingFlexibleTopMargin:距离父控件上边是可以变动的
        • UIViewAutoresizingFlexibleBottomoMargin:距离父控件下边是可以变动的
        • UIViewAutoresizingFlexibleHeight:高度可以随父控件进行变动
        • UIViewAutoresizingFlexibleWidth:宽度可以随父控件进行变动
      • translatesAutoresizingMaskIntoConstraints:在使用Autolayout的情况下是否将AutoresizingMask自动转化成约束
        • 在用代码添加控件时,该方法默认为YES
        • 在使用代码添加约束的时候,要将每一个添加约束的View的该属性修改为NO
      • layoutIfNeed:强制刷新界面,约束修改后的动画效果需要用该属性
        • iOS9以后该方法只会刷新子控件,不会刷新控件本身
    /************************Frame示例代码**********************/
    #import "ViewController.h"
    
    @interface ViewController ()
    @property (nonatomic ,weak) UILabel *testLabel;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        UILabel *label = [[UILabel alloc] init];
        label.frame = CGRectMake(100, 100, 100, 100);
        [self.view addSubview:label];
        self.testLabel = label;
        //更改frame方式一
        self.testLabel.frame = CGRectMake(50, 50, 150, 150);
        //方法二
        //通过强制转换成CGRect
        self.testLabel.frame = (CGRect){{50,50},{150,150}}
        //方式三
        //结构体是值传递,非地址传递
        //CGRect是结构体不能写成CGRect *frame = ……
        CGRect frame = self.testLabel.frame;
        frame.origin.x += 50;
        frame.origin.y += 50;
        frame.size.width += 50;
        frame.size.height += 50;
        //再将frame的值传回self.testLabel.frame
        self.testLabel.frame = frame;
    }
    @end
    
    
    
    /*************autoresizingMask使用示例代码*******************/
        self.testview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
    
    
    
    /********使用layoutIfNeed制作约束修改后的动画效果代码********/
    //已通过storyboard创建了一个UIView对象,并做了分别为距离父View上下左右的四个约束
    
    @interface ViewController ()
    //对storyboard中左约束进行拖线
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *leftconstrain;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
       //已通过storyboard创建了一个UIView对象,并做了分别为距离父View上下左右的四个约束
    }
    
    //点击控制器触发
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        //以修改左约束为例
        self.leftconstrain.constant = 100;
        [UIView animateWithDuration:2 animations:^{
            [self.view layoutIfNeeded];
        }];
    }
    @end
    • UIView的常见的对象方法
      • addSubview:添加子控件

        • 通过父控件调用该方法添加子控件
      • insertSubview-belowSubview:在某个Subview之下添加子控件

      • removeFromSubview:移除子控件

        • 要移除哪个子控件就用该控件调用该方法
        • 只要有父控件就一定能够移除
      • viewWithTag:根据一个tag标识找出对应的控件(一般是子控件)

        • tag尽量少使用,会混乱,效率很差,内不是递归遍历
        • 通过父控件调用该方法传入子控件的tag获得子控件
      • beginAnimations-context:开始动画

      • commitAnimatons:提交动画

      • setAnimationDuration:设置动画时间

      • animateWithDuration-animations:可直接使用闭包的形式创建动画

      • animateWithDuration-animations-completion:可直接使用闭包的形式创建动画

      • animateWithDuration-delay-options-animations-completion:可直接使用闭包的形式创建动画

        • delay:可设置延迟时间
        • options:动画渐变方式
        • animations:动画执行时效果
        • completion:以及动画结束后的操作
      • addConstraint:添加约束的方法

      • layoutIfNeeded:强制刷新

      • sendSubviewToBack:将一个继承UIView的子控件添加到View最底层

        • 在使用该方法之前依旧需要使用addSubview
        • 可用此方法设置UIView的背景图片
    /************************以下是Tag使用代码****************************/
    #import "ViewController.h"
    
    @interface ViewController ()
    @property (nonatomic ,weak) UIView *testView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        UIView *view = [self.view viewWithTag:1];
        self.testView = view;//这句一定要写
    }
    
    @end
    /************************以下是动画代码*******************************/
    #import "ViewController.h"
    
    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UIView *testview;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    - (IBAction)pingyi:(UIButton *)sender {
        [UIView animateWithDuration:2 animations:^{
            CGRect frame = self.testview.frame;
            frame.origin.x += 20;
            self.testview.frame = frame;
        }];
        
    }
    - (IBAction)suofang:(UIButton *)sender {
        [UIView animateWithDuration:2 animations:^{
            CGRect frame = self.testview.frame;
            frame.size = CGSizeMake(80, 100);
            self.testview.frame = frame;
        } completion:^(BOOL finished) {
            self.testview.backgroundColor = [UIColor blackColor];
        }];
    }
    - (IBAction)touming:(UIButton *)sender {
        /*
        UIViewAnimationOptionCurveEaseInOut 此为默认方式
        UIViewAnimationOptionCurveEaseIn    此为先快后慢
        UIViewAnimationOptionCurveEaseOut   此为先慢后快
        UIViewAnimationOptionCurveLinear    此为线性方式
         */
        [UIView animateWithDuration:2 delay:2 options:UIViewAnimationOptionCurveEaseOut animations:^{
            self.testview.alpha = 0;
        } completion:^(BOOL finished) {
            [UIView animateWithDuration:2 animations:^{
                self.testview.alpha = 1;
            }];
        }];
    }
    • UIView的自动调用的方法
      • touchBegan-withEvent:点击控制器的View会自动调用的方法,监听UIView的点击事件
    • 自定义UIView
      • layoutSubview:布局子控件,可以拿到frame
        • 必须调用super
  • 相关阅读:
    创业:路漫漫其修远兮 吾将上下而求索
    一些忠告给想转行当程序员的你
    那些年薪百万的程序员“咸鱼翻身”没有透露的秘密
    Ajax请求ashx一般处理程序实现文件下载
    ASP.Net Web 点击链接直接下载 不在浏览器打开
    JQuery 字符串截取
    Jquery not选择器实现元素显示隐藏
    Jquery获取元素坐标
    ThinkPHP Uploadify 图片上载
    Extjs4.2.1学习笔记[更新]
  • 原文地址:https://www.cnblogs.com/igeniuswwh/p/6209151.html
Copyright © 2011-2022 走看看