【问题标题】:UIBezierPath not drawing a smooth curveUIBezierPath 未绘制平滑曲线
【发布时间】:2012-06-09 10:14:09
【问题描述】:

我正在使用 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,您会发现曲线并不平滑。我该怎么做才能获得平滑的曲线?

【问题讨论】:

    标签: ios ios5 core-graphics uibezierpath


    【解决方案1】:

    只要使用这条线。它将解决您的问题myPath.miterLimit=-10;

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

    【讨论】:

    • 嘿嗨 aalok,很高兴再次见到你,嘿,你的把戏不起作用,尖峰不再出现但曲线不平滑,我正在使用你昨天提供链接的代码
    • 那么怎么办呢,我从早上开始就在苦苦挣扎。:(
    • 是的,必须优化它以获得平滑的曲线。让我们尝试找出一些方法来做到这一点。需要一些研究。这需要时间
    • 我发现 linecapstyle 的变化正在做一些工作,但不是很好的平滑度,但使用kCGLineJoinRound 可以实现一些平滑度试试这个
    • 嘿 aalok,你不能将它用于 linecapstyle,它应该用于 lineJoinStyle
    【解决方案2】:

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

    Smoothing a hand-drawn free shape

    Smoothing a hand-drawn curve

    这根本不是 iOS 特定的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 2017-01-14
      • 2015-11-18
      • 2023-03-09
      • 2012-01-31
      相关资源
      最近更新 更多