gpt4 book ai didi

iphone - 在 iPhone 上绘制几条直线和圆圈时 CGContextStrokePath 的性能不佳

转载 作者:行者123 更新时间:2023-12-03 19:09:49 26 4
gpt4 key购买 nike

我需要在 View 上绘制几百条直线和圆圈,它们通过计时器函数不断移动,我在其中调用 [myView setNeedsDisplay] 来更新 View 。

我从 UIView 子类化 (myView) 并实现 drawRect 函数来执行以下操作...

-(void) drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();

CGFloat red[4] = { 1, 0, 0, 1};

CGContextSetLineWidth(context, 1);
CGContextSetShouldAntialias(context, NO);
CGContextSetLineCap(context, kCGLineCapSquare);
CGContextSetStrokeColor(context, red);

// rects is an array of CGRect of size ~200
for (int i = 0; i < N; i++) {
CGContextAddEllipseInRect(context, rects[i]);
}
// points is an array of CGPoint of size ~100
CGContextAddLines(context, points, N);

CGContextStrokePath(context, color);
}

但这太慢了。我在这里缺少什么吗?完成一幅完整的绘图大约需要 1 秒

最佳答案

通过不断地重新绘制对象来动画对象是一个糟糕的方法。由于显示系统的工作方式, quartz 绘图是 UI 方面最慢的事情之一。

相反,您需要做的是为每个要动画的元素创建单独的图层或 View 。这些图层或 View 只会被绘制一次,然后被缓存。当图层移动时,它们不会被重绘,只是合成。通过这种方式,即使是最慢的 iOS 设备(最初的 iPhone、iPhone 3G 和第一代 iPod touch)也可以以每秒 60 帧的速度制作多达 100 个图层的动画。

把它想象成动画动画。他们不是让动画师手工重绘每一帧的每个部分,而是使用单元格来重复使用保持相同或只是移动而不改变形式的帧之间的元素。这大大减少了制作动画片的工作量。

关于iphone - 在 iPhone 上绘制几条直线和圆圈时 CGContextStrokePath 的性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3213973/

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