Xcode 8 CoreGraphics问题与iPhone 7(运行iOS 10)
我正在使用运行iOS 10的iPhone 7(似乎不是哪个版本的iOS 10,但它必须是iPhone 7设备...即使是具有相同版本iOS 10的iPhone 6s也没有这个问题)。不幸的是,我没有能力尝试运行iOS 9或更低版本的iPhone 7。Xcode 8 CoreGraphics问题与iPhone 7(运行iOS 10)
在我的应用程序中,我使用这种方法与其它图像掩盖的图像:
- (UIImage *)imageWithMask:(UIImage *)maskImage
{
UIImage *returnImage = nil;
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef),
NULL,
false);
CGImageRef maskedImageRef = CGImageCreateWithMask([self CGImage], mask);
returnImage = [UIImage imageWithCGImage:maskedImageRef];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
return returnImage;
}
这里是我在经过掩模图像(黑色和白色):
如果我建立我在Xcode 7.3.1应用程序,我的方法掩盖了图像细腻:
但是,如果我在Xcode 8运行应用程序(即使是最新的8.2),我的方法使生成的图像看起来透明(白色背景来通过):
我不了解正在发生的事情以及为什么不同版本的Xcode会导致这种情况(以及为什么它只发生在iPhone 7上)。也许Xcode的不同版本正在拉动不同版本的CoreGraphics或其他东西?也许有关iPhone 7的CoreGraphics与iPhone 6s不同(可能是因为iPhone 7的屏幕分辨率或处理能力等原因)?
我无法弄清楚接下来要做什么/看看,现在我知道这是一个Xcode问题。
到目前为止,我唯一的答案是跳过CGImageMaskCreate
和CGImageCreateWithMask
,并利用UIView
的maskView
属性与alpha蒙版图标。
换句话说,现在不是掩盖UIImage
,并在屏幕上的某个CGRect
帧绘制它,现在我这样做:
imageView = [[UIImageView alloc] initWithFrame:frame];
imageView.image = imageToMask;
imageView.maskView = [[UIImageView alloc] initWithImage:alphaMaskIcon];
[view addSubview:imageView];
一个有关该方法的重要的一点是,maskView
使用遮罩图标中像素的Alpha通道来确定要遮罩或通过的内容,而不是使用黑白图标中像素的0.0-1.0灰度值。因此,使用我的气泡图标作为例子,黑色应该仍然是纯黑的,因为我想让图像的这一部分通过,但现在它周围的白色必须透明,因为我希望图像的这一部分被遮罩。