3

我正在使用一些最初取自 Apple 示例 ViewTransitions 的代码来交换两个视图。

CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setType:kCATransitionFade];
[animation setDuration:0.3f];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[[container layer] addAnimation:animation forKey:@"swap"];

当我的过渡在设备上执行时,有时我会得到过渡动画最后一帧的单帧闪光,然后动画会流畅播放。这给第二个视图带来了非常不和谐的效果,在平滑动画执行之前它会闪烁然后再次闪烁。

我的示例和 Apple 示例之间的主要区别在于我的视图不是全屏的,我有一个包含两个子视图的容器 UIView,并且我将动画应用到容器层而不是根视图层。我看不出这应该有很大的不同。

此问题在模拟器中根本不会发生,并且在设备上是间歇性的(大约 60-70% 的时间)。是否有其他人看到这种行为,如果有,您是如何解决的?

更新了更多信息: 代码最初是多部分动画的一部分,但我将其移动为由按钮触发以隔离问题。在这两种情况下都会出现此问题。

动画代表已实现,但已被删除以尝试隔离问题。

在动画期间视图没有改变,实际上[container setUserInteractionEnabled:NO]正在被调用(但问题也发生在没有禁用用户交互的情况下)。

我尝试从过渡中间开始动画并在结束之前使用setStartProgressand结束setEndProgress,问题仍然存在。

我也尝试过减慢动画持续时间,但没有任何效果。

4

2 回答 2

0

要开始回答您的问题,需要更多信息 - 例如,您如何调用该代码(例如,它是作为操作绑定到按钮还是以某种方式自动触发),您是否实现了委托方法来启动和停止动画(以及其中包含的内容),您的视图是否在动画期间的某个时间点发生变化?模拟器和设备之间的时间将关闭 - 你不应该依赖模拟器来测试动画,因为一切都会发生得更快。

于 2008-11-04T20:55:51.030 回答
0

解决了,我错过了一个我认为无关紧要的关键部分;)在上面的代码示例中设置动画后,我正在以相同的方法交换视图。

将其移至 animationDidStart 委托解决了该问题。

于 2008-11-06T12:13:30.523 回答