2013-12-05 4 views
0

В настоящее время я имею дело с генерированием активов приложения iOS в коде (создание CAShapeLayer и рендеринг его как UIImage). У меня проблема с закругленными углами, искаженными при рисовании пути безье для моего слоя, и мне было интересно, есть ли у кого-то такая же проблема?CAShapeLayer закругленные углы искажения

Скриншот визуализировать проблему:

http://i.stack.imgur.com/I8Jre.png

(Сгенерировано UIImage используется в качестве BackgroundImage для UIButton)

Код, используемый для создания слоя:

CAShapeLayer * layer = [CAShapeLayer new]; 
[layer setBackgroundColor:[UIColor clearColor].CGColor]; 
[layer setFrame:CGRectMake(.0, .0, size.width, size.height)]; 
[layer setFillColor:[UIColor colorForKey:@"colour_1"].CGColor]; 
[layer setStrokeColor:[UIColor colorForKey:@"colour_4"].CGColor]; 
[layer setLineWidth:2.0]; 
[layer setPath:[UIBezierPath bezierPathWithRoundedRect:layer.frame byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerBottomRight cornerRadii:CGSizeMake(10.0, 10.0)].CGPath]; 

Включите его в UII-код:

UIImage * imageFromCALayer(CALayer * layer) { 
    UIGraphicsBeginImageContextWithOptions([layer frame].size, NO, [UIScreen mainScreen].scale); 
    [layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return outputImage; 
} 

ответ

0

Почему вы принимаете CAShapeLayer и растеризуете его на изображение? Просто нарисуйте путь прямо! Мало того, что исправить способ создания изображения, но это даст вам больше контроля над процессом рисования.

0

Поскольку ваш CAShapeLayer и изображение имеют одинаковые размеры, и вы применяете контур (который находится наполовину внутри и половина вне пути фигуры), получившееся изображение обрезается. Поэтому вам нужно только добавить ширину контура к ширине и высоте полученного изображения.

Смежные вопросы