Главная » iPhone » Индикаторы прогресса iPhone

0

Индикаторы прогресса (progress indicators) сообщают пользователю о том. что некоторая операция находится в процессе выполнения. Существуют два типа индикаторов, поддерживаемых UIKit:

? uiProgressindicator —данный класс представляет собой вращающуюся анимацию наподобие часов. Такого типа анимацию вы можете видеть, к

примеру, при включении поддержки WiFi или Bluetooth на iPhone, или при загрузке вашего настольного компьютера Мае;

? uiProgressBar — данный класс представляет собой анимацию наподоб- . показаний термометра, позволяя, таким образом, приложению сообща . сколько еще времени осталось до момента завершения операции.

Оба типа индикаторов порождены от базового класса uiview. Это означав что они могут наслаиваться поверх текстовых видов, листов предупрежлс ний, большинства типов табличных ячеек и любых других объектов, поро – даемых от uiview.

UlProgresslndicators: то, что вертится

Класс UlProgresslndicators является простым анимационным классом. д<. статочно небольшим, чтобы прикрепляться к практически любому объек uiview, включая ячейки таблиц и листы предупреждений. Такой индикато: отображает анимацию наподобие часов: метки делений, совершающие обе роты по кругу. Такой индикатор создается с фреймом, определяющим разме: индикатора и координаты относительно вида, к которому он прикрепляется: UlProgressIndicator *progressView = [ UlProgressIndicator alloc ] initwithFrame: CGRectMake(0, 0, 32, 32) ];

Данный индикатор поддерживает два стиля: белый (0) и темно-серый (I). Какой из этих стилей является более подходящим, зависит от типа объекта, к которому прикрепляется индикатор. Стиль устанавливается путем вызов метода setstyle объекта: [ progressView setStyle: 0 ];

Для того чтобы задать количество времени, необходимое для одного полной оборота меток по кругу, используйте метод setAnimationDuration. Это значение задается в секундах и должно соответствовать ожидаемой длине операции. Более быстрые операции могут использовать более быстрые обороты по кругу, а те операции, которые могут занимать более минуты, должны использовать более медленные вращения: [ progressView setAnimationDuration: 1.0 ];

Объект индикатора прогресса может быть добавлен к любому существующему объекту вида. Например, код добавления его к листу предупреждений может выглядеть так:

[ alertSheet addSubview: progressView ];

Чтобы запустить или остановить анимацию, воспользуйтесь методами

startAnimation и stopAnimation: [ progressView startAnimation ]; [ progressView stopAnimation ];

Пример: простой вращающийся индикатор

Данный пример иллюстрирует построение и отображение вида и I Progress indicator. Пример создает объект индикатора и прикрепляет его к основному виду. Затем создается объект NSTimer для прекращения анимации после пяти секунд. Объект NSTimer является частью платформы Foundation и может находиться в документации Cocoa от Apple на Web-узле Apple Developer Connection.

Чтобы скомпилировать этот пример из командной строки, воспользуйтесь пакетом инструментов следующим образом:

$ arm-apple-darwin9-gcc -о MyExample MyExample.m -lobjc -framework UIKit -framework Foundation

Листинги 7.5 и 7.6 содержат соответствующий код.

#import <UIKit/UIKit.h> #import <UIKit/UIProgressIndicator.h>

UlProgressIndicator *progressView;

@interface MainView : UlView {

}

-   (id)initWithFrame:(CGRect)frame;

-   (void)dealloc; @end

@interface MyApp : UiApplication

{

UlWindow *window;

MainView *mainView;

}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification; @end

#import "MyExample.h"

int main(int argc, char **argv)

{

return UIApplicationMain(argc, argv, @"MyApp", @"MyApp");

}

(^implementation MyApp

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification ( window = [ [ UlWindow alloc J initWithContentRect: ( UIHardware fullScreenApplicationContentRect ]

];

CGRect rect = [ UIHardware fullScreenApplicationContentRect ]; rect.origin.x = rect.origin.у = O.Of;

mainView = [ [ MainView alloc ] initWithFrame: rect ]; t window setContentView: mainView ]; [ window orderFront: self ]; [ window makeKey: self ]; Г window _setHidden: NO ];

NSTimer *timer = [ NSTimer scheduledTimerWithTimelnterval: 5.0 target: self

selector: @selector(handleTimer:) userlnfo: nil repeats: NO ];

-    (void) handleTimer: (NSTimer *) timer 1

[ progressView stopAnimation ];

}

@end

@implementation MainView

-    (id)initwithFrame:(CGRect)rect {

self = [ super initwithFrame: rect ]; if (nil != self) {

CGRect progressRect = rect; progressRect.size.width = 32; progressRect.size.height = 32;

progressView = [ [ UlProgressIndicator alloc ]

initwithFrame: progressRect ]; [ self addSubview: progressView ]; [ progressView setAnimationDuration: 1.0 ]; [ progressView startAnimation ];

}

return self;

}

-    (void)dealloc

{

[ self dealloc ]; [ super dealloc ];

0end

Как это работает

Вот как работает пример индикатора прогресса:

1. При порождении приложения создается объект MainView и вызывается его метод initwithFrame.

2.     Метод initWithFrame создает объект UI Progress Indicator и прикрепляет его к основному виду. Анимация устанавливается на использование оборотов за одну секунду, а затем анимация стартует.

3.     Создается объект NSTimer с триггером в 5 секунд. Как только это время истекает, получает уведомление метод handleTimer, который отключает анимацию, что приводит к исчезновению индикатора.

UIProgressBar. когда вращающиеся индикаторы не подходят

Объект UIProgressBar является близким родственником объект) ui Progress indicator. Вместо вращающейся анимации класс строки прогресса рисует индикатор наподобие термометра и предоставляет интерфейс для определения у него крайнего уровня в соответствии со временем выполнения операции вашим приложением. Преимущество использования строки прогресса состоит в том, что он может более-менее точно отражать количество действительно выполненной приложением работы.

Чтобы создать строку прогресса, метод инициализации класса включает фрейм, определяющий размер строки и начало координат области отображения:

UIProgressBar progressView = [ [ UIProgressBar alloc ] initWithFrame: CGRectMake(0, 0, 320, 32) ];

Данный индикатор поддерживает два стиля: белый (0) и темно-серый (I). Стиль может быть задан с помощью метода set style в соответствии с цветом объекта, к которому прикрепляется индикатор:

[ progressView setStyle: 0 ];

Чтобы отобразить строку прогресса, добавьте ее к существующему объекту uiview. Например, код прикрепления ее к листу предупреждений может выглядеть следующим образом:

[ alertSheet addSubview: progressView ];

После того как строка прогресса отобразится на экране, ее прогресс может быть установлен приложением, чтобы показать, где именно оно находится в процессе выполнения операции. После установки уровня делается вызов метода updateifNecessary строки, чтобы обеспечить продвижение строки прогресса по экрану. Тип значения прогресса— double (число с плавающей запятой двойной точности), а само значение находится в диапазоне между 0,0 и 1,0:

[ progressView setProgress: 0.5 ]; [ progressView updateIfNecessary ];

Источник: Здзиарски Дж. iPhone. Разработка приложений с открытым кодом: Пер„с англ. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2009. — 368 е.: ил.

По теме:

  • Комментарии