您的位置:首页 > 产品设计 > UI/UE

iOS UIView、UIImageView旋转产生边界锯齿的完美解决方法

2017-09-26 09:11 3167 查看
在项目中需要取相册的第一张照片展示出来,并且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





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐