drawRect绘制的内容是否能够使用UIView动画制作动画?

时间:2012-09-06 20:04:08

标签: ios cocoa-touch uiview uiviewanimation

在iOS上,如果有两个圈子,两个圈子都是UIView个对象,那么他们的centerframe可以使用UIView动画制作动画。

但困难在于,包含这两个圆圈的容器UITreeView使用drawRect画一条连接圆圈中心的线。在drawRect中,我可以使用CGUIKit来绘制该行,我选择使用UIBezierPath的{​​{1}}和moveToPoint来绘制线,实际上应该只是addLineToPoint调用,但更容易使用。

但是当一个圆圈动画到另一个位置时,该线条不会使用它进行动画处理,因此动画看起来有点奇怪。有没有办法让它变得有生命?

我尝试在TreeView类中进行动画制作,而不是在CG类(圆圈)中进行动画制作,但这无济于事。事实上,如果我在UINodeView方法中使用随机颜色绘制圆圈,当圆圈在动画中缓慢移动时,颜色不会快速变化,表明其drawRect未被调用。可能只是drawRect可以保存缓存的图像。

那么还有一种方法可以使线条生动吗?

我能想到的其他方法是:

1)使用hack来使用CALayer来保持线,因此它的框架可以设置动画,但是如果圆移动以便需要从(0,0 )到(200,200),但现在该行需要倾斜另一种方式,从(200,0)绘制到(0,200),所以在这种情况下,它可能不起作用。 (但是,如果我使用某种变换同时翻转图像,它可能会起作用,但是在使用变换时似乎很复杂)

2)使用UIView来制作动画,然后让它调用CADisplayLink,在这种情况下,[treeView setNeedsDisplay];将会被调用。 (它可能是一种矫枉过正,因为TreeView的整个背景将首先被删除,屏幕上可能会有一些闪烁)

或者有更简单或更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以将路径分配给CAShapeLayer(例如将其包装在UIView子类中,该子类将CAShapeLayer作为其+ layerClass返回)。该路径分配给CGPath -path属性(请注意,UIBezierPath提供CGPath属性)。 然后,您在视图中有一条线可以设置动画(例如使用UIView +beginAnimations的组动画