2

我有一个 UIView 用于绘制一组项目中的任何一个。也就是说,我的一个 UIView 子类可以被告知绘制一个正方形、圆形或三角形。

我想要一个转换来翻转该视图,以便 UIView 在中途点绘制不同的形状,所以看起来我正在转换到不同的视图,但实际上我只是在重绘单个视图过渡的中途点。

有没有办法做到这一点,而无需使用两个不同的 UIView 并将它们换出动画块?重新调整我必须使用交换机制的东西对我来说有点笨拙。

理想情况下,我只需要一些回调或通知动画处于中间点,然后我可以用新形状重绘视图。

谢谢你的帮助!

4

3 回答 3

1

即使您确实知道翻转动画的中点,我也不相信重绘视图中间动画的内容会起到任何作用。我认为视图层的内容在动画开始时被缓存并且不会随着动画的进行而改变。此外,如果您的视图后面没有其他视图,您的视图最终会在动画结束时从左到右反转。

如果您希望将此作为自定义动画执行,您可以使用我在此答案中描述的 Mike Lee 的Lemur Flip 实现将其分成两半。在动画的前半部分之后,您可以重新绘制视图的内容并完成动画,最终回到您开始的位置。

但是,对我来说,不切换视图以响应过渡似乎更笨拙。这肯定需要更多的代码来完成。

于 2010-01-04T18:41:00.947 回答
0

你可以尝试这样做。例如,您的 animationDuration 属性设置为 2.0f。所以,中途点是1秒,所以你可以使用

[self performSelector:@selector(yourCallbackMethod) withObject:nil afterDelay:1.0f];

于 2010-01-04T17:01:08.387 回答
0

我知道您可以这样做的唯一方法是使用 Core Animation 重新创建动画,然后使用计时器在 PresentationLayer 中监视动画。Core Animation Layers 中没有可用的 KVO,因此您必须明确监视它。

换句话说,它可能不值得。我建议你想一个不同的方法来解决你的问题。

于 2010-01-04T17:01:28.010 回答