扫码关注官方订阅号
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
UIViewAnimationOptionLayoutSubviews 这个Option的作用是在执行UIView动画时,自动更新Subview的Layout约束。
例如在IB中创建这样一个View
给绿色View执行如下动画,红色View会按照原有约束进行缩放。
objc-(IBAction)startAnimation:(id)sender { [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionLayoutSubviews animations:^{ for (NSLayoutConstraint *constraint in self.view.constraints) { if (constraint.firstItem == self.container && constraint.secondItem == self.view) { constraint.active = NO; } } CGFloat width = self.container.frame.size.width; CGFloat height = self.container.frame.size.height; self.container.frame = CGRectMake(0, 0, width/2.0f, height/2.0f); } completion:nil]; }
objc
-(IBAction)startAnimation:(id)sender { [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionLayoutSubviews animations:^{ for (NSLayoutConstraint *constraint in self.view.constraints) { if (constraint.firstItem == self.container && constraint.secondItem == self.view) { constraint.active = NO; } } CGFloat width = self.container.frame.size.width; CGFloat height = self.container.frame.size.height; self.container.frame = CGRectMake(0, 0, width/2.0f, height/2.0f); } completion:nil]; }
执行结果:
若不使用UIViewAnimationOptionLayoutSubviews,约束不会在动画过程中起作用,动画会以很诡异的方式执行。
objc-(IBAction)startAnimation:(id)sender { [UIView animateWithDuration:2 delay:0 options:0 animations:^{ for (NSLayoutConstraint *constraint in self.view.constraints) { if (constraint.firstItem == self.container && constraint.secondItem == self.view) { constraint.active = NO; } } CGFloat width = self.container.frame.size.width; CGFloat height = self.container.frame.size.height; self.container.frame = CGRectMake(0, 0, width/2.0f, height/2.0f); // [self.container layoutIfNeeded]; // 添加这句和使用UIViewAnimationOptionLayoutSubviews实现的效果是一样的 } completion:nil]; }
-(IBAction)startAnimation:(id)sender { [UIView animateWithDuration:2 delay:0 options:0 animations:^{ for (NSLayoutConstraint *constraint in self.view.constraints) { if (constraint.firstItem == self.container && constraint.secondItem == self.view) { constraint.active = NO; } } CGFloat width = self.container.frame.size.width; CGFloat height = self.container.frame.size.height; self.container.frame = CGRectMake(0, 0, width/2.0f, height/2.0f); // [self.container layoutIfNeeded]; // 添加这句和使用UIViewAnimationOptionLayoutSubviews实现的效果是一样的 } completion:nil]; }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
UIViewAnimationOptionLayoutSubviews 这个Option的作用是在执行UIView动画时,自动更新Subview的Layout约束。
例如在IB中创建这样一个View

给绿色View执行如下动画,红色View会按照原有约束进行缩放。
执行结果:

若不使用UIViewAnimationOptionLayoutSubviews,约束不会在动画过程中起作用,动画会以很诡异的方式执行。
执行结果:
