iPhone Xs Max 14.5

预期效果图
【问题记录】UIImageview添加遮罩后不显示图片_遮罩层
给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生成图片