在项目中需要取相册的第一张照片展示出来,并且UIImageView需要一个白色的2pt宽、6pt圆角的边框,并且需要对imageView进行一定角度的旋转。如果仅仅对imageView进行旋转的话会导致view边缘锯齿化,经查阅资料,有这样的解决办法:
解决办法
-
如果是imageView的话,可以对UIImage进行重绘:
- (UIImage *)antiAlias { CGFloat border = 1.0f; CGRect rect = CGRectMake(border, border, self.size.width-2*border, self.size.height-2*border); UIImage *img = nil; UIGraphicsBeginImageContext(CGSizeMake(rect.size.width,rect.size.height)); [self drawInRect:CGRectMake(-1, -1, self.size.width, self.size.height)]; img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIGraphicsBeginImageContext(self.size); [img drawInRect:rect]; UIImage* antiImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return antiImage; }
这样会给image加一个1像素的透明边框,从而消除锯齿。
-
在iOS 7以上,苹果为我们提供了一个属性:allowsEdgeAntialiasing来进行锯齿的消除:
layer.allowsEdgeAntialiasing = YES;
这样也可以将锯齿消除。
-
但是在图片旋转后,仅仅设置allowsEdgeAntialiasing为YES,还是可以看到UIImageView边缘有细小的锯齿,我们可以通过再设置layer的shouldRasterize属性为YES来消除这些细小的锯齿:
layer. shouldRasterize = YES; layer.allowsEdgeAntialiasing = YES;
效果展示
下面的三张图分别为:
- 未进行任何处理
- 将allowsEdgeAntialiasing属性设置为YES
- 将shouldRasterize、allowsEdgeAntialiasing属性均设置为YES
版权声明:本文为ShorewB原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。