2016-04-22 106 views
2

我尝试六角形,并且在关闭路径中出现了一些问题。ObjectiveC UIBezierPath路径关闭问题

这是我的六角形,闭合路径不光滑。 enter image description here

这里是我的绘制代码

CAShapeLayer* shapeLayer = [CAShapeLayer layer]; 
    UIBezierPath* path = [UIBezierPath bezierPath]; 
// [path setLineJoinStyle:kCGLineJoinRound]; 
// [path setLineJoinStyle:kCGLineJoinBevel]; 
    [path setLineJoinStyle:kCGLineJoinMiter]; 
// CGFloat dashes[] = {6, 2}; 
// [path setLineDash:dashes count:2 phase:0]; 
// [path stroke]; 

    CGFloat radians = 100.0; 
    NSInteger num = 6; 
    CGFloat interval = 2*M_PI/num; 

    NSInteger initX = radians*cosf(interval); 
    NSInteger initY = radians*sinf(interval); 

    [path moveToPoint:CGPointMake(location.x - semiWidth + initX, location.y - semiHeight + initY)]; 
    for(int i=1; i<=num; i++){ 
     CGFloat x = radians*cosf(i*interval); 
     CGFloat y = radians*sinf(i*interval); 
     [path addLineToPoint:CGPointMake(location.x - semiWidth + x, location.y - semiHeight + y)]; 
    } 
    [path closePath]; 
    shapeLayer.path = [path CGPath]; 
    shapeLayer.strokeColor = [[UIColor yellowColor] CGColor]; 
    shapeLayer.fillColor = [[UIColor brownColor] CGColor]; 
    shapeLayer.lineWidth = 4.0f; 

我也尝试使用不同的选项,没有运气

[path setLineJoinStyle:kCGLineJoinRound]; 
[path setLineJoinStyle:kCGLineJoinBevel]; 
[path setLineJoinStyle:kCGLineJoinMiter]; 

回答

4

问题以下是你没有将你的第一个点(你移动到的点),就像你使其他点(你连线的点)一样。

NSInteger initX = radians*cosf(interval); 
NSInteger initY = radians*sinf(interval); 
[path moveToPoint:CGPointMake(
    location.x - semiWidth + initX, location.y - semiHeight + initY)]; 

相反,强调的第一点与其他人完全平行:

CGFloat x = radians*cosf(0*interval); 
CGFloat y = radians*sinf(0*interval); 
[path moveToPoint:CGPointMake(
    location.x - semiWidth + x, location.y - semiHeight + y)]; 

这是完全一样的,你会用i*interval以后做什么,强调的是并行的,我已经写0 as 0*interval。这是我结束了:

enter image description here

+1

此外,你只需要'addLineToPoint:'5点,不是6'closePath'将画一条线从你的最后一点到第一点的曲线。 – stevekohls