Не удается заставить UIBezierPath применить стиль linecapstyle/linejoinstyle

Я пытаюсь нарисовать форму шеврона внутри своего подкласса UIView. Появляется шеврон, но стиль окончания строки и стили соединения строк, которые я применяю, не отражаются в выходных данных.

 - (UIBezierPath *)chevron:(CGRect)frame
{
    UIBezierPath* bezierPath = [[UIBezierPath alloc]init];
    [bezierPath setLineJoinStyle:kCGLineJoinRound];
    [bezierPath setLineCapStyle:kCGLineCapRound];
    [bezierPath moveToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMaxY(frame))];
    [bezierPath addLineToPoint:CGPointMake(CGRectGetMaxX(frame), CGRectGetMaxY(frame) * 0.5)];
    [bezierPath addLineToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMinY(frame))];

    return bezierPath;
}
-(void)drawRect:(CGRect)rect{
    [self.color setStroke];
    UIBezierPath *chevronPath = [self chevron:rect];
    [chevronPath setLineWidth:self.strokeWidth];
    [chevronPath stroke];
}

Согласно документам Apple, они говорят, что «после настройки геометрии и атрибутов пути Безье вы рисуете путь в текущем графическом контексте, используя методы обводки и заливки», но здесь это не работает — я пробовал перемещение операторов setLineJoinStyle и setLineCapStyle (например, после добавления LineToPoint внутри drawRect), и кажется, что независимо от того, сколько раз я их вызываю, это не работает. Любые идеи, что происходит не так?


person jefflovejapan    schedule 22.06.2014    source источник


Ответы (1)


Ваш код применяет эти стили, вы просто не можете их видеть, потому что ваш шеврон дорисовывается до края вашего представления, а затем обрезается. Чтобы увидеть концы вашего шеврона, измените свой вызов метода шеврона на это,

UIBezierPath *chevronPath = [self chevron:CGRectInset(rect, 10, 10)];

Будет ли достаточно 10 пунктов для вставки, будет зависеть от ширины вашей линии, поэтому вам может потребоваться увеличить это значение.

person rdelmar    schedule 22.06.2014