用中心绘制线条而不重叠

时间:2013-07-29 16:20:55

标签: iphone ios drawrect

当我尝试连接线路时遇到问题。这是一张图片:

Image1

我觉得它看起来像这样:

Image2

我的代码是:

- (void) drawRect:(CGRect)rect {
    [super drawRect:rect];
    CGContextRef context = UIGraphicsGetCurrentContext();

    const CGFloat *components = CGColorGetComponents(self.lineColor.CGColor);

    CGFloat red;
    CGFloat green;
    CGFloat blue;
    CGFloat alpha;

    if(CGColorGetNumberOfComponents(self.lineColor.CGColor) == 2)
    {
        red   = 1;
        green = 1;
        blue  = 1;
        alpha = 1;
    }
    else
    {
        red   = components[0];
        green = components[1];
        blue  = components[2];
        alpha = components[3];
        if (alpha <= 0) alpha = 1;
    }


    // set the stroke color and width
    CGContextSetRGBStrokeColor(context, red, green, blue, alpha);
    CGContextSetLineWidth(context, 2.0);

    if (self.points.count >0) {


    BezierPoint *firstPoint = [self.points objectAtIndex:0];

    CGContextMoveToPoint(context, firstPoint.center.x, firstPoint.center.y);

    int index = 0;
    for (BezierPoint *point in self.points ) {


        if(index == 0){
            index++;
            continue;
        }

        CGContextAddLineToPoint(context, point.center.x, point.center.y);

    }

    CGContextAddLineToPoint(context, firstPoint.center.x, firstPoint.center.y);
    }


    CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 0.0);
    CGContextDrawPath(context, kCGPathFillStroke);

    }

我遇到的问题是,对于你添加的每一个点,线都重叠,我希望在我留下时我为几何图形添加点,球体不会重叠

如果有人可以帮助我,我会感谢!!

2 个答案:

答案 0 :(得分:0)

解决问题的简便方法是首先在两点之间仅绘制单线段并查看结果。然后你可以形成循环。我猜你没有指定完美的坐标点,或者你的循环必须包括:

CGContextAddLineToPoint(context,point.center.x,point.center.y);

然后, CGContextMoveToPoint(context,point.center.x,point.center.y);

这表明第一个绘制线并移动到下一个点。 希望这会有所帮助。

答案 1 :(得分:0)

我会移动逻辑,确定将线条绘制到视图控制器的顺序,并使用协议从委托中访问绘制视图所需的数据。视图不应拥有其数据。例如,在你的.h中尝试类似的东西;

#import <UIKit/UIKit.h>

@protocol CowDrawViewDataSource
-(NSArray *) pointsToDraw;
@end

@interface CowDrawView : UIView
@property (nonatomic , weak) id <CowDrawViewDataSource> dataSource;
@end

然后,(我希望这会回答你的问题)在视图控制器中,你设置为你的视图委托,构建

-(NSArray *) pointsToDraw;

方法,以这种方式,按照可以绘制它们的顺序发送您的点阵列。通过找到顶部/左侧点,然后是顶部/右侧,然后是底部/右侧,底部/左侧来说。 (虽然这种方法可能不适用于不规则多边形,以及连续但不是多边形的形状。)

在弄清楚如何按照您想要的顺序获取数组后,您可以通过向其委托发送消息(例如

)在drawRect中获取它。
NSArray *points = [self.dataSource pointToDraw];

在drawRect中很少重新工作它是自己的。