Iphone UIView三维变换最终帧位置
我有一个UIView,它有一个X原点,使它在屏幕右侧。然后,我使用CATTransferM3D制作关键帧动画:Iphone UIView三维变换最终帧位置,iphone,ios,core-animation,Iphone,Ios,Core Animation,我有一个UIView,它有一个X原点,使它在屏幕右侧。然后,我使用CATTransferM3D制作关键帧动画: [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(-view.width, 0, 0)] 问题是,动画完成后,视图的帧在视觉上处于正确的位置,但它仍然认为它在屏幕外,因此我无法与它交互。记录它的frame属性也会显示它在屏幕外,但从视觉上看,它不是 动画的填充模式为kCAFillModeForwards,因此动画
[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(-view.width, 0, 0)]
问题是,动画完成后,视图的帧在视觉上处于正确的位置,但它仍然认为它在屏幕外,因此我无法与它交互。记录它的frame属性也会显示它在屏幕外,但从视觉上看,它不是
动画的填充模式为kCAFillModeForwards
,因此动画的最终值保持不变
此问题的解决方案是什么,即在动画完成后与此视图交互并通知视图它确实可见?您可以使用动画委托方法
-animationDidStop:finished:
在动画完成时修复此问题:
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
...
}
更好的答案是使用UIView动画方法,如animateWithDuration:animations:completion:(以及该方法的变体) 通过这些方法,可以对“实际视图”属性执行动画,动画完成后,视图将位于其实际目标位置 “中心”属性是移动视图的最简单方法。如果应用了变换,“帧”属性无效,但“中心”属性在读取和写入时始终有效 核心动画仅创建视图移动的错觉。动画发生在层树的仅显示副本上。通过从层的presentationLayer读取相同的属性,可以查询动画层的属性。但是,视图对象不会在其外观位置响应用户交互。视图仍然认为它们位于原始位置
正如另一张海报所说,动画结束后,您可以使用动画完成委托方法将视图移动到其最终位置,但要完成UIView animation为您做的事情,这需要做很多繁琐的工作,因为UIView animation可以更干净、更简单地完成这些工作。甚至在设置视图动画之前,您是否可以与视图交互?
view.userInteractionEnabled是否设置为YES???我正在制作高级关键帧动画,因此简单的UIView动画不会剪切它。