文档章节

AutoLayout-代码布局添加动画

y
 y_ming
发布于 2015/05/23 23:10
字数 367
阅读 1377
收藏 9

    开始之前先推荐老外封装好的开源库Masonry,Masonry是一个轻量级的布局框架,拥有自己的描述语法,简洁明了并具有高可读性。下面得例子用系统API实现一个和Masonry一样得布局,点击一个Button改变尺寸,Button尺寸不能超过VC界面;



添加一个button在VC中心

@interface PPBUpdateVC()
@property (nonatomic,strong) UIButton *growingButton;
@property (nonatomic,strong) NSLayoutConstraint *layoutWith;
@property (nonatomic,strong) NSLayoutConstraint *layoutHeight;
@end

添加button

self.growingButton = [UIButton buttonWithType:UIButtonTypeSystem];
    [self.growingButton setTitle:@"Grow Me!" forState:UIControlStateNormal];
    self.growingButton.layer.borderColor = UIColor.greenColor.CGColor;
    self.growingButton.layer.borderWidth = 3;
    self.growingButton.translatesAutoresizingMaskIntoConstraints = NO;
    [self.growingButton addTarget:self action:@selector(didTapGrowButton:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.growingButton];

添加宽度约束

self.layoutWith = [NSLayoutConstraint
                       constraintWithItem:self.growingButton
                       attribute:NSLayoutAttributeWidth
                       relatedBy:NSLayoutRelationEqual
                       toItem:nil
                       attribute:NSLayoutAttributeNotAnAttribute
                       multiplier:1.0
                       constant:100];
    self.layoutWith.priority = UILayoutPriorityDefaultHigh;
    [self.growingButton addConstraint:self.layoutWith];  

添加高度约束

self.layoutHeight = [NSLayoutConstraint
                       constraintWithItem:self.growingButton
                       attribute:NSLayoutAttributeHeight
                       relatedBy:NSLayoutRelationEqual
                       toItem:nil
                       attribute:NSLayoutAttributeNotAnAttribute
                       multiplier:1.0
                       constant:100];
    self.layoutHeight.priority = UILayoutPriorityDefaultHigh;
    [self.growingButton addConstraint:self.layoutHeight];

添加中心点约束

NSLayoutConstraint *centerX = [NSLayoutConstraint constraintWithItem:self.growingButton attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
    NSLayoutConstraint *centerY = [NSLayoutConstraint constraintWithItem:self.growingButton attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0];
    [self.view addConstraint:centerX];
    [self.view addConstraint:centerY];

添加button的最大宽度和高度,这里要注意的是,对同一个属性添加多个约束要设置优先级,否则会报错。

self.layoutWith.priority = UILayoutPriorityDefaultHigh;

NSLayoutConstraint *maxWidth = [NSLayoutConstraint constraintWithItem:self.growingButton
                                 attribute:NSLayoutAttributeWidth
                                 relatedBy:NSLayoutRelationLessThanOrEqual
                                    toItem:self.view
                                 attribute:NSLayoutAttributeWidth
                                multiplier:1.0
                                  constant:0];
    [self.view addConstraint:maxWidth];
    
    [self.view addConstraint:
     [NSLayoutConstraint constraintWithItem:self.growingButton
                                  attribute:NSLayoutAttributeHeight
                                  relatedBy:NSLayoutRelationLessThanOrEqual
                                     toItem:self.view
                                  attribute:NSLayoutAttributeHeight
                                 multiplier:1.0 constant:0]];

}



button点击事件

- (void)didTapGrowButton:(UIButton *)button {
    self.layoutHeight.constant = self.layoutHeight.constant * 1.3;
    self.layoutWith.constant   = self.layoutWith.constant * 1.3;
    [UIView animateWithDuration:0.4 animations:^{
        [self.growingButton layoutIfNeeded];
    }];
}

附源代码  https://github.com/p-p-b/AutoLayoutDemo    

© 著作权归作者所有

y
粉丝 0
博文 5
码字总数 1536
作品 0
武汉
高级程序员
私信 提问
Autolayout小结(二)

Autolayout小结(二) 在Autolayout小结(一)中介绍了在Autolayout学习中一些基本的注意点,本文会针对一些布局上常见的问题进行分析。 如何自动适应cell的高度 如何在ScrollView中使用Autol...

法斗斗
2015/10/14
55
0
iOS开发之Autolayout

非盈利无广告开发者专用网址导航:www.dev666.com 1、概述 在以前的iOS程序中,是如何设置布局UI界面的? (1)经常编写大量的坐标计算代码 (2)为了保证在3.5 inch和4.0 inch屏幕上都能有完...

feng_blog
2015/08/31
3.7K
5
iOS开发通过代码方式使用 NSLayoutConstraint + Masonry

随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫切和必要。(包括:iPhone4/4s,iPhone5/5s,iPhone6/6s,iPhone 6p/6ps)。 在 iPhone6出现以前,我们接触...

Daniel_s
2016/07/13
32
0
Autolayout优秀的第三方开源库

今天才发现CSDN支持markdown了…还是给出新博客地址:Autolayout优秀的第三方开源库 最近项目开始用纯代码布局整个UI框架, 对于前一段很长时间都是xib+storyboard狂拖控件约束的我来说,每天写...

humingtao2013
2015/06/25
0
0
AutoLayout框架Masonry使用心得

我们组分享会上分享了页面布局的一些写法,中途提到了AutoLayout,会后我决定将很久前挖的一个坑给填起来(还有好多坑就不说了,说了不填更毁形象了)。 可使用的框架首推Masonry,关于为啥选...

北方人在上海
2016/05/25
95
0

没有更多内容

加载失败,请刷新页面

加载更多

堆”和“栈

C++作为一款C语言的升级版本,具有非常强大的功能。它不但能够支持各种程序设计风格,而且还具有C语言的所有功能。我们在这里为大家介绍的是其中一个比较重要的内容,C++内存区域的基本介绍。...

SibylY
15分钟前
2
0
总结:Https

一、介绍 简单理解,https即在http协议的基础上,增加了SSL协议,保障数据传输的安全性。 它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式 ...

浮躁的码农
17分钟前
2
0
数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
48分钟前
6
0
MySQL 表崩溃修复

MySQL日志报错 2019-10-19 13:41:51 19916 [ERROR] /usr/local/mysql/bin/mysqld: Table './initread_hss/user_info' is marked as crashed and should be repaired2019-10-19 13:41:51 1......

雁南飞丶
58分钟前
6
0
Error和Exception

1.Error类和Exception类都是继承Throwable类 2.Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问...

大瑞清_liurq
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部