用Quartz 2D绘制桥梁

时间:2011-06-19 15:33:07

标签: iphone quartz-graphics quartz-2d objective-c-2.0

我正在尝试绘制以下图片:

enter image description here

使用此Objective-c代码:

CGContextSetFillColorWithColor(ctx, [[UIColor redColor] CGColor]);
CGContextMoveToPoint(ctx, position.X - (size.width / 2), position.Y - (size.height / 2));
CGContextAddLineToPoint(ctx, position.X - (size.width / 2), position.Y + (size.height / 2));
CGContextAddLineToPoint(ctx, position.X - (size.width / 4), position.Y + (size.height / 2));
CGContextAddArc(ctx, position.X, position.Y + (size.height / 2), (size.width / 4), -M_PI, M_PI, 0);
CGContextAddLineToPoint(ctx, position.X + (size.width / 2), position.Y + (size.height / 2));
CGContextAddLineToPoint(ctx, position.X + (size.width / 2), position.Y - (size.height / 2));
CGContextFillPath(ctx);

但它不起作用。我得到这个图片:

enter image description here

图像的宽度为size.width,高度为size.height。 起源是(position.X, position.Y)。此点位于中心位置(size.width / 2,size.height / 2)。

第一个点是左上角,第二个点是左下角。然后继续向右。

这是一个更好的解释: enter image description here

抱歉我的英文。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我改变了这一行:

CGContextAddArc(ctx, position.X, position.Y + (size.height / 2), (size.width / 4), -M_PI, M_PI, 0);

以下内容:

CGContextAddArc(ctx, position.X, position.Y + (size.height / 2), (size.width / 4), -M_PI, 0, 0);

现在它有效!!!我在第二个角度出错了。而不是M_PI,正确的是0。

答案 1 :(得分:0)

你说: 图像的宽度是size.width,高度是size.height。原点是(position.X,position.Y),此点位于中心,(size.width / 2,size.height / 2)。

首先想到的是,一般来说,你的中心点实际上是(position.X + size.width / 2.0,position.Y + size.width / 2.0),(如果你愿意,可以将它包装在floorf中)。

如果这不起作用,我的建议是为每个中间值创建CGPoint,CGRect等,以使所有计算都明确。然后,如果需要,你可以NSLog他们,找出你的计算出错的确切位置。

答案 2 :(得分:0)

反转点绘制顺序会修复吗?