如何在 CALayer 中将 PNG 作为不透明图像加载?
How to load a PNG as an opaque image within a CALayer?
我需要在我的应用程序中的 CALayer 中本地加载各种 PNG 图像。为此,我的代码如下所示:
CALayer *myLayer = [[CALayer alloc] init];
UIImage *myImage = [UIImage imageNamed:@"nonTransparentBackground"];
[myLayer setOpaque:YES];
[myLayer setContents:(__bridge id)[myImage CGImage]];
- 当我在模拟器中查看应用程序时,select“颜色混合
层的选项,整个层有一个红色的色调(即阿尔法
通道存在,因此它不是不透明的)。
- 如果我删除图像,那么图层是空的,它会变成绿色,所以 CALayer 没有问题。
- 如果我将图像加载为 jpg 而不是 .png,它也可以正常工作并且图层显示为绿色。
- 我的 PNG 文件没有 alpha 通道(我用 PS 保存了它,没有选中透明度)。
- 我现在的猜测是,这与使用 UIImage imagedNamed: 方法创建时 PNG 的保存方式有关。也许此刻 iOS 会转换所有 PNG,以便它们具有 alpha 通道。这就是我目前正在调查的内容。
2015 年 4 月 15 日更新:我创建了一个测试应用程序,它除了在后台加载 PNG 文件外什么都不做,而且它可以正常工作,这是个好消息。我的应用程序中一定有什么东西导致了这种行为。希望识别时间不会太长。
我在这里发帖以防将来有人遇到问题,但我对此表示怀疑。事实证明问题与我的实际代码无关,而是与部署目标有关。我当前的目标是 7.1,但通过更改为 8.0,它可以按预期工作。我不知道这是 Xcode/Simulator 相关还是 iOS 相关,所以我可能会坚持使用 iOS 7 直到下一次更新。
我需要在我的应用程序中的 CALayer 中本地加载各种 PNG 图像。为此,我的代码如下所示:
CALayer *myLayer = [[CALayer alloc] init];
UIImage *myImage = [UIImage imageNamed:@"nonTransparentBackground"];
[myLayer setOpaque:YES];
[myLayer setContents:(__bridge id)[myImage CGImage]];
- 当我在模拟器中查看应用程序时,select“颜色混合 层的选项,整个层有一个红色的色调(即阿尔法 通道存在,因此它不是不透明的)。
- 如果我删除图像,那么图层是空的,它会变成绿色,所以 CALayer 没有问题。
- 如果我将图像加载为 jpg 而不是 .png,它也可以正常工作并且图层显示为绿色。
- 我的 PNG 文件没有 alpha 通道(我用 PS 保存了它,没有选中透明度)。
- 我现在的猜测是,这与使用 UIImage imagedNamed: 方法创建时 PNG 的保存方式有关。也许此刻 iOS 会转换所有 PNG,以便它们具有 alpha 通道。这就是我目前正在调查的内容。
2015 年 4 月 15 日更新:我创建了一个测试应用程序,它除了在后台加载 PNG 文件外什么都不做,而且它可以正常工作,这是个好消息。我的应用程序中一定有什么东西导致了这种行为。希望识别时间不会太长。
我在这里发帖以防将来有人遇到问题,但我对此表示怀疑。事实证明问题与我的实际代码无关,而是与部署目标有关。我当前的目标是 7.1,但通过更改为 8.0,它可以按预期工作。我不知道这是 Xcode/Simulator 相关还是 iOS 相关,所以我可能会坚持使用 iOS 7 直到下一次更新。