Подтвердить что ты не робот

Как отобразить оверлей индикатора прогресса /HUD на iPhone?

Я хочу отобразить индикатор прогресса в полупрозрачном поле, которое плавает над табличным представлением. Другими словами, когда содержимое таблицы загружается, я хочу, чтобы над ним появлялась надпись "Updating".

Я видел это в нескольких приложениях в магазине, особенно в Facebook (когда вы встряхиваете, чтобы перезагрузить) и Darkslide.

Мой первый импульс - создать полупрозрачный UIView, поместить в него UILabel и UIProgressIndicatorView и добавить его в иерархию представлений... но где? UIView не может перекрывать своих братьев и сестер, поэтому я не могу сделать это подвид окна. Я также не могу сделать его подчиненным для таблицы, потому что тогда он будет прокручивать вверх и вниз с содержимым таблицы.

Я думал о создании нового UIWindow, но в документации в основном говорится: "Нет".

Я знаю, что CALayers могут перекрывать друг друга, так что это будет вариант, но я не могу поставить индикатор прогресса внутри CALayer, не так ли? Должен ли я показывать свой индикатор прогресса, который оживляет CALayer вместо UIView?

Мне не интересно узнать о частных API.

Изменить: Вопрос основывался на ошибочном предположении. NSViews (в Mac OS X) может не перекрываться, но UIViews на iPhone может.

4b9b3361

Ответ 1

Вы можете определенно перекрывать представления. Просто добавьте прозрачный оверлей в качестве подсмотра в tableView.

Из документации UIView:

Объекты UIView размещаются внутри объекта UIWindow во вложенной иерархии подзонов. Родительские объекты в иерархии представлений называются супервиками, а дети называются subviews. Объект вида претендует на прямоугольную область своего охватывающего супервизора, отвечает за весь чертеж в пределах этого региона и имеет право получать события, происходящие в нем. Представления Sibling могут перекрываться без каких-либо проблем, что позволяет создавать сложные представления.

Ответ 2

Я только что опубликовал мою версию HUD: https://github.com/y0n3l/LGViewHUD

вы можете получить этот результат очень легко:

#import "LGViewHUD.h"
.... 
LGViewHUD* hud = [LGViewHUD defaultHUD];
hud.activityIndicatorOn=YES;
[email protected]"The longer....";
[email protected]"The better !";
[hud showInView:self.view];

enter image description here

Как только задача завершена, просто вызовите

[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut];

и что это!

Ответ 3

Также есть довольно известный MBProgressHUD и SVProgressHUD
Они такие же, как @yonel HUD

Пример

[SVProgressHUD show];
[SVProgressHUD dismiss];

SVProgressHUD ExamplesMBProgressHUD кажется теперь более популярным (если мы основываемся на звездах github)

Ответ 4

Любой объект, который живет в вашем MainWindow.xib, может получить доступ к окну приложения через розетку. Делегат приложения в стандартных проектах уже имеет его, но вы, вероятно, захотите добавить выход к контроллеру своего вида, который должен показывать оверлей прогресса.

Так как в UIKit UIWindow является UIView (в отличие от NSWindow против NSView в Cocoa), вы можете просто добавить представление прогресса в качестве подвид окна:

[window addSubview:progressView];

progressView будет охватывать весь пользовательский интерфейс приложения.

В этом примере используется техника для постепенного исчезновения изображения всплывающего окна Default.png:

http://michael.burford.net/2008/11/fading-defaultpng-when-iphone-app.html


В связи с недавним редактированием, с MacOS X 10.5 перекрытие Leopard NSView является детерминированным (они всегда могут перекрываться, вы просто получили неопределенные результаты), хотя он имеет различное упорядочение в обратном порядке в зависимости от того, содержит ли отображаемый вид поддерживается слоем или нет. Скорее всего, это побочный эффект интеграции CALayers в систему просмотра OS X.

Ответ 5

Ответ: Документы яблок довольно удивительны. http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

В настоящее время я перебираю прозрачные виды (по крайней мере, на обратной стороне салфетки в этот момент). Вы можете использовать их, чтобы удерживать кнопки меню, перемещать их в 3D-пространстве, просто гайки.

Я имею в виду, это религиозный тракт или что? Удивительные вещи от парней в NEXT:

Объекты UIView размещаются внутри объекта UIWindow во вложенной иерархии подзонов. Родительские объекты в иерархии представлений называются супервиками, а дети называются subviews. Объект вида претендует на прямоугольную область своего охватывающего супервизора, отвечает за весь чертеж в пределах этого региона и имеет право получать события, происходящие в нем. Представления Sibling могут перекрываться без каких-либо проблем, что позволяет создавать сложные представления.