Проблема с адаптацией коэффициента масштабирования для режима совместимости с iPad x2

Интересно, может ли кто-нибудь помочь мне со следующим. Я написал приложение Quartz 2d и использовал следующий код, чтобы получить правильный коэффициент масштабирования для каждого устройства:

if ([UIScreen instancesRespondToSelector:@selector(scale)])
{
        return [[UIScreen mainScreen] scale];
}
else
{
        return 1.0;
}

Затем я умножаю все значения на этот масштабный множитель в своем коде. Проблема у меня в том, что приложение не корректно отображается в режиме x2 на айпаде - все в два раза больше. Кто-нибудь может мне помочь ?

Спасибо,

Мартин


person GuybrushThreepwood    schedule 06.10.2010    source источник


Ответы (2)


Масштабный коэффициент связан с дисплеями Retina на новых iPhone и iPod touch, а не с настройкой масштабирования 2X на iPad. Фактически, свойство UIScreen scale, на которое вы ссылаетесь, не существует в текущей версии ОС iPad 3.2, только в 4.0+. На текущих iPad с бета-версией ОС 4.2 он всегда должен возвращать 1.0.

Проблема, вы испытываете при рисовании Quartz в режиме 2X должны поступать откуда-то еще. Выполняете ли вы какие-либо проверки конкретных устройств для каких-либо элементов в вашем коде?

person Brad Larson    schedule 06.10.2010
comment
На самом деле проблема в том, что свойство масштаба не /определено/ до версии 4.0, но на самом деле оно существует (как недокументированное свойство) в версии 3.2 и делает что-то другое (сообщает о масштабе рисования для приложений, отличных от iPad, в основном 1.0 или 2.0 в зависимости от масштабировать размер приложения). Таким образом, просто проверка существования свойства не помогает OP в этом случае, он должен проверить версию 4.0 или выше. - person Jason Coco; 06.10.2010
comment
Привет, Брэд. Спасибо за Ваш ответ. В моем коде нет конкретных проверок устройства - я просто беру значение, возвращаемое выше, и умножаю на него все значения x и y. Если я изменю приведенное выше, чтобы использовать ответы на содержимоеScaleFactor, он будет нормально работать на iPad (также в режиме x2), но перестанет работать на iPhone 4 - все в два раза меньше :( - person GuybrushThreepwood; 06.10.2010
comment
Джейсон - спасибо! Это имеет смысл - ipad возвращает значение два, следовательно, все в два раза больше. Как я могу это исправить ? - person GuybrushThreepwood; 06.10.2010
comment
@ Джейсон - я не знал об этом. Возможно, мне придется проверить свой код сейчас, чтобы убедиться, что я не делаю неверных предположений в нескольких местах. - person Brad Larson; 06.10.2010
comment
@Ohnomycoco - Нет. Вы можете получить версию, используя float ver = [[[UIDevice currentDevice] systemVersion] floatValue];, а затем сравнить значение ver с любым порогом версии ОС, который у вас есть. - person Brad Larson; 06.10.2010
comment
Спасибо, Брэд, теперь все работает! Нужно ли мне проверять 3.2 в дополнение к 3.2.2? - person GuybrushThreepwood; 06.10.2010
comment
@Ohnomycoco. Если вы проверяете версии ОС iPad с закрытым свойством UIScreen scale, вам следует проверить диапазон 3.2 ‹= ver ‹ 4.0. - person Brad Larson; 06.10.2010

Я не уверен, что это ваша проблема, но вы, кажется, хотите протестировать UIScreen для шкалы выбора. Которого у него никогда не будет. Этот селектор работает только на [UIScreen mainScreen].

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
{
     return [[UIScreen mainScreen] scale];
}
else    
{
     return 1.0;
}

Хотя эта ошибка наводит на мысль, что она всегда будет возвращать масштаб 1.0.

person Wim Haanstra    schedule 06.10.2010
comment
Вместо этого используйте [[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)]. Масштаб существует на iPad с iOS ‹ 4, но он относится к масштабу эмуляции iphone, вы получите значение, которого не ожидаете. - person Danny Parker; 20.06.2012