最近做一个动画的时候, 因为用到了约束, 所以在改变约束之后, 需要使用动画来实现, 但是发现在iOS10.2 系统上面没有效果, 但是在iOS9、iOS8上面没有问题. 遂网上查看了一下, 发现在iOS10中, Apple改变了layoutIfNeed(期望不改变view的位置).
//改变位置
[self.imageV mas_remakeConstraints :^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self);
make.centerX.mas_equalTo(self);
make.width.mas_equalTo(self.mas_width).multipliedBy(0.75);
}];
//旋转
self.imageV.transform = CGAffineTransformRotate(self.imageV.transform, -M_1_PI / 2);
[UIView animateWithDuration:0.35 animations:^{
[self.imageV layoutIfNeeded];//这一句在iOS10没有动画效果
self.imageV.transform = CGAffineTransformIdentity;
}];
上面的代码在iOS10以下系统没有问题, 有一个动画效果, 但是在iOS10上面是没有任何效果的.
解决方法: 因为在iOS10, Apple改变了layoutIfNeed实现, Apple给出的解决方案是: 调用[superView layoutIfNeeded]
[UIView animateWithDuration:0.35 animations:^{
if([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
[self.imageV.superview layoutIfNeeded];
} else {
[self.imageV layoutIfNeeded];
}
self.imageV.transform = CGAffineTransformIdentity;
}];