2011-12-25 3 views
2

Когда приложение запустилось, я хочу, чтобы заморозить пользовательский интерфейс в течение секунды или около того, чтобы получить сервис предварительного условия (например, служба определения местоположения). Есть ли способ сделать это?Как заморозить пользовательский интерфейс при запуске?

ответ

3

Просто поместите прозрачный UIView поверх всего экрана и перехватите все события касания.

Для перехвата событий прикосновения, просто подкласс UIView и переопределить

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

Обычно внутри этого метода вы бы назвать супер на него, но в этом случае вы бы просто вернуться ДА:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    return YES; 
} 

Если вы хотите по-настоящему представить, что вы можете добавить синтезированное свойство в подкласс UIView, называемый shouldInterceptTouches, и сделать что-то вроде этого:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    return shouldInterceptTouches ? YES : [super pointInside:point withEvent:event]; 
} 

Также не забудьте убедиться, что ваш прозрачный вид находится над другими видами.

Боковое примечание: Руководства по интерфейсу Apple от Apple не нравятся, когда вы делаете такие вещи. Пользователь будет смущен и разочарован, если ваше приложение не реагирует, и это может заставить их выйти из приложения, если они считают его замороженным. Вам лучше отобразить какой-то UIActivityIndicatorView и отключить только абсолютно необходимые кнопки. Apple любит это, когда вы делаете подобные вещи в фоновом режиме и позволяете пользователю делать другие вещи, на случай, если это займет какое-то время или не удастся.

+0

это кажется очень хорошим решением. как перехватить все события касания - исключил быTouch (YES) и setUserInteractionEnabled (NO) достаточно хорошо? Я использовал две настройки, но все же я вижу, что представление ниже движется с помощью прокрутки на прозрачном представлении. – tom

+0

Я отредактировал сообщение, чтобы добавить более подробную информацию. –

+0

Спасибо @Jack! Теперь вопрос в том, как убедиться, что мой взгляд выше других взглядов? Не будет ли addSubView гарантировать это? – tom

-1

Вы можете использовать Modal View или отключить все компоненты до тех пор, пока служба определения местоположения не будет завершена.

Это ответственность приложения, а не ОС или фреймворков.

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