iOS Draw Rectagle с изогнутыми концами - PullRequest
1 голос
/ 02 июля 2011

Представьте себе длинный прямоугольник (возможно, с размером 200x20).Все стороны имеют прямые края.В моем приложении для iOS это легко нарисовать:

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

А что если бы я хотел, чтобы более короткие концы (слева и справа от прямоугольника) были слегка изогнутыми, а не прямыми краями?,Как будет выглядеть код для этого?

(Обратите внимание, что я относительно неопытен в рисовании CGContext)

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

Примерно так (непроверено, так что остерегайтесь ошибок!):

- (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 голос
/ 03 июля 2011

Может оказаться полезным класс RoundedRectView Джеффа Ламарша, использовать ли экземпляры напрямую или даже посмотреть, как он их делает:

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

...