man*_*cus 20 animation objective-c cgaffinetransform ios ios8
我试图找到一个原因,为什么UIView转换属性的动画在iOS 8中看起来与iOS 6/7不同.
举一个简单的例子,在iOS 8之前:
myView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, 1.57);
[UIView animateWithDuration:5 animations:^{
myView.transform = CGAffineTransformTranslate(plane.transform, 100, 0);
}];
Run Code Online (Sandbox Code Playgroud)
给出预期的结果,"myView"旋转90度并向下移动,但在iOS8中,当翻译动画时,它开始于我无法找到解释的点(打破动画).
有谁知道它的解释?提前致谢!
CGAffineTransformIdentity在ios7和ios8上的行为有所不同.这与自动布局和大小类有关.解决方案是删除与ios7上的动画冲突的约束.
// solve the constraint-animation problem
if(NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1) {
// iOS7 remove constraints that conflict with animation
if (self.centerYAlignment != nil) {
self.view.removeConstraint(self.centerYAlignment) //is an IBOutlet
}
} else {
// iOS8 constraint animations are fine
}
Run Code Online (Sandbox Code Playgroud)
我在缩放方面也遇到了同样的问题。我想旋转也可能是一样的。你能试试这个吗?
myView.transform = CGAffineTransformConcat(myView.transform , CGAffineTransformMakeRotate(1.57));
[UIView animateWithDuration:5 animations:^{
myView.transform = CGAffineTransformTranslate(plane.transform, 100, 0);
}];
Run Code Online (Sandbox Code Playgroud)
也许还需要使用 CGAffineTransformMakeTranslate 和 CGAffineTransformConcat ,我不确定。
最糟糕的部分是:你必须在 iOS 版本上执行 if/else,因为这在 iOS 7 上看起来很奇怪。我希望 Apple 在 iOS 8 发布之前或发布时解决这个问题。
| 归档时间: |
|
| 查看次数: |
10097 次 |
| 最近记录: |