如何检测iPhone 5c的颜色?

时间:2013-09-12 16:36:02

标签: ios objective-c iphone cocoa-touch ios7

iPhone 5c发布后,我很好奇是否有人知道API如何获得iPhone 5c颜色?我相信每个人都会发现将相应的UI颜色方案加载到设备颜色很方便。

我正在考虑将它包装在类似UIDevice类的东西中,它将返回UIColor。

更新 @ColinE和@Ortwin Gentz  已经指出了私有UIDevice实例方法调用的可用性。

请注意,对于iPhone 5c,你真正想要的是deviceEnclosureColor,因为deviceColor将始终返回#3b3b3c,因为它是一种正面颜色。

方法签名:

-(id)_deviceInfoForKey:(struct __CFString { }*)arg1

UIDevice类别:

@interface UIDevice (deviceColour)

- (id)_deviceInfoForKey:(struct __CFString { }*)arg1;
- (NSString*)deviceColourString_UntilAppleMakesItPublic;
- (NSString*)deviceEnclosureColour_UntilAppleMakesItPublic;


@end

@implementation UIDevice (deviceColour)

- (NSString*)deviceColourString_UntilAppleMakesItPublic
{
    return [self _deviceInfoForKey:@"DeviceColor"];
}

- (NSString*)deviceEnclosureColour_UntilAppleMakesItPublic
{
    return [self _deviceInfoForKey:@"DeviceEnclosureColor"];
}


@end

4 个答案:

答案 0 :(得分:13)

设备颜色(用于?)以设备的序列号编码。我没有设备可以测试它们尚未正式发布,但我想解决方案将类似于此:

  

iPhone SN的典型格式如下:AABCCDDDEEF

     <=> AA =工厂和机器ID
B =制造年份(9是   2009/2019,0为2010/2020,1为2011年等等)
CC =生产   周(01是B的第1周,11是B的第11周,依此类推)
DDD =   唯一标识符
EE =颜色(A4 =黑色)
F =大小(S = 16GB,   T = 32GB)

[Source]

有关旧技术的更多信息here


但是我想指出,我希望没有一种支持的方法来获取序列号。假设您只想知道这些信息,以便您可以自定义UI,我只需输入一个用户选项,或者让他们在首次启动时选择其设备的颜色(或者应用程序中的其他早期点)用户生活)

答案 1 :(得分:8)

有一个私有API可以检索DeviceColorDeviceEnclosureColor。对于iPhone 5c,有趣的部分是外壳颜色(设备颜色=前面颜色总是#3b3b3c)。

UIDevice *device = [UIDevice currentDevice];
SEL selector = NSSelectorFromString(@"deviceInfoForKey:");
if (![device respondsToSelector:selector]) {
    selector = NSSelectorFromString(@"_deviceInfoForKey:");
}
if ([device respondsToSelector:selector]) {
    NSLog(@"DeviceColor: %@ DeviceEnclosureColor: %@", [device performSelector:selector withObject:@"DeviceColor"], [device performSelector:selector withObject:@"DeviceEnclosureColor"]);
}

我发表过关于此的博客并提供了一个示例应用:

http://www.futuretap.com/blog/device-colors/

警告:如上所述,这是一个私有API。不要在App Store版本中使用它。

答案 2 :(得分:3)

推特上有很多人cited the following method

[[UIDevice currentDevice] _deviceInfoForKey:@"DeviceColor"]

虽然我自己没有证实。

答案 3 :(得分:0)

这可能对你有所帮助......

UIDevice *device = [UIDevice currentDevice];
    SEL selector = NSSelectorFromString([device.systemVersion hasPrefix:@"7"] ? @"_deviceInfoForKey:" : @"deviceInfoForKey:");
    if ([device respondsToSelector:selector]) {
        NSLog(@"DeviceColor: %@ DeviceEnclosureColor: %@",
              [device performSelector:selector withObject:@"DeviceColor"],
              [device performSelector:selector withObject:@"DeviceEnclosureColor"]);
    }

参考:Detecting Color of iPhone/iPad/iPod touch?