Главная » iPhone » Пример iPhone: интересная анимация обрезки

0

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

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

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

framework UIKit -framework CoreFoundation -framework Foundation

В листингах 7.13 и 7.14 содержится соответствующий код.

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

@interface MainView : UlView {

}

-   (id)initWithFrame:(CGRect)rect;

-   (void)dealloc; @end

@interface MyApp : UiApplication {

UlWindow *window; MainView *mainView;

}

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

#import <Foundation/Foundation.h> #import <CoreFoundation/CoreFoundation.h> #import <GraphicsServices/GraphicsServices.h> #import <UIKit/CDStructures.h> #import <UIKit/UIKit.h> #import <UIKit/UlClippedlmageView.h> #import "MyExample.h"

CGPoint origin;

UlClippedlmageView *imageView;

int main(int argc, char **argv) {

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

)

@implementation МуАрр

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

[ UlHardware fullScreenApplicationContentRect ]

];

CGRect rect = [ UlHardware 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 J;

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

selector: ^selector(handleTimer:) userlnfo: nil repeats: YES ] ;

}

-     (void) handleTimer: (NSTimer *) timer

{

if (origin.у > 0)

origin.у —; else

origin.у = 480; if (origin.x > 0)

origin.x —; else

origin.х = 320; [ imageView setOriginAdjustinglmage: origin ];

}

Send

(^implementation MainView

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

origin.x = 80; origin.у = 120;

rect.size.width = 160; rect.size.height = 240; rect.origin.x = 80; rect.origin.у = 120;

imageView = [ [ objc_getClass("UlClippedlmageView") alloc ] initwithFrame: rect

image: [ Ullmage defaultDesktopImage ]

J;

[ imageView setlmageOrigin: origin ]; [ self addSubview: imageView ];

}

return self;

}

-   (void)dealloc {

[ self dealloc ]; [ super dealloc ];

}

@end

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

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

2.     Метод initWithFrame создает объект UlClippedlmageView с использованием области вида посередине экрана и размером отображения 160×240.

3.     Создается объект NSTimer, который каждую 0,1 часть секунды уведомляет метод handleTimer. Эта подпроцедура смещает начало координат изображения на один пиксел вверх и один пиксел влево, заворачивая его при необходимости.

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

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

?   Измените пример uiimage из этого раздела, чтобы случайным образом отображать различные значки приложений в разных местах экрана.

?   Измените пример UlClippedlmageView из этого раздела, чтобы сместить размер области отображения с помощью метода setFrame.

?   Проверьте наличие прототипов Ullmage. h, UHmageView.h, UIAutocorrectlmageView.h и UlClippedlmageView.h в папке include вашего пакета инструментов. Их можно найти в папке/toolchain/sys/include/UIKit.

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

По теме:

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