Pregunta

Estoy tratando de implementar un UIView personalizado que sea básicamente un menú de pastel (algo así como un pastel dividido en rodajas).

Para eso, estoy tratando de dibujar un círculo y una serie de líneas desde el centro, como los rayos en la rueda de una tabla.

He dibujado con éxito el círculo y ahora me gustaría dibujar las líneas que dividen el círculo en rodajas.

Esto es lo que tengo hasta ahora:

-(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;
}

El problema es que ApplyTransform en la ruta no parece hacer nada. El primer gesto de ruta dibujado correctamente y los siguientes no se ven afectados por la rotación. Básicamente, lo que veo es solo un camino. Revise la captura de pantalla aquí http://img837.imageshack.us/img837/9757/iossimulatorscreenshotf.png

¡Gracias por tu ayuda!

¿Fue útil?

Solución

Estás dibujando el camino (con stroke) antes de transformarlo. Un camino es solo una representación matemática. No es la línea "en la pantalla". No puede mover lo que ya ha dibujado modificando los datos al respecto.

Solo mueve el [aPath stroke] fuera de pathFrom:to: y ponerlo después del applyTransform:.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top