UIBezierPath и applytransform - PullRequest
       46

UIBezierPath и applytransform

4 голосов
/ 16 февраля 2012

Я пытаюсь реализовать пользовательский UIView, который в основном представляет собой круговое меню (что-то вроде торта, разделенного на кусочки).

Для этого я пытаюсь нарисовать круг и серию линий от центра, как лучи в колесе карты.

Я успешно нарисовал круг, и теперь я хотел бы нарисовать линии, разделяющие круг на ломтики.

Это то, что я имею до сих пор:

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

Проблема в том, что applyTransform на пути, похоже, ничего не делает. Первый жест жеста нарисован правильно, а последующие не зависят от поворота. По сути, я вижу только один путь. Проверьте снимок экрана здесь http://img837.imageshack.us/img837/9757/iossimulatorscreenshotf.png

Спасибо за вашу помощь!

1 Ответ

4 голосов
/ 16 февраля 2012

Вы рисуете путь (с stroke), прежде чем преобразуете его.Путь - это просто математическое представление.Это не строка «на экране».Вы не можете переместить то, что уже нарисовали, изменив данные о нем.

Просто переместите [aPath stroke] из pathFrom:to: и поместите его после applyTransform:.

...