在iOS上,如果有两个圈子,两个圈子都是UIView
个对象,那么他们的center
或frame
可以使用UIView
动画制作动画。
但困难在于,包含这两个圆圈的容器UITreeView
使用drawRect
画一条连接圆圈中心的线。在drawRect
中,我可以使用CG
或UIKit
来绘制该行,我选择使用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的整个背景将首先被删除,屏幕上可能会有一些闪烁)
或者有更简单或更好的方法吗?
答案 0 :(得分:1)
您可以将路径分配给CAShapeLayer(例如将其包装在UIView子类中,该子类将CAShapeLayer作为其+ layerClass返回)。该路径分配给CGPath -path属性(请注意,UIBezierPath提供CGPath属性)。 然后,您在视图中有一条线可以设置动画(例如使用UIView +beginAnimations的组动画