2012-03-05 70 views
0

我创建了一个UIView和一些图层。我已经将这些图层组织到超视图 - 子视图层次结构中,其中包含UIView图层中的根,添加了一些手势识别器,并且我试图从手势识别器(设置边界和位置确定)处理层的几何图形。我使用隐式动画和CATransactions。没有使用明确的动画。CoreAnimation抖动

如果我创建持续时间为0的CATransaction,实际结果已经足够了。但是,如果将持续时间设置为0.2,我会得到一些奇怪的结果:由于事件发生得不是很快,并且以前的事务有时间需要在下次启动之前完成一切都正常(例如点击),但如果没有足够的时间(例如在捏或平底锅上),被调整大小的图层开始打乱。在视觉上,它看起来像动画回滚到初始点,并重新开始新的值。

我看不出有任何理由。我试图在-[UIView layoutSubviews]中执行布局,并在手势识别器处理程序中调用setNeedsDisplay。我也试图将这个逻辑分解成单独的方法,但它没有帮助。

我再说一遍,我只使用隐式动画。而我想知道的是为什么会发生(但不是如何解决)。

任何线索?

+0

我觉得这个问题的措辞非常糟糕.. – 2012-03-07 23:51:40

回答

1

我想,这是因为当你之前未完成时你开始新的动画。 也许,你需要停止它像

[yourView.layer removeAnimationForKey:@"yourAnimationKey"]; 

,你需要实现动画的委托方法

-(void)stopAnimation:(id)sender 
{ 
    yourView.frame = [[yourView.layer presentationLayer] frame]; // that set frame of your view to it's animation position 
} 
+0

这没有奏效。并且动画不应该被删除:它应该继续从_presentation layer_中的当前值的动画新值。它在我的综合测试中也是如此。 – 2012-03-06 08:46:29