在 iOS 上,如果有两个圆圈,它们都是UIView对象,那么它们的center或frame可以使用动画制作UIView动画。
但困难在于,UITreeView包含这两个圆的容器,使用 . 画一条连接圆心的线drawRect。在drawRect中,我可以使用CGorUIKit来画线,而我选择使用UIBezierPath'smoveToPoint和addLineToPoint来画线,其实应该只是CG下面的调用,但更容易使用。
但是当一个圆圈动画到另一个位置时,线条不会随之动画,所以动画看起来有点奇怪。有没有办法让它动画?
我尝试在 TreeView 类中而不是在UINodeView类(圆圈)内设置动画,但这无济于事。事实上,如果我在它的drawRect方法中使用随机颜色绘制圆,当圆在动画中缓慢移动时,颜色不会快速变化,表明它drawRect没有被调用。它可能只是CALayer保存一个正在动画的缓存图像。
那么有没有办法让线条也有动画呢?
我能想到的其他方法是:
1) 使用 hack 也可以使用 aUIView来保持线条,因此它的框架可以动画,但是如果圆圈移动以便需要在 UIView 内从 (0, 0) 到 (200, 200) 绘制线条怎么办,但是现在这条线需要向另一个方向倾斜,从 (200, 0) 绘制到 (0, 200),所以在这种情况下,它可能不起作用。(但如果我同时使用某种变换来翻转图像,它可能会起作用,但考虑何时应该使用变换似乎很复杂)
2)CADisplayLink用来做动画,让它调用[treeView setNeedsDisplay];,在这种情况下,drawRect肯定会调用。(这可能有点矫枉过正,由于 TreeView 的整个背景将首先被擦除,因此屏幕上可能会有一点闪烁)
还是有更简单或更好的方法?