Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIView三维变换最终帧位置_Iphone_Ios_Core Animation - Fatal编程技术网

Iphone UIView三维变换最终帧位置

Iphone UIView三维变换最终帧位置,iphone,ios,core-animation,Iphone,Ios,Core Animation,我有一个UIView,它有一个X原点,使它在屏幕右侧。然后,我使用CATTransferM3D制作关键帧动画: [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(-view.width, 0, 0)] 问题是,动画完成后,视图的帧在视觉上处于正确的位置,但它仍然认为它在屏幕外,因此我无法与它交互。记录它的frame属性也会显示它在屏幕外,但从视觉上看,它不是 动画的填充模式为kCAFillModeForwards,因此动画

我有一个UIView,它有一个X原点,使它在屏幕右侧。然后,我使用CATTransferM3D制作关键帧动画:

[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动画不会剪切它。