Transcript
Page 1: Fun with core graphics

Fun with CoreGraphicsкак сделать презентационное приложение

нескучным

Герасименко МихаилProject Manager, Team Lead

24.06.2011

Friday, July 1, 11

Page 2: Fun with core graphics

Содержание

1. Нестандартные шрифты2. Переключение локализации в приложении3. Скринсейвер4. CALayer: Glow эффект5. CALayer: 3D Transform + Animation6. CAVideoLayer7. Прокрутка видео

От простого к сложному

Friday, July 1, 11

Page 3: Fun with core graphics

Нестандартные шрифты1. Добавляем файл .ttf в проект.2. Добавляем в Info.plist ключ UIAppFonts (NSArray), содержащий названия шрифтов:

<key>UIAppFonts</key><array>! ! <string>c063002t.ttf</string></array>

3. Используем в UIFont (UILabel, UIButton, etc):[UIFont fontWithName:@"CorpoSLig" size:Size];

В UIWebView:font-family: CorpoSLig, Arial, sans-serif;

В CoreText:NSData *data = [[NSData alloc] initWithContentsOfFile:fontPath];CGDataProviderRef fontProvider = CGDataProviderCreateWithCFData(data);[data release];!CGFontRef cgFont = CGFontCreateWithDataProvider(fontProvider);

!

Friday, July 1, 11

Page 4: Fun with core graphics

Переключение локализации в приложении

Бандл (Bundle) = директория (Folder)

Типы бандлов:1. Бандл приложения.2. Бандл ресурсов.3. Бандл файла проекта Xcode.4. Бандл локализации (lproj).5. ...

Friday, July 1, 11

Page 5: Fun with core graphics

Переключение локализации в приложении

NSString *path = [[NSBundle mainBundle] pathForResource:current ofType:@"lproj"];

self.bundle = [[NSBundle bundleWithPath:path] retain];

...

- (NSString *)localizedStringForKey:(NSString *)key comment:(NSString*)comment {! return [self.bundle localizedStringForKey:key value:nil table:nil];}

...

#define MYLocalizedString(key, commenta) \! [[MYLocalization sharedLocalization] localizedStringForKey:(key) comment:(commenta)]

...

genstrings -s MYLocalizedString ...

Friday, July 1, 11

Page 6: Fun with core graphics

Скринсейвер1. Subclass UIWindow.

@implementation CWindow

#if kCLScreensaverEnabled- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {

![NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showScreenSaver) object:nil];

![self performSelector:@selector(showScreenSaver) withObject:nil afterDelay:kCLScreensaverDelay];!!return [super pointInside:point withEvent:event];}

- (void)showScreenSaver {![AppDelegate() setScreensaverShowed:YES];}#endif

@end

2. Установить в MainWindow.xib наш класс для window.

Friday, July 1, 11

Page 7: Fun with core graphics

CALayer1. Любая UIView содержит один либо несколько

CALayer, которые отображают ее собержимое.2. Общие черты: Иерархия CALayer’ов ≈ иерархия

UIView, занимаются отображением графики.3. Отличия: CALayer не занимается обработкой действий пользователя.

Friday, July 1, 11

Page 8: Fun with core graphics

Glow-эффект

UIView* myView;

CALayer* Layer = myView.layer;

Layer.shadowColor = MegatronColor().CGColor;Layer.masksToBounds = false;Layer.shadowOpacity = 1.0f;Layer.shadowRadius = Intensity;Layer.shouldRasterize = true;Layer.shadowOffset = CGSizeMake(0, 0);

Используем возможность устанавливать тень для CALayer:

Friday, July 1, 11

Page 9: Fun with core graphics

CALayer: 3D Transform + Animation

UIView transform:

Аффинное преобразование, двумерное. Можно анимировать.

CALayer transform:

Аффинное преобразование, но уже трехмерное. Так же есть возможность анимировать.

Friday, July 1, 11

Page 10: Fun with core graphics

Transform+Animate: UIView *superView = [[UIApplication sharedApplication] keyWindow];

!! [UIView beginAnimations:nil context:NULL];! [UIView setAnimationDuration:0.7];! [UIView setAnimationDelegate:self];! [UIView setAnimationDidStopSelector:@selector(firstAnimationDidStop:finished:context:)];! [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];!! CALayer *layer = superView.layer;! CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;! rotationAndPerspectiveTransform.m34 = 1.0 / -5000;

rotationAndPerspectiveTransform =! ! CATransform3DRotate(rotationAndPerspectiveTransform, 90.0f * M_PI /! ! ! ! ! ! ! 180.0f, 1.0f, 0.0f, 0.0f);! !! rotationAndPerspectiveTransform =! CATransform3DScale(rotationAndPerspectiveTransform, 0.92, 0.92, 1);! layer.transform = rotationAndPerspectiveTransform;! [UIView commitAnimations];

Friday, July 1, 11

Page 11: Fun with core graphics

CAVideoLayer@interface CVideoView : UIView@property (nonatomic, retain) AVPlayer* Player;@end

@implementation CVideoView@synthesize Player;

-(void) dealloc { self.Player = nil; [super dealloc];}

+(Class) layerClass { return [AVPlayerLayer class];}

-(AVPlayer*) Player { return [(AVPlayerLayer*)[self layer] player];}

-(void) setPlayer:(AVPlayer*)player{ [(AVPlayerLayer*)[self layer] setPlayer:player];}@end

Friday, July 1, 11

Page 12: Fun with core graphics

Прокрутка видео- (void)stepByFloatCount:(float)count {

! self.step+= count;!! float stepRound = roundf(self.step);!! if (fabs(stepRound) >= 1.0) {! ! [self stepByCount:stepRound];! ! self.steps+= stepRound;! ! self.step = self.step - stepRound;

}}

...

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

! CGPoint endPoint = [[touches anyObject] locationInView:self.view];CGPoint dp = CGPointMake(self.startPoint.x - endPoint.x,

! ! ! ! ! ! ! ! self.startPoint.y - endPoint.y);

[self.currentItem stepByFloatCount:kCLVideoDefaultStep * dp.y];!}

Friday, July 1, 11

Page 13: Fun with core graphics

Спасибо за внимание!

ул. Михайловская 25Одесса 65005, Украина

www.softtechnics.biz

Friday, July 1, 11


Top Related