我使用UIBezierPath和UIView的-touches...
方法编写了一个简单的绘图代码。绘图效果很好,但我做了一些糟糕的经历。
当我画得很慢时,效果很好。但是我画得越快,线就越锋利。那么我怎么喜欢“平滑”它们变得不那么尖锐(更多点)?
当我使用行宽较宽的setLineWidth
时,该行变得非常丑陋。
这是一张显示丑陋实际含义的图片:
为什么以这种方式吸引胖线?!
编辑:这里有一些代码
- (void)drawInRect:(CGRect)rect
{
for(UIBezierPath *path in pathArray) {
[[UIColor blackColor] setStroke];
[path setLineWidth:50.0];
[path stroke];
}
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
startPoint = [[touches anyObject] locationInView:self];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:startPoint];
[path addLineToPoint:[[touches anyObject] locationInView:self]];
if(isDrawing) {
[pathArray removeLastObject];
}
else {
isDrawing = YES;
}
[pathArray addObject:path];
[path close];
[self setNeedsDisplay];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
isDrawing = NO;
}
我希望有人可以帮我解决这些问题。非常感谢,问候,朱利安
答案 0 :(得分:1)
嗯,我不会在这个帖子中解决你的实现的性能问题,但是一旦你掌握了基础知识,就看看UIView中的setNeedsDisplayInRect:
。
我认为你基本上是想从阵列中取出最后创建的路径,只要你移动就用新的路径替换它。
您应该尝试在数组中放置CGMutablePathRef
(请在此处查看CGMutablePathRef to NSMutableArray)。
基本流程如下:
touchesBegan
:
CGMutablePathRef
touchesMoved
:
CGMutablePathRef
)[self setNeedsDisplay]
然后在drawInRect中,遍历您的路径并绘制它们。
同样,这首先会很慢,然后你需要进行优化。 CGLayerRef
可以提供帮助。 setNeedsDisplayInRect
肯定也会。{/ p>