天天看点

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

主要步骤:

  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;
           

继续阅读