4

我在 WWDC 视频上看到了这个 ui_orientation 糖果,在这个上下文中使用

UIImage *finalImage = [[UIImage alloc] initWithCGImage:cgimg
                      scale:2.0f orientation:ui_orientation([displayImage properties])];

显然它读取 CCImage 的方向以正确创建 UIImage,但是在我的代码上使用它会产生此错误:函数 'ui_orientation' 的隐式声明在 C99 中无效

你们知道我应该在我的源代码中包含什么标题才能使这个功能工作吗?

谢谢。

注意:WWDC 2012 - 第 510 课 25'16" ... 创建 UIImage 时

4

2 回答 2

6

这是来自 Session 422,他们在其中给出了代码

将方向属性转换为 UIImageOrientation:

UIImageOrientation ui_orientation (NSDictionary* props)
{
    int o = [[props valueForKey:(id)kCGImagePropertyOrientation] intValue];
    UIImageOrientation map[] = {
        UIImageOrientationUp,
        UIImageOrientationUp, UIImageOrientationUpMirrored,
        UIImageOrientationDown, UIImageOrientationDownMirrored,
        UIImageOrientationLeftMirrored, UIImageOrientationRight,
        UIImageOrientationRightMirrored, UIImageOrientationLeft,
    };
    return map[o];
}

这里还有一个方便的提示:从所有 WWDC 会议中下载所有 PDF,并将它们保存在您的硬盘上。它们不占用太多空间。这样,当您想查找会话讨论的内容CATransaction或(如此处)组成的功能时,您可以使用 Spotlight 查找以会话编号作为标题的 PDF。

于 2013-04-12T21:48:35.297 回答
3

按照 H2CO3 的建议,我跑了

otool -tv UIKit | grep ui_orientation

UIKit的路径在哪里

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/UIKit.framework

该命令没有返回任何结果,因此我可以确认该函数没有公共定义ui_orientation,就像 iOS SDK 6.1 一样。

这可能是为该特定示例而定义的宏,因此对于 Apple 没有明确说明感到羞耻。

于 2013-04-12T21:13:26.667 回答