使用代码实现Autolayout和动画效果
2019-04-02 本文已影响0人
COMMA_迷途知返
主要步骤:
-
利用
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
-
添加约束对象到对应的view上
-(void)addConstraint:(NSLayoutConstranit *) constraint; -(void)addConstraints:(NSArray *)constraints;
代码实现Autolayout的注意点
-
要先禁止autoresizing功能,设置view的下面属性为NO
view.translatesAutoresizingMaskIntoConstraints = NO;
-
添加约束之前,一定要保证相关控件都已经在各自的父控件上
-
不用再给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;