iOS绘制带有弯曲末端的矩形

时间:2011-07-01 22:28:28

标签: iphone ios ipad cgcontext

想象一个长矩形(可能大小为200x20)。所有面都有直边。在我的iOS应用程序中,这对我来说很容易绘制:

CGContextFillRect(context, CGRectMake(xLoc, yLoc, 200, 20));

如果我想要短边(在矩形的左侧和右侧)略微弯曲而不是直边,那该怎么办呢?代码看起来会是什么样的?

(请注意,我对CGContext绘图相对缺乏经验)

2 个答案:

答案 0 :(得分:2)

像这样的东西(未经测试,所以要小心虫子!):

- (void)drawRect:(CGRect)rect {
 CGContextRef context = UIGraphicsGetCurrentContext();
 CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
 CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);

 CGRect rrect = CGRectMake(CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetWidth(rect)-30, CGRectGetHeight(rect)-30);
 CGFloat radius = 0.5f;

 CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect), maxx = CGRectGetMaxX(rrect);
 CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect), maxy = CGRectGetMaxY(rrect);

 CGContextMoveToPoint(context, minx, midy);
 CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
 CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
 CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
 CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
 CGContextClosePath(context);
 CGContextDrawPath(context, kCGPathFillStroke);
}

答案 1 :(得分:1)

你可能会发现Jeff LaMarche的RoundedRectView类很有用,无论是直接使用实例还是看他是如何制作它们的:

http://iphonedevelopment.blogspot.com/2008/11/creating-transparent-uiviews-rounded.html