Как отобразить наложение индикатора прогресса / HUD на iPhone? - PullRequest
23 голосов
/ 27 февраля 2009

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

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

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

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

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

Мне не интересно слышать о частных API .

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

Ответы [ 5 ]

15 голосов
/ 16 сентября 2011

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

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

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

enter image description here

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

[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut];

и все!

14 голосов
/ 27 февраля 2009

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

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

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

9 голосов
/ 22 января 2013

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

Пример

[SVProgressHUD show];
[SVProgressHUD dismiss];

SVProgressHUD Examples MBProgressHUD кажется сейчас более популярным (если мы опираемся на звезды github)

1 голос
/ 11 марта 2009

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

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

[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.

0 голосов
/ 13 ноября 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...