0

我尝试加入线路时遇到问题。这是一张图片:

图片1

我喜欢它看起来像这样:

图片2

我的代码是:

- (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);

    }

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

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

4

2 回答 2

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中几乎没有重新工作它是自我的。

于 2013-07-30T07:13:46.903 回答
0

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

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

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

这表明首先画线并移动到下一个点。希望这可以帮助。

于 2013-07-29T17:00:40.693 回答