fun with core graphics

Post on 23-Aug-2014

1.701 Views

Category:

Investor Relations

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

M.Gerasimenko, PM at SoftTechnics

TRANSCRIPT

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

нескучным

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

24.06.2011

Friday, July 1, 11

Содержание

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

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

Friday, July 1, 11

Нестандартные шрифты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

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

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

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

Friday, July 1, 11

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

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

Скринсейвер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

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

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

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

Friday, July 1, 11

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

CALayer: 3D Transform + Animation

UIView transform:

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

CALayer transform:

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

Friday, July 1, 11

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

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

Прокрутка видео- (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

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

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

www.softtechnics.biz

Friday, July 1, 11

top related