4

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

但困难在于,UITreeView包含这两个圆的容器,使用 . 画一条连接圆心的线drawRect。在drawRect中,我可以使用CGorUIKit来画线,而我选择使用UIBezierPath'smoveToPointaddLineToPoint来画线,其实应该只是CG下面的调用,但更容易使用。

但是当一个圆圈动画到另一个位置时,线条不会随之动画,所以动画看起来有点奇怪。有没有办法让它动画?

我尝试在 TreeView 类中而不是在UINodeView类(圆圈)内设置动画,但这无济于事。事实上,如果我在它的drawRect方法中使用随机颜色绘制圆,当圆在动画中缓慢移动时,颜色不会快速变化,表明它drawRect没有被调用。它可能只是CALayer保存一个正在动画的缓存图像。

那么有没有办法让线条也有动画呢?

我能想到的其他方法是:

1) 使用 hack 也可以使用 aUIView来保持线条,因此它的框架可以动画,但是如果圆圈移动以便需要在 UIView 内从 (0, 0) 到 (200, 200) 绘制线条怎么办,但是现在这条线需要向另一个方向倾斜,从 (200, 0) 绘制到 (0, 200),所以在这种情况下,它可能不起作用。(但如果我同时使用某种变换来翻转图像,它可能会起作用,但考虑何时应该使用变换似乎很复杂)

2)CADisplayLink用来做动画,让它调用[treeView setNeedsDisplay];,在这种情况下,drawRect肯定会调用。(这可能有点矫枉过正,由于 TreeView 的整个背景将首先被擦除,因此屏幕上可能会有一点闪烁)

还是有更简单或更好的方法?

4

1 回答 1

1

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

于 2012-09-06T20:16:04.107 回答