Предупреждение JEFF LAMARCHE с подсказкой находится за пределами экрана в iOS4

Кто-нибудь знает, почему представление предупреждений Джеффа Ламарша с классом подсказок создает предупреждение, которое в основном находится за пределами экрана при использовании в iOS4? Весь код загружаемого проекта можно найти здесь:

http://iphonedevelopment.blogspot.com/2009/02/alert-view-with-prompt.html

Его типовой проект из коробки в симуляторе 3.2 (работающем как приложение для iphone на ipad) отображается правильно по центру. Но в симуляторе 4.0, как на устройствах iPhone, так и на устройствах iPhone 4, он отображается очень высоко на экране и в основном за пределами экрана. Я еще не тестировал его на других ОС или на реальном устройстве.

Изменив строку:

CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 130.0); 

to:

CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 0.0); 

он правильно центрируется на экране в iOS4, но затем слишком низко на 3.2. Конечно, я мог бы настроить значение в зависимости от того, какое устройство или ОС используется, но я бы предпочел знать, ПОЧЕМУ оно выключено.


person badweasel    schedule 14.07.2010    source источник


Ответы (3)


Я размышляю, но перевод Affine в первую очередь выглядит как хак. . . предположительно UIAlertView от Apple переводил материал на -130 до IOS4.0, поэтому Ламарш вставил свой перевод, чтобы противодействовать этому.

Затем в 4.0, если предположить [и это спекулятивно], что Apple исправила свой класс, код Ламарша больше не работает.

person William Jockusch    schedule 14.07.2010
comment
Я проверяю ваш ответ как правильный, хотя я не уверен, правильный он или нет. Могу предположить, что да. Но суть в том, что мне нужен способ сделать это. Моя проблема в том, что моя игра - openGL, и мне нужен способ обработки предупреждений и модальных окон типа поверх glview моей игры. Совет о том, как это сделать, приветствуется. - person badweasel; 15.07.2010

FWIW, я только что обменялся этим в Твиттере:

Me:

Только что наткнулся на AlertPrompt от @jeff_lamarche [ссылка удалена], выглядит отлично, но есть ли лучший вариант после этого?

Джефф: http://twitter.com/jeff_lamarche/status/21449214776

Не используйте этот AlertPrompt — он использует частный API. Лучше всего спроектировать его во внеэкранном UIView, а затем использовать Core Animation для отображения.

person nomad00    schedule 18.08.2010

Вы можете сделать тест версии:

    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0) {
        CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 130.0); 
        [self setTransform:translate];
    }

Ваше здоровье

person Marcos Issler    schedule 03.02.2011
comment
Я уже делаю тест версии и тест устройства. Вопрос был в том, ПОЧЕМУ, а не в том, как узнать, собирается ли он это сделать. Как я сказал в своем вопросе, я мог настроить значение в зависимости от устройства... что я и сделал. Я надеялся, что есть какое-то другое объяснение. - person badweasel; 05.02.2011