Frage

Ich versuche, eine benutzerdefinierte UIView zu implementieren, die im Grunde genommen ein Pie -Menü ist (so etwas wie ein Kuchen, der in Scheiben unterteilt ist).

Dafür versuche ich, einen Kreis und eine Reihe von Linien aus der Mitte zu zeichnen, wie die Strahlen im Rad eines Diagramms.

Ich habe den Kreis erfolgreich gezeichnet und möchte jetzt die Linien zeichnen, die den Kreis in Scheiben teilen.

Das habe ich bisher:

-(void)drawRect:(CGRect)rect{

     [[UIColor blackColor] setStroke];
     CGContextRef ctx = UIGraphicsGetCurrentContext();

    CGFloat minDim = (rect.size.width < rect.size.height) ? rect.size.width : rect.size.height;

    CGRect circleRect =  CGRectMake(0, rect.size.height/2-minDim/2, minDim, minDim); 

    CGContextAddEllipseInRect(ctx, circleRect);
    CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor yellowColor] CGColor]));
    CGContextFillPath(ctx);

    CGPoint start = CGPointMake(0, rect.size.height/2);
    CGPoint end = CGPointMake(rect.size.width, rect.size.height/2);

    for (int i = 0; i < MaxSlices(6); i++){

        CGFloat degrees = 1.0*i*(180/MaxSlices(6));
        CGAffineTransform rot = CGAffineTransformMakeRotation(degreesToRadians(degrees));

        UIBezierPath *path = [self pathFrom:start to:end];
        [path applyTransform:rot];

    }
 }   

- (UIBezierPath *) pathFrom:(CGPoint) start to:(CGPoint) end{

    UIBezierPath*    aPath = [UIBezierPath bezierPath];
    aPath.lineWidth = 5;
    [aPath moveToPoint:start];
    [aPath addLineToPoint:end];
    [aPath closePath];
    [aPath stroke];
    return aPath;
}

Das Problem ist, dass ApplanTransform auf dem Weg nichts zu tun scheint. Der erste Weg, der korrekt gezeichnet wird, und die folgenden sind von der Rotation nicht betroffen. Grundsätzlich sehe ich nur ein Weg. Überprüfen Sie den Screenshot hier http://img837.imageshack.us/img837/9757/iossimulatorscreenshotf.png

Danke für Ihre Hilfe!

War es hilfreich?

Lösung

Sie zeichnen den Weg (mit stroke) Bevor du es verwandeln. Ein Weg ist nur eine mathematische Darstellung. Es ist nicht die Zeile "auf dem Bildschirm". Sie können nicht verschieben, was Sie bereits gezeichnet haben, indem Sie die Daten darüber geändert haben.

Bewegen Sie einfach die [aPath stroke] aus pathFrom:to: und setze es nach dem applyTransform:.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top