ios - 在 View 中绘制多个 UIBezierPath

标签 ios objective-c cocoa-touch quartz-graphics uibezierpath

我正在基于手指移动在 View 上绘制多个 UIBezierPath

每次触摸循环(开始/移动/结束)完成时,我都会存储这些点并创建一个 UIBezierPath,它存储在一个名为 bezierArray 的数组中.我有另一个名为 bezierArrayColors 的数组,它存储每条路径的颜色。

问题是这样的。该类使用 drawRect。据我所知,每次 drawRect 运行时,它都必须绘制所有已创建的路径,并且应用程序现在很慢。

现在这是我的drawRect。我知道这很蹩脚,但我不知道如何做到这一点。

- (void)drawRect:(CGRect)rect {
   for (int i=0; i<[self.bezierArray count]; i++) {
        UIBezierPath *aPath = (UIBezierPath*)[self.bezierArray objectAtIndex:i];
        UIColor *aColor = (UIColor*)[self.bezierArrayColor objectAtIndex:i];
    [aPath setLineWidth:LINE_WIDTH];

    [aColor setStroke];
    [aPath stroke];
    }
}

有没有一种方法可以使用子路径以不同的颜色或宽度绘制 UIBezierPath?我的意思是,更改子路径的颜色、宽度和其他属性?这将允许我将一个 UIBezierPath 与几个不同的子路径一起使用。我希望可以绘制一个贝塞尔曲线并留在那里,而无需每次都重新绘制。我错过了什么?

最佳答案

确保您注意传递给 -drawRect: 的矩形。如果您的代码采取简单的方法并在每次调用 -drawRect: 时都重新绘制整个 View ,那么您可能至少在某些时候进行的绘制远远超过必要的绘制。

关于ios - 在 View 中绘制多个 UIBezierPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6240409/

相关文章:

ios - 如何在 IOS 中以编程方式使 TTTAttributedLabel 居中对齐

objective-c - 分配和释放问题

ios - 从主线程上的委托(delegate)方法接收答案

ios - 返回 UITableViewCell 自定义单元格

objective-c - 为什么 awakeFromInsert 被调用两次?

iphone - 调用 dismissViewControllerAnimated 时的 exc_bad_access

ios - 为了使模糊的 UIVibrancyEffect 起作用,我们是否必须将它作为单独的 View 添加到 UIBlurEffect contentView?

objective-c - OS X 10.5 中向后移植 NSWindowDelegate 窗口 DidEndLiveResize 行为?

ios - 如何在 xcode 中以编程方式向导航栏添加按钮

iphone - 在 iOS 上运行无限循环动画