Thema Datum  Von Nutzer Rating
Antwort
01.09.2011 15:26:22 Geo
NotSolved
Blau Core Graphics / Quartz 2D Runde Ecken Zeichnen
06.09.2011 08:45:46 Gast47069
*****
Solved

Ansicht des Beitrags:
Von:
Gast47069
Datum:
06.09.2011 08:45:46
Views:
1548
Rating: Antwort:
 Nein
Thema:
Core Graphics / Quartz 2D Runde Ecken Zeichnen

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;

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
01.09.2011 15:26:22 Geo
NotSolved
Blau Core Graphics / Quartz 2D Runde Ecken Zeichnen
06.09.2011 08:45:46 Gast47069
*****
Solved