UIBezierPath绘制线条表示
我使用UIBezierPath和UIView的-touches...
方法编写了一个简单的绘图代码。绘图效果很好,但我做了一些不好的经验。UIBezierPath绘制线条表示
当我画得很慢时,效果很好。但是我画得越快,线条就越尖锐。那么,我怎样才能让他们“顺利”变得不那么尖锐(多点)呢?
当我使用高线宽的
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;
}
我希望有人能帮助我处理这些问题。感谢很多人,祝贺Julian
回答:
嗯,我不打算解决你在这个线程中执行的性能问题,但是看看UIView中的setNeedsDisplayInRect:
,一旦你获得了基本的工作。
我想你基本上是想从你的阵列中取出最后一个创建的路径,并用一个新的路径代替它,只要你移动。
您应该尝试将CGMutablePathRef
放入您的阵列中(请参阅CGMutablePathRef to NSMutableArray)。
的基本流程是这样的:
touchesBegan
:- 在阵列中创建
CGMutablePathRef
- 呼叫moveToPoint
- 商店
- 在阵列中创建
touchesMoved
:- 从数组中获取lastObject(即,在
CGMutablePathRef
) - 呼叫addLineToPoint
[self setNeedsDisplay]
- 从数组中获取lastObject(即,在
然后在drawInRect,遍历的路径和画他们。
再说一遍,起初会很慢,那么你需要优化。 CGLayerRef
可以提供帮助。 setNeedsDisplayInRect
最肯定也会。
以上是 UIBezierPath绘制线条表示 的全部内容, 来源链接: utcz.com/qa/266349.html