我正在使用UIBezierPath绘制六边形,其中点(或交点)变化&由滑块控制。 PLS。看这里的截图: http://postimage.org/image/tq8z8t9qb/
现在的问题是,当绘制最后一个点或移动时它已经错了(我在圈子中标记了截图 )。我想,它是从贝塞尔路径的原点/中心点画出一条额外的线。 希望你能查看代码:
- (void)drawRect:(CGRect)rect
{
// Drawing code
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextClearRect(ctx, rect);
CGPoint center = CGPointMake(150.0, 150.0);
// line
UIBezierPath *polyPath = [UIBezierPath bezierPath];
polyPath.lineWidth = 5;
[polyPath moveToPoint:CGPointMake(center.x, center.y + 60.0)];
for (int i = 1; i <= 6; ++i) {
CGFloat x, y;
NSNumber *oNumb = [[self aIndexValues] objectAtIndex:i-1];
fXValue_ = [oNumb floatValue];
x = fXValue_ * sinf(i * 2.0 * M_PI / 6.0);
y = fXValue_ * cosf(i * 2.0 * M_PI / 6.0);
[polyPath addLineToPoint:CGPointMake(center.x + x, center.y + y)];
}
[polyPath closePath];
[[UIColor redColor] setStroke];
[polyPath stroke];
// circle point
for(int i = 1; i <= 6; ++i) {
CGFloat x, y;
NSNumber *oNumb = [[self aIndexValues] objectAtIndex:i-1];
fXValue_ = [oNumb floatValue];
x = fXValue_ * sinf(i * 2.0 * M_PI / 6.0);
y = fXValue_ * cosf(i * 2.0 * M_PI / 6.0);
UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(center.x + x - 6, center.y + y - 6, 15, 15)];
circle.lineWidth = 5;
[[UIColor whiteColor] setFill];
[circle fill];
}
}
PLS。让我知道什么是错的。感谢
答案 0 :(得分:0)
仔细看看:
[polyPath moveToPoint:CGPointMake(center.x, center.y + 60.0)];
这总是绘制到六边形的最大下顶点,忽略该顶点的滑块设置。它应该使用aIndexValues
的approriate元素而不是60.0
。
其他一些不能防止这种情况发生的事情,但会让你的代码变得不整洁:
CGContextClearRect
中致电drawRect
。上下文已经为您清除。fXValue_
的变量,该变量未在此方法中定义。你不需要从其他地方获取它的值,所以在这个方法中声明一个变量来存储顶点半径。i
从0计算到5而不是1到6,因此每当您从1
检索数字时,都必须减去aIndexValues
。