zoukankan      html  css  js  c++  java
  • NSLayoutConstraint 布局,配合简单的动画效果



    demo地址 :链接: http://pan.baidu.com/s/1c00ipDQ 密码: mi4c




    1
    @interface ViewController () 2 3 @property (nonatomic, strong) UILabel *label; 4 5 @end 6 7 @implementation ViewController 8 9 - (void)viewDidLoad { 10 [super viewDidLoad]; 11 12 //创建一个Label 13 UILabel *label = [[UILabel alloc] init]; 14 label.text = @"test"; 15 label.backgroundColor = [UIColor orangeColor]; 16 [self.view addSubview:label]; 17 self.label = label; 18 }
    #pragma mark -- 在视图将要显示的时候 设置位置
    - (void)viewWillAppear:(BOOL)animated {
        
         self.label.centerX -= self.view.width;
         self.label.centerY = 80;
    }
    #pragma mark --在视图现实的时候
    - (void)viewDidAppear:(BOOL)animated {
        
        /*当一个自定义view的某个属性发生改变,
         并且可能影响到constraint时,
         需要调用此方法去标记constraints需要在未来的某个点更新,
         系统然后调用updateConstraints.
         */
        [self.view setNeedsUpdateConstraints];
        
        //设置动画
        [UIView animateWithDuration:1 animations:^{
            
            //关闭系统的自动布局
            self.label.translatesAutoresizingMaskIntoConstraints = NO;
            
            //将自己的属性存放到数组中
            NSDictionary *dict = @{@"label": self.label};
            
            //设定约束
            //设置水平约束条件
            NSArray *arrayH = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-80-[label]-80-|" options:0 metrics:nil views:dict];
            //设置垂直约束条件
            NSArray *arrayV = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-80-[label]" options:0 metrics:nil views:dict];
            //添加约束
            [self.view addConstraints:arrayH];
            [self.view addConstraints:arrayV];
            
            // 当视图发生改变的时候layoutIfNeeded 方法来强制进行布局
            [self.label layoutIfNeeded];
            
        } completion:nil];
    }

    可以将约束变成自己的一个属性,每次要改变约束的时候,删除相关的约束 例如:

    @property (nonatomic, copy) NSArray *arrayV;
    self.arrayV = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-80-[label]" options:0 metrics:nil views:dict];
    当要改变约束的时候,将它移除:

    [self.view removeConstraint:self.arrayV];  

    虽然这样做有点前期麻烦,但是做成之后就觉得非常值得了

  • 相关阅读:
    能组成多少个无重复数字且不为5的倍数的五位数有多少个?
    http与https
    观察者模式和发布/订阅模式的区别
    快速排序的最优时间复杂度是 O(nlogn)
    函数实现 composeFunctions(fn1,fn2,fn3,fn4)等价于fn4(fn3(fn2(fn1))
    vue双向绑定代码实现
    node历史版本下载
    阻止scroll冒泡
    中断或取消Promise链的可行方案
    从输入url到页面加载完成发生了什么?——前端角度
  • 原文地址:https://www.cnblogs.com/HwangKop/p/4750373.html
Copyright © 2011-2022 走看看