gpt4 book ai didi

iphone - 使用 Quartz 2D 的简单 iPhone 绘图应用程序

转载 作者:行者123 更新时间:2023-12-03 20:02:42 25 4
gpt4 key购买 nike

我正在制作一个简单的 iPhone 绘图程序作为个人业余项目。

我在子类 UIView 中捕获触摸事件并将实际内容渲染到单独的 CGLayer。每次渲染后,我调用 [self setNeedsLayout] 并在 drawRect: 方法中将 CGLayer 绘制到屏幕上下文。

这一切都非常有效,并且在绘制矩形方面表现良好。然而,我只想要一个简单的“徒手”模式,就像许多其他 iPhone 应用程序一样。

我想到的方法是创建一个 CGMutablePath,简单地说:

CGMutablePathRef path;-(void)touchBegan {    path = CGMutablePathCreate();}-(void)touchMoved {    CGPathMoveToPoint(path,NULL,x,y);    CGPathAddLineToPoint(path,NULL,x,y);}-(void)drawRect:(CGContextRef)context {      CGContextBeginPath(context);      CGContextAddPath(context,path);      CGContextStrokePath(context);}

但是,绘制超过 1 秒后,性能会严重下降。

如果不是可变的不透明度,我只会将每条线绘制到离屏 CGLayer 中!低于 100% 的不透明度会导致屏幕上留下连接线条的点。我查看了 CGContextSetBlendingMode() 但可惜我找不到答案。

有人能指出我正确的方向吗?其他 iPhone 应用程序能够以非常高的效率做到这一点。

最佳答案

问题在于CGStrokePath()当前的可变路径将被关闭并绘制,并且当您移动手指时会创建一条新路径。因此,您最终可能会得到很多用于一键“ session ”的路径,至少您的伪代码似乎是这样做的。

您可以尝试在触摸开始时开始一个新的可变路径,使用 CGAddLineToPoint()当触摸移动并在触摸结束时结束路径(就像您的伪代码所示)。但是在绘制方法中,您绘制了当前可变路径的副本,并且实际的可变路径仍然被拉长,直到触摸结束,因此您在整个触摸 session 中只能获得一条路径。触摸结束后,您可以永久添加路径 - 例如,您可以将所有路径放入数组中并在绘制方法中迭代它们。

关于iphone - 使用 Quartz 2D 的简单 iPhone 绘图应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1251072/

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