经过大量挖掘,我设法找到了自己问题的答案。
我将图层渲染到 UIImage 以提高性能。背景层被 UIScrollView 放大了,然后出现了一些问题:
- 显然,设置 maskToBounds:YES 在使用时没有任何效果
renderInContext
,就像它对 a 的 mask 属性一样CALayer
。MasksToBounds(或 clipToBounds)仅适用于子图层。
- 缩放位图时,请确保将整数值包含到 的 scale 参数中
UIGraphicsBeginImageContextWithOptions
。如果不是,图像将具有小数大小,例如 24.2323 x 34.3290。顺便说一句,该比例参数用于在 Retina 屏幕上创建惊人的细节,但它可能被误用于放大 CAShapeLayer 绘图。
- 当使用分数大小的图像作为背景层时,边缘会出现失真。
将图层更新为图像功能后,剪切效果消失了。这个成功了:
- (UIImage *)getImageWithSize:(CGSize)size opaque:(bool)opaque contentScale:(CGFloat)scale
{
CGContextRef context;
size = CGSizeMake(ceilf(size.width), ceilf(size.height));
scale = roundf(scale);
UIGraphicsBeginImageContextWithOptions(size, opaque, scale);
context = UIGraphicsGetCurrentContext();
[self renderInContext:context];
UIImage *outputImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImg;
}
使用ceilf
,roundf
或floorf
并不重要。只要你输掉分数。
抱歉,如果我的愚蠢浪费了您的任何时间,但也许其他人也有同样的问题。