2013-02-15 36 views
0

我有一个UIView有一个X的起源,使其离屏幕的权利。于是,我做了关键帧动画与CATransform3D:UIView 3D变换的最终框架位置

[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(-view.width, 0, 0)] 

的问题是,在动画完成后,该视图的框架是视觉在正确的位置,但它仍然认为它是关闭屏幕,所以我不能互动用它。记录其框架属性也显示它在屏幕外,但在视觉上,它不是。

动画的填充模式为kCAFillModeForwards,所以动画的最终值会粘住。

这个问题的解决方案是什么,即在动画之后与此视图交互并通知视图确实可见?

回答

0

您可以使用CAAnimation委托方法​​修复它时的动画效果做:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { 
    ... 
} 
0

更好的答案是使用UIView的动画方法,如animateWithDuration:动画:完成:(并且该方法的变体)

这些方法可让您对实际视图属性执行动画,当动画完成时,视图位于其实际目标位置。

中心属性是移动视图的最简单方法。如果您应用了变换,则框架属性无效,但中心属性IS始终对读取和写入均有效。

核心动画只会造成您的观点移动的错觉。动画发生在图层树的仅显示副本上。您可以通过从图层的presentationLayer中读取相同的属性来查询动画图层的属性。但是,视图对象不会响应用户在其明显位置的交互。意见仍然认为他们在原来的位置。

正如另一张海报所说,一旦动画结束,您可以使用动画完成委托方法将视图移动到它的最终位置,但这是很多繁琐的工作来完成UIView动画为您提供的更多内容干净而简单。

+0

我正在做一个先进的关键帧动画,所以简单的UIView动画不会削减它。 – Snowman 2013-02-16 23:39:54

0

即使在制作动画之前,您是否可以与视图进行交互? 是将view.userInteractionEnabled设置为YES?