24

我刚刚将 Xcode 从版本 4.6.2 更新到 5.0,在我的项目中执行一个方法(在 Xcode 4.6.2 中创建)之后突然发出编译器警告。我已经尝试在新旧版本的 Xcode 中重新打开项目,并且我已经确认相同的方法在 4.6.2 中没有给出警告。

这是在 Xcode 5.0 中引发警告的代码行:

CGContextRef context = CGBitmapContextCreate(NULL, frame.size.width * scaleFactor, frame.size.height * scaleFactor, 8, frame.size.width * scaleFactor * 4, colorSpace, kCGImageAlphaPremultipliedFirst);

警告说:

"Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitMapInfo' (aka 'enum CGBitMapInfo')"

它似乎不是弃用警告,但我对这些类不太熟悉,无法解释其含义或知道如何解决它。任何帮助表示赞赏。

4

2 回答 2

37

枚举值kCGImageAlpha*应该填充. CGBitmapInfo但是,由于 C 类型系统无法表达这一点,您会收到类型不匹配的警告,即使它们是有意的。

正确的解决方案是将您的 alpha 枚举值转换为CGBitmapInfo,因为它是这样的:

(CGBitmapInfo)kCGImageAlphaPremultipliedFirst
于 2013-11-12T13:21:43.577 回答
6

看到 aegolden的评论https://github.com/inkling/Subliminal/issues/23,新 XCode 警告的意图可能是指导您在这些枚举类型上使用不同的掩码来构造和连接各种标志。因此,不要只使用 kCGImageAlphaPremultipliedFirst,而是使用

(kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedFirst)

此更改后警告将消失。

于 2013-09-26T03:31:44.807 回答