3

我正在使用 UIBezierPath 进行绘图,并且我已经编写了有关触摸事件的代码并且它工作正常,但是我的曲线并不平滑,当我移动手指并绘制一些曲线时,它们并不平滑。

- (void)drawRect:(CGRect)rect
{    
    [[UIColor redColor] setStroke];
    for (UIBezierPath *_path in pathArray) 
    [_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
}

#pragma mark - Touch Methods
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    myPath=[[UIBezierPath alloc]init];
    myPath.lineWidth=5;
    myPath.lineCapStyle = kCGLineCapRound;
    myPath.flatness = 0.0;   

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    [myPath moveToPoint:[mytouch locationInView:self]];
    [pathArray addObject:myPath];

}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{   
    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    [myPath addLineToPoint:[mytouch locationInView:self]];

    [self setNeedsDisplay];    
}

这是图像

在此处输入图像描述

在上图中,如果您看到字母 a 和 d,您会看到曲线并不平滑。我该怎么做才能获得平滑的曲线?

4

2 回答 2

4

好吧,您使用的addLinePoint很明显,您得到的是线条,而不是曲线。您会对其他为您提供平滑曲线的方法感兴趣:addCurveToPointaddQuadCurveToPoint。但正如您从 API 中看到的那样,除了您实际用手指绘制的点外,您还需要绘制时未附带的控制点。甚至 Photoshop 都要求您在进行曲率时移动它们。换句话说,让你的手绘“自动”平滑涉及到相当多的数学问题。谷歌“平滑手绘”,你至少会得到这几点开始

平滑手绘的自由形状

平滑手绘曲线

它实际上根本不是 iOS 特定的。

于 2012-06-05T12:17:32.590 回答
3

只需使用这条线。它会解决你的问题myPath.miterLimit=-10;

如果您需要任何需要浮点值的东西,请更改该值

于 2012-06-05T12:51:36.610 回答