2013-09-12 2 views
40

После анонса iPhone 5c, мне любопытно, знает ли кто-нибудь API, как получить цвет iPhone 5c? Я уверен, что всем будет удобно загружать соответствующую цветовую схему пользовательского интерфейса в цвет устройства.Как определить цвет iPhone 5c?

Я думаю об обертывании его в нечто вроде категории UIDevice, которая вернет UIColor.

Update: @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 
+0

Умная идея !!! Вы можете получить некоторые подсказки из обсуждения здесь http://stackoverflow.com/questions/8463212/detecting-color-of-iphone-ipod-touch –

+0

Я не думаю, что для этого есть общедоступный API. –

+1

Хорошо, получилось, но вполне логично интегрировать цветовую схему интерфейса с цветом устройства, так что, может быть, они что-то предоставят, не так ли? – ambientlight

ответ

8

Там есть частный API, чтобы получить как DeviceColor и DeviceEnclosureColor. В случае 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.

13

Цвет устройства кодироваться в серийном номере устройства. У меня нет устройства, чтобы проверить с ними еще официально не выпущен, но я думаю, решение будет похож на это:

Типичный формат iPhone SN выглядит следующим образом: AABCCDDDEEF

А.А. = Заводской и машинный номер
B = Год изготовления (9 - 2009/2019, 0 - 2010/2020, 1 - 2011 и т. Д.)
CC = Производство Неделя (01 - неделя 1 из B, 11 - неделя 11 от B и т. д.)
DDD = Уникальный идентификатор
EE = цвет (A4 = черный)
F = размер (S = 16 ГБ, T = 32GB)

[Source]

Существует более подробную информацию о старых методах here


Я хотел бы отметить, однако, что я ожидаю, что ISN» t поддерживаемый метод получения серийного номера. Предполагая, что вам просто хотелось бы узнать эту информацию, чтобы вы могли настроить свой пользовательский интерфейс, я просто добавил пользовательский параметр или попросил их выбрать цвет своего устройства при первом запуске (или какой-то другой ранний момент в приложении - пользователь жизни)

3

число людей на Twitter есть cited the following method:

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

Хотя я не подтвердил это сам.

+2

Обратите внимание, что _ указывает, что это частный метод. – Jano

+0

Итак, как мы используем этот метод? :/ –

+8

@Amaud, ответ в том, что вы этого не делаете, по крайней мере, не в приложении, которое хотите отправить в магазин приложений. –

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"]); 
    } 

Ref: Detecting Color of iPhone/iPad/iPod touch?

Смежные вопросы