天天看點

使用代碼實作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;
           

繼續閱讀