2010-12-09 4 views
1

Ich versuche, eine Reihe von Rechtecken (bis zu 2000) auf einer einzelnen UIView mit einer Schleife zu zeichnen. Ich kann in der DrawRect Methode des UIView mit dem folgenden Code dies ganz leicht erreichen:Zeichnen mehrerer Objekte in einem einzelnen Kontext mit unterschiedlichen Orientierungen

CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(context, 1.0); 
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); 
    CGContextSetFillColorWithColor(context, [UIColor tescoBlue].CGColor); 

    for (NSDictionary *dict in storeDimensionsArray) { 
     float x = [[dict objectForKey:@"X"] floatValue]; 
     float y = [[dict objectForKey:@"Y"] floatValue]; 
     float width = [[dict objectForKey:@"Width"] floatValue]; 
     float length = [[dict objectForKey:@"Length"] floatValue]; 

     CGContextAddRect(context, CGRectMake(x, y, length, width)); 
     CGContextDrawPath(context, kCGPathFillStroke); 
     [self setNeedsDisplay]; 
    } 

jedoch jede meiner Rechtecke eine andere Orientierung aufweisen kann, die um einen Winkel dargestellt wird (i Grad). Für das Leben von mir kann ich nicht herausfinden, wie man jede Form mit ihrer eigenen unabhängigen Orientierung, irgendwelchen Ideen zeichnet?

Ich habe den folgenden Code versucht, aber es scheint nicht zu funktionieren.

CGContextTranslateCTM (context, x, y); 
    CGContextRotateCTM(context, radians([[dict objectForKey:@"Angle"] floatValue])); 
    // tried adding the drawing code here 
    CGContextTranslateCTM (context, -x , -y); 
    // ...or here 

Ich habe Probleme, meinen Kopf um den Kontext zu bewegen. Scheint eine viel einfachere Lösung wäre, die Ausrichtung des Rechtecks ​​zu ändern.

Jede Hilfe wird geschätzt!

Antwort

0

Meiner Meinung nach können Sie die CGContextAddRect() -Methode nicht verwenden, um ein Rechteck in einer benutzerdefinierten Ausrichtung zu zeichnen. Vielleicht bin ich falsch, aber ich denke, dass man sie durch die Verwendung zu ziehen hat:

CGContextMoveToPoint(context, x, y); 
CGContextAddLineToPoint(context, x, y); 
CGContextAddLineToPoint(context, x, y); 
CGContextAddLineToPoint(context, x, y); 
CGContextAddLineToPoint(context, x, y); 
CGContextStrokePath(context); 

Also, werden Sie wahrscheinlich Koordinaten in einer benutzerdefinierten Methode berechnen müssen.

+0

Danke, aber ich hatte gehofft, dass es nicht dazu kommen würde und es gab eine einfachere Möglichkeit. Ich werde es geben und sehen, wie es geht! – KSoza