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

在iOS上,如果有两个圆圈,两个圆圈都是UIView对象,那么它们的中心或框架可以使用UIView动画进行动画处理.

但困难在于,包含这两个圆圈的容器UITreeView使用drawRect画一条连接圆圈中心的线.在drawRect中,我可以使用CG或UIKit来绘制线条,我选择使用UIBezierPath的moveToPoint和addLineToPoint来绘制线条,这实际上只是下面的CG调用,但更容易使用.

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

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

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

我能想到的其他方法是:

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

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

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

解决方法

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

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...