CGRectOffset动画不适用于ios8,但适用于ios7
问题描述:
我有一个UIView
,当检测到向上滑动时,在animateWithDuration
块中向上移动。当检测到向下滑动时,相同的视图以相同的方式向下移动。当发生向下滑动并且向下移动动画完成时,我会调用另一种方法来动画从左向右摇动UILabel
。这完全适用于我的iphone 5与ios7,但不适用于ios8。有人知道为什么我听说CGRectOffset不能与autolayout
一起工作,但这并不能解释为什么我可以在ios7上运行而不是在ios8上运行。CGRectOffset动画不适用于ios8,但适用于ios7
-(void) animatePlayLabel
{
[UIView animateWithDuration:1 delay:0 usingSpringWithDamping:0.1 initialSpringVelocity:0.2 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.playLabel.frame = CGRectOffset(self.playLabel.frame, -10, 0);
self.playLabel.frame = CGRectOffset(self.playLabel.frame, +20, 0);
self.playLabel.frame = CGRectOffset(self.playLabel.frame, -20, 0);
self.playLabel.frame = CGRectOffset(self.playLabel.frame, +20, 0);
self.playLabel.frame = CGRectOffset(self.playLabel.frame, -20, 0);
self.playLabel.frame = CGRectOffset(self.playLabel.frame, +20, 0);
self.playLabel.frame = CGRectOffset(self.playLabel.frame, -10, 0);
} completion:^(BOOL finished) {
}];
答
您应该只在UIView动画块中设置最终值frame
。事实上,你在iOS 7中得到的结果是侥幸 - 你错误地使用了这个API。
它看起来像你希望这个标签在没有移动的地方反弹。您可以使用UIDynamics轻松实现此效果。 (这里有很多示例代码。)
如果您想对效果进行更细致的控制,请查看Core Animation的关键帧动画。