美文网首页IOS开发学习笔记程序员iOS学习
使用代码实现Autolayout和动画效果

使用代码实现Autolayout和动画效果

作者: COMMA_迷途知返 | 来源:发表于2019-04-02 23:08 被阅读0次

    主要步骤:

    1. 利用NSLayoutConstraint类创建具体的约束对象

      一个NSlayoutConstraint对象就代表一个约束,创建约束对象的常用方法:

      +(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
      //view1:要约束的控件
      //attr1:约束的类型(做怎样的约束)
      //relation:与参照控件之间的关系
      //view2:参照的控件
      //attr2:约束的类型(做怎样的约束)
      //multiplier:乘数
      //c:常量
      

      自动布局的核心公式

      obj1.property1 = (obj2.property2 * multiplier) + constant value

    2. 添加约束对象到对应的view上

      -(void)addConstraint:(NSLayoutConstranit *) constraint;
      -(void)addConstraints:(NSArray *)constraints;
      

    代码实现Autolayout的注意点

    1. 要先禁止autoresizing功能,设置view的下面属性为NO

      view.translatesAutoresizingMaskIntoConstraints = NO;

    2. 添加约束之前,一定要保证相关控件都已经在各自的父控件上

    3. 不用再给view设置frame

    通过Autolayout实现动画

    通过修改约束的值,可以实现控件的变化,但直接将修改约束值的代码放在动画方法中是无法实现动画的,因为约束修改后view并不会立即重新布局,只有在动画中手动调用layoutIfNeeded方法进行重新布局才能实现动画效果

    //先修改约束的值
    //然后执行以下代码实现动画效果
    [UIView animateWithDuration:1.0 animations:^{
      [添加了约束的view layoutIfNeeded];
    }];
    

    NSLayoutConstraint对象的属性主要有以下几种

    @property (nullable, readonly, assign) id firstItem;
    @property (readonly) NSLayoutAttribute firstAttribute;
    @property (nullable, readonly, assign) id secondItem;
    @property (readonly) NSLayoutAttribute secondAttribute;
    @property (readonly, copy) NSLayoutAnchor *firstAnchor NS_AVAILABLE(10_12, 10_0);
    @property (readonly, copy, nullable) NSLayoutAnchor *secondAnchor NS_AVAILABLE(10_12, 10_0);
    @property (readonly) NSLayoutRelation relation;
    @property (readonly) CGFloat multiplier;
    @property CGFloat constant;
    @property (getter=isActive) BOOL active;
    

    相关文章

      网友评论

        本文标题:使用代码实现Autolayout和动画效果

        本文链接:https://www.haomeiwen.com/subject/ivlobqtx.html