我目前正在处理代码中的iOS应用资产生成(创建CAShapeLayer并将其渲染为UIImage)。 我在为我的图层绘制bezier路径时遇到圆角变形的问题,并且想知道是否有人有同样的问题?
可视化问题的屏幕截图:
http://i.stack.imgur.com/I8Jre.png
(生成的UIImage用作UIButton的backgroundImage)
用于创建图层的代码:
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];
将其变成UIImage:
UIImage * imageFromCALayer(CALayer * layer) {
UIGraphicsBeginImageContextWithOptions([layer frame].size, NO, [UIScreen mainScreen].scale);
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImage;
}
答案 0 :(得分:0)
为什么要拍摄CAShapeLayer
并将其光栅化为图像?直接画路径!不仅是正确生成图像的方式,而且它可以让您更好地控制绘图过程。
答案 1 :(得分:0)
由于您的CAShapeLayer和图像具有相同的尺寸并且您应用了轮廓(在形状路径的一半内部和一半外部),因此会裁剪生成的图像。因此,您需要做的就是将轮廓的宽度添加到结果图像的宽度和高度。