使用代码实现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;

由于本人水平有限,不当之处还请批评指正。初学IOS,希望大家一起交流一起进步~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容