iPhone Xs Max 14.5
预期效果图
给UIImageview添加一个气泡框样式的遮罩图,使图片加载后显示为气泡框样式。
原代码:
//设置蒙版遮罩层通道
UIImageView *imageViewMask = [[UIImageView alloc] initWithImage:image];
imageViewMask.frame = CGRectInset(view.frame, 0.0f, 0.0f);
view.layer.mask = imageViewMask.layer;
在 iphone 6(11.0.3) 上显示正常,但是在 iPhone Xs Max (14.5) 上不显示图片。
可能原因是,在14.5系统上,这种方式获取的遮罩层图片为空,导致遮罩完全覆盖视图,图片没有展示出来。
修改代码:
// 先将气泡图片展示在指定大小视图上显示拉伸后的形状
UIImageView *imageViewMask = [[UIImageView alloc] initWithImage:image];
imageViewMask.frame = view.bounds;
// 截取图片
// UIGraphicsBeginImageContext(view.bounds.size); 这个效果模糊一些,
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0);
[imageViewMask.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *maskImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// 设置蒙版遮罩层通道
CALayer *maskLayer = [CALayer layer];
maskLayer.frame = view.bounds;
maskLayer.contents = (id)[maskImage CGImage];
view.layer.mask = maskLayer;
图片做了拉伸,但是直接赋值给layer的话,没有达到预期效果,所以这里先放到imageView中,再截取imageView来获取预期样式的气泡图效果。
图片拉伸方法:
// 拉伸图片的方法(固定图片的位置,其他部分被拉伸)
image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(24,25,10,25) resizingMode:UIImageResizingModeStretch];
参考:
UIGraphicsBeginImageContext 和 UIGraphicsBeginImageContextWithOptions
iOS 截取view生成图片