Hi Geo,
3 Varianten:
1:
CGRect rrect = rect;
CGFloat radius = 6.0;
CGFloat width = CGRectGetWidth(rrect);
CGFloat height = CGRectGetHeight(rrect);
CGContextSetStrokeColorWithColor(ctx, color.CGColor);
if (radius > width/2.0)
radius = width/2.0;
if (radius > height/2.0)
radius = height/2.0;
CGFloat minx = CGRectGetMinX(rrect);
CGFloat midx = CGRectGetMidX(rrect);
CGFloat maxx = CGRectGetMaxX(rrect);
CGFloat miny = CGRectGetMinY(rrect);
CGFloat midy = CGRectGetMidY(rrect);
CGFloat maxy = CGRectGetMaxY(rrect);
CGContextMoveToPoint(ctx, minx, midy);
CGContextAddArcToPoint(ctx, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(ctx, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(ctx, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(ctx,minx, maxy, minx, midy, radius);
CGContextClosePath(ctx);
CGContextSaveGState(ctx);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextClip(ctx);
CGContextRestoreGState(ctx);
CGContextSaveGState(ctx);
CGContextDrawPath(ctx, kCGPathStroke);
2:
CGContextSaveGState(ctx);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextSetFillColorWithColor(ctx, color.CGColor);
CGFloat radius = 6.0;
CGFloat minx = CGRectGetMinX(rect);
CGFloat midx = CGRectGetMidX(rect);
CGFloat maxx = CGRectGetMaxX(rect);
CGFloat miny = CGRectGetMinY(rect);
CGFloat midy = CGRectGetMidY(rect);
CGFloat maxy = CGRectGetMaxY(rect);
CGContextSetShouldAntialias(ctx, 1);
CGContextMoveToPoint(ctx, minx, miny + 10);
CGContextAddCurveToPoint(ctx, minx, miny + 10, minx , miny , minx + 10, miny);
CGContextMoveToPoint(ctx, maxx - 10, miny);
CGContextAddCurveToPoint(ctx, maxx - 10, miny, maxx, miny, maxx, miny + 10);
CGContextMoveToPoint(ctx, maxx, maxy - 10);
CGContextAddCurveToPoint(ctx,maxx, maxy - 10, maxx, maxy, maxx - 10, maxy);
CGContextMoveToPoint(ctx, minx + 10, maxy);
CGContextAddCurveToPoint(ctx, minx + 10, maxy, minx, maxy, minx, maxy - 10);
CGContextDrawPath(ctx, kCGPathStroke);
CGContextSetShouldAntialias(ctx, 0);
CGContextMoveToPoint(ctx, minx + 10, miny + 1);
CGContextAddLineToPoint(ctx, maxx - 10, miny + 1);
CGContextMoveToPoint(ctx, maxx - 1, maxy - 10);
CGContextAddLineToPoint(ctx, maxx - 1, miny + 10);
CGContextMoveToPoint(ctx, maxx - 10, maxy);
CGContextAddLineToPoint(ctx, minx + 10, maxy);
CGContextMoveToPoint(ctx, minx, maxy - 10);
CGContextAddLineToPoint(ctx, minx, miny + 10);
CGContextDrawPath(ctx, kCGPathStroke);
oder du erstellst einen einfachen view, importierst das quartz-framework:
#import <QuartzCore/QuartzCore.h>
und schreibst dann in der ini-mthode sowas -- dann solltest du genau bekommen was du suchst, und das ganz ohne drawing code:
self.layer.cornerRadius = 6.0;
self.layer.borderColor = [UIColor colorWithRed:204/255.0 green:204/255.0 blue:204/255.0 alpha:1.0].CGColor;
self.layer.borderWidth = 1;
|