UIBezierPath绘制线条表示

我使用UIBezierPath和UIView的-touches...方法编写了一个简单的绘图代码。绘图效果很好,但我做了一些不好的经验。UIBezierPath绘制线条表示

  1. 当我画得很慢时,效果很好。但是我画得越快,线条就越尖锐。那么,我怎样才能让他们“顺利”变得不那么尖锐(多点)呢?

  2. 当我使用高线宽的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)。

的基本流程是这样的:

  1. touchesBegan

    1. 在阵列中创建CGMutablePathRef
    2. 呼叫moveToPoint
    3. 商店
  2. touchesMoved

    1. 从数组中获取lastObject(即,在CGMutablePathRef
    2. 呼叫addLineToPoint
    3. [self setNeedsDisplay]

然后在drawInRect,遍历的路径和画他们。

再说一遍,起初会很慢,那么你需要优化。 CGLayerRef可以提供帮助。 setNeedsDisplayInRect最肯定也会。

以上是 UIBezierPath绘制线条表示 的全部内容, 来源链接: utcz.com/qa/266349.html

回到顶部