当我尝试连接线路时遇到问题。这是一张图片:
我觉得它看起来像这样:
我的代码是:
- (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);
}
我遇到的问题是,对于你添加的每一个点,线都重叠,我希望在我留下时我为几何图形添加点,球体不会重叠
如果有人可以帮助我,我会感谢!!
答案 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中很少重新工作它是自己的。