gpt4 book ai didi

performance - CALayer性能问题: animating a line anchored between two UIViews

转载 作者:行者123 更新时间:2023-11-28 19:24:41 28 4
gpt4 key购买 nike

我有一个 iPad 应用程序,它有一个更大的父 UIView(我称之为主视图)中包含的可拖动 UIView。该应用程序的功能之一是能够在两个 View 之间拖动以将它们连接起来。拖动时,我在 CALayer 中渲染一条线,该线基于您开始拖动并结束于用户手指的 View 。如果用户在另一个 View 之上结束拖动,它们就会被附加。

当附加 View 时,它们之间会永久绘制一条线。

因此在当前的实现中有两个 CALayer,它们是主视图的子层。一个是 linkLayer,它呈现 View 之间的现有链接。另一个是 linkLineLayer,它呈现用户当前正在使用拖动操作绘制的线条。

当发生拖动并且出现新的拖动事件时,我调用 [linkLineLayer setNeedsDisplay]。同样,当用户在周围拖动 View 时,我会调用 [linkLayer setNeedsDisplay]。

实际设备上的性能很糟糕,所以我猜这不是要走的路。有什么替代方法可以在 View (或 View 中的点)之间画线,这样我可以在拖动 View 或在 View 之间拖动线时频繁更新它们,而不会破坏帧速率和锤击设备 cpu?

更新所以昨晚我进去做了两个修复,产生了巨大的变化:1.) 所有链接线都是它们自己的层。当一个 View 被拖动时,我只刷新与该特定 View 相关联的链接线。
2.) 将“拖动线”更新为一个层,其大小限于正在渲染的线的大小。我在用户手指移动时调整图层边界。

最佳答案

您是否尝试过将线条渲染为 CAShapeLayer?您不必自己画线并一直调用 setNeedsDisplay,您只需设置 CAShapeLayerpath 属性并让它执行休息。

Core Animation 以不同的方式处理CAShapeLayer,它可以优化路径的绘制。如果您只是在 drawLayer:inContext:(或等效的)中自己绘制一条路径,Core Animation 必须将整个层视为图像,因为它不知道您绘制了什么。如果你使用 CAShapeLayer,Core Animation 会提前知道你想要绘制的路径,并且它可以相应地优化它的渲染。您也不必担心形状层的大小和位置,因为该层只是路径。

另外,一个额外的指针,如果你想绘制一条没有填充的开放路径(线),你必须将形状图层的fillColor属性设置为nil。如果不这样做,它会自动关闭路径并使用默认颜色填充。

关于performance - CALayer性能问题: animating a line anchored between two UIViews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4556135/

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