我有一个UIView用于绘制一组项目中的任何一个。也就是说,我可以告诉我的一个UIView子类绘制正方形,圆形或三角形。
我希望有一个转换来翻转该视图,以便UIView在中间点绘制不同的形状,所以看起来我正在转换到不同的视图,但实际上我只是重绘了转型中途的单一视图。
有没有办法做到这一点,而不是使用两个不同的UIViews并在动画块中交换它们?对我来说,重新调整我必须使用的交换机制会有点笨拙。
理想情况下,我需要的是一些回调或通知动画处于中间位置,然后我可以用新形状重绘视图。
感谢您的帮助!
答案 0 :(得分:1)
即使您确实知道翻转动画的中点,我也不相信重绘动画中间动画的内容会做任何事情。我认为视图层的内容在动画开始时被缓存,并且不会随着动画的进行而改变。此外,如果你后面没有其他视图,你的视图最终会在动画结束时从左到右反转。
如果您希望以自定义动画的形式进行此操作,可以使用我在Lemur Flip implementation中描述的Mike Lee的this answer之类的内容将其分成两部分。在动画的前半部分之后,您可以重绘视图的内容并完成动画,最后回到您开始的位置。
但是,对我而言,为了应对转换而不切换视图似乎更为笨拙。它肯定会需要更多的代码。
答案 1 :(得分:0)
你可以试着像这样做。例如,animationDuration属性设置为2.0f。所以,中途点是1秒,所以你可以使用
[self performSelector:@selector(yourCallbackMethod)withObject:nil afterDelay:1.0f];
答案 2 :(得分:0)
我知道你能做到这一点的唯一方法是使用Core Animation重新创建动画,然后使用计时器监视presentationLayer中的动画。核心动画层中没有可用的KVO,因此您必须明确监视它。
换句话说,它可能不值得。我建议你想出一个不同的方法来解决你的问题。