Android 自动动画布局更新 使用,自动布局做动画的应用

使用自动布局做动画,就是通过更改控件的frame来实现动画,但是不能直接更改frame,可以更改控件的约束关系来实现,其注意事项如下:

自动布局的页面实现动画效果需要注意

1.不能够直接修改frame,可能会引起自动布局系统计算错误

2.直接修改视图的约束关系.自动布局系统会根据约束关系 自动计算空间的frame  在layoutSubViews方法中计算视图的frame

3.每一次运行循环开启时  自动布局系统都会  '收集' 所有页面视图的约束的修改 不会立即更新约束

在运行循环结束前  会自动调用 layoutsubViews方法 修改所有子视图的frame

4.如果希望提前更新约束 需要强制刷新页面 self.view.layoutIfNeeded() 需要在动画的闭包中执行 并且 一定要在修改约束之后调用

使用举例:使用第三方库Masonry来约束控件,在相应的控制器.m文件中实现方法viewDidAppear,其中self.iconView   self.welcomeLabel是控制器view的两个子控件,具体实现动画方法如下:

- (void)viewDidAppear:(BOOL)animated{

[super viewDidAppear:animated];

CGFloat offset = - [UIScreen mainScreen].bounds.size.height + 150;

self.welcomeLabel.alpha = 0;

// 弹簧系数(SpringWithDamping) * 10 ~= 加速度(SpringVelocity) 这个时候动画效果一般不会太突兀

[UIView animateWithDuration:0.5 delay:0 usingSpringWithDamping:0.98 initialSpringVelocity:9.8 options:0

animations:^{

//对于已经存在的约束 如果需要进行修改可以使用mas_update  不存在该约束 就会自动创建约束

[self.iconView mas_updateConstraints:^(MASConstraintMaker *make) {

make.bottom.equalTo(self.view.mas_bottom).offset(offset);

}];

//强制刷新页面  将收集的所有的约束的更改 都执行页面 frame刷新

[self.view layoutIfNeeded];

self.welcomeLabel.alpha = 1;

} completion:^(BOOL finished) {

}];

}

注意:动画的实现一般在- (void)viewDidAppear:(BOOL)animated方法中实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值