Главная » iPhone » Пример iPhone: еще один подход к книге с текстом

0

В разд. "Пример: переворачивание страниц" главы J создавалось 10 страниц текста, а для их переворачивания применялась панель навигации. Данный

пример аналогичен, за исключением того, что мы будем использовать пять страниц, представляющих пять различных видов в приложении. Каждая страница будет управляться кнопкой на панели инструментов, которая при нажатии переворачивает страницы до соответствующей. Для выполнения такого перехода используется UiTransitionView.

Чтобы запустить это приложение на вашем iPhone, вам потребуется предоставить два изображения Button.png и ButtonSelected.png, которые копируются в программную папку приложения. Иначе кнопки будут отображаться только с текстом. Для данного примера вы можете сами нарисовать эти графические изображения или же позаимствовать какие-либо из уже имеющихся в iPhone кнопок, например, /Apphcations/YouTube.app/History.png и /Applications/ YouTube.app/HistorySelected.png.

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

$ arm-apple-darwin9-gcc -о MyExample MyExample.m -lobjc ^

-framework CoreFoundation -framework UIKit -framework Foundation

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

…………………………. ;•••"’… |…. 1……. |……….. ОВЁШЯ    шяшшшшин^

Листинг 7.23. Пример панели инструментов (MyExample.h)

#import <CoreFoundation/CoreFoundation.h> #import <UIKit/UIKit.h> #import <UIKit/UiTransitionView.h> #import <UIKit/UITextView.h> #import <UIKit/UIToolbar.h>

#define MAX_PAGES 5

extern NSString *kUIButtonBarButtonAction; extern NSString *kUIButtonBarButtonInfo; extern NSString *kUIButtonBarButtonInfoOffset; extern NSString *kUIButtonBarButtonSelectedInfo; extern NSString *kUIButtonBarButtonStyle; extern NSString *kUIButtonBarButtonTag; extern NSString *kUIButtonBarButtonTarget; extern NSString *kUIButtonBarButtonTitle;

extern NSString *kUIButtonBarButtonTitleVerticalHeight; extern NSString *kUIButtonBarButtonTitleWidth; extern NSString *kUIButtonBarButtonType;

@interface MainView : UlView {

UITransitionView *transView; /* Our transition */ UIToolbar *toolBar; /* Our toolbar */

/* Несколько страниц для перелистывания */ UITextView *textPage[MAX_PAGESj;

)

-   (id)initWithFrame:(CGRect)frame;

-   (void)dealloc;

-   (void) flipTo: (-int)page;

-   (UIToolbar *)createButtonBar;

-   (void)toolBarClicked:(id)sender;

-   (NSArray *)toolBarltemList; @end

@interface MyApp : UiApplication <

UlWindow *window; MainView *mainView;

}

int main(int argc, char **argv)

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

#import "MyExample.h"

NSAutoreleasePool *autoreleasePool = [ [ NSAutoreleasePool alloc ] init

1 ;

int returnCode = UIApplicationMain(argc, argv, @"MyApp", @"MyAppH); [ autoreleasePool release ]; return returnCode;

}

(^implementation MyApp

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

[ UIHardware fullScreenApplicationContentRect ]

)l

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

mainView = [ [ MainView alloc ] initwithFrame: rect ];

[ window setContentView: mainView ]; [ window orderFront: self ]; [ window makeKey: self ]; [ window _setHidden: NO ];

}

@end

@implementation MainView

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

CGRect viewRect; int i;

viewRect = CGRectMake(rect.origin.x, rect.origin.у, rect.size.width, rect.size.height – 48.0);

/* Создаем несколько объектов UiTextview как различные виды */ for(i=0;i<MAX_PAGES;i++) {

textPage[i] = [ [ UiTextview alloc ] initWithFrame: viewRect ]; • [ textPage[i] setText: [ [ NSString alloc ] initWithFormat: ©"Some text for page %d", i+1 ] ];

}

/* Создаем нашу UIToolbar */ toolBar = [ self createButtonBar ]; [ self addSubview: toolBar ] ;

/* Создаем переход, чтобы мы могли легко переключаться

между страницами */ transView = [ ( UITransitionView alloc ] initWithFrame: viewRect ]; [ self addSubview: transView ];

/* Переход к первой странице */ [ self flipTo: 1 ];

}

return self;

}

-   (void)dealloc {

[ self dealloc ];                                                                 .

[ super dealloc ];

}

-   (void)flipTo:(int)page {

[ transView transition: 0 toView: textPage[page-1] ];

}

- "JIToolbar *) createButtonBar { UIToolbar *myButtonBar;

myButtonBar = [ [ UiToolbar alloc ] initlnView: self

withFrame: CGRectMake(0.Of, 411.Of, 320.Of, 49.Of) withltemList: [ self toolBarltemList ] ]; [ myButtonBar setDelegate: self ]; [ myButtonBar setBarStyle: 1 ]; [ myButtonBar setButtonBarTrackingMode: 2 ];

int buttons [5] = { 1, 2, 3, 4, 5 };

[ myButtonBar registerButtonGroup: 0 withButtons: buttons

withCount: 5 ]; [ myButtonBar showButtonGroup: 0 withDuration: 0.0 ]; int tag;

for(tag = 1; tag < 5; tag++) {

[ [ myButtonBar viewWithTag: tag ] setFrame:CGRectMake(2.Of + ((tag – 1) * 63.0), 1.0, 64.0, 48.Of)

];

}

[ myButtonBar showSelectionForButton: 3 ]; return myButtonBar;

}

- (NSArray *)toolBarltemList {

return [ NSArray arrayWithObjects:

[ NSDictionary dictionaryWithObjectsAndKeys: @"toolBarClicked:", kUIButtonBarButtonAction, @"Button.png", kUIButtonBarButtonlnfo, @"ButtonSelected.png", kUIButtonBarButtonSelectedlnfo, [ NSNumber numberWithlnt: 1], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, @"Page 1", kUIButtonBarButtonTitle, @"0", kUIButtonBarButtonType, nil

[ NSDictionary dictionaryWithObjectsAndKeys: @"toolBarClicked:", kUIButtonBarButtonAction, @"Button.png", kUIButtonBarButtonlnfo, @"ButtonSelected.png", kUIButtonBarButtonSelectedlnfo, [ NSNumber numberWithlnt: 2], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, @"Page 2", kUIButtonBarButtonTitle, (?"0", kU I But tonBa rBut tonType, nil

],

[ NSDictionary dictionaryWithObjectsAndKeys: @"toolBarClicked:", kUIButtonBarButtonAction, @"Button.png", kUIButtonBarButtonlnfo, @"ButtonSelected.png", kUIButtonBarButtonSelectedlnfo, [ NSNumber numberWithlnt: 3], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, @"Page 3", kUIButtonBarButtonTitle, @"0", kUIBut tonBa rBut tonType, nil

Ь

[ NSDictionary dictionaryWithObjectsAndKeys: toolBarClicked:", kUIButtonBarButtonAction, @"Button.png", kUIButtonBarButtonlnfo, @"ButtonSelected.png", kUIButtonBarButtonSelectedlnfo, [ NSNumber numberWithlnt: 4], kUIButtonBarButtonTag, self, kUIButtonBarButtonTarget, @"Page 4", kUIButtonBarButtonTitle, @"0", kUIButtonBarButtonType, nil

),

[ NSDictionary dictionaryWithObjectsAndKeys: @"toolBarClicked:", kUIButtonBarButtonAction,

@"Button.png", kUIButtonBarButtonlnfo,

@"ButtonSelected.png", kUIButtonBarButtonSelectedlnfo,

( NSNumber numberWithlnt: 5], kUIButtonBarButtonTag,

self, kUIButtonBarButtonTarget,

@"Page 5", kUIButtonBarButtonTitle,

@"0", kLJ I Bu 11 onBa r But tonType,

nil

L nil

];

}

- (void)toolBarClicked:(id) sender { int button = [ sender tag ]; [ self flipTo: button ];

}

@end

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

Панели инструментов — достаточно сложные штуковины. Вот как они работают:

1.          При порождении приложения создается объект MainView и вызывается его метод initwithFrame. Для создания небольшой области viewRect, учитывающей высоту панели инструментов, используется область отображения. Она служит для создания текстового и переходного видов для верхней части экрана, расположенной над панелью кнопок.

2.           Метод initwithFrame вызывает метод createButtonBar. Он создает объект uiToolbar и назначает ему массив кнопок посредством метода toolBaritemList. Этот массив содержит словарь для каждой отображаемой кнопки, определяющий ее заголовки, теги, изображения и методы, которые должны вызываться при ее нажатии. Поскольку наши кнопки выполняют сопоставимые действия (отличаются только отображаемые страницы), то все они вызывают один и тот же метод toolBarClicked.

3.     Конфигурация каждой кнопки определяется в группе кнопок и регистрируется с панелью инструментов. Затем панели инструментов указывается отобразить эту группу.

4.      Панель инструментов добавляется к основному виду, где она и отображается.

5.     Создаются пять объектов uiTextview. Они играют роли примеров пяти кнопочных видов. initWithFrame вызывает метод flipTo, который отвечает за переворачивание страниц до переданного в него номера страницы.

6.      При нажатии кнопки вызывается метод toolBarClicked. Он захватывает идентификационный тег кнопки и снова вызывает flipTo для перелистывания к новой странице. Обновление панели инструментов является функцией самой панели инструментов и выполняется автоматически.

Для дальнейшего изучения

?         Поэкспериментируйте с размещением панели инструментов. Можно ли поместить ее наверху экрана? Могут ли в одном виде существовать несколько панелей инструментов?

?         Панель инструментов может обрабатывать любое количество кнопок. Измените этот пример и используйте три большие кнопки, а затем попробуйте использовать восемь.

?         Какого рода теги могут быть назначены кнопке? Попробуйте прикрепить различные объекты.

?         Проверьте наличие прототипов UIToolbar.h в папке пакета инструментов. Они могут находиться в папке include вашего пакета инструментов: /toolchain/sys/include/UIKit.

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

По теме:

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