开发者

iOS Draw Rectagle with curved ends

Imagine a long rectangle (maybe with size 200x20). All sides have straight edge开发者_C百科s. In my iOS app, this is easy for me to draw:

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

Now what if I wanted the shorter ends (on the left and right side of the rectangle) to be slightly curved, rather than straight edges. What would the code look like to do this?

(Note that I am relatively inexperienced with CGContext drawing)


Something like this (untested, so beware of bugs!):

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


You may find Jeff LaMarche's RoundedRectView class useful, whether to use instances of directly or even to see how he makes them:

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜