gpt4 book ai didi

ios - drawRect 绘制的内容是否可以使用 UIView 动画进行动画处理?

转载 作者:可可西里 更新时间:2023-11-01 06:11:28 34 4
gpt4 key购买 nike

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

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

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

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

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

我能想到的其他方法是:

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

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

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

最佳答案

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

关于ios - drawRect 绘制的内容是否可以使用 UIView 动画进行动画处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12307548/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com