Fun with CoreGraphics                       как сделать презентационное приложение                                       н...
Содержание                              От простого к сложному                     1. Нестандартные шрифты                ...
Нестандартные шрифты           1. Добавляем файл .ttf в проект.           2. Добавляем в Info.plist ключ UIAppFonts (NSArr...
Переключение локализации в                            приложении                       Бандл (Bundle) = директория (Folder...
Переключение локализации в                            приложении           NSString *path = [[NSBundle mainBundle] pathFor...
Скринсейвер           1. Subclass UIWindow.                     @implementation CWindow                     #if kCLScreens...
CALayer                     1. Любая UIView содержит один либо несколько                        CALayer, которые отображаю...
Glow-эффект              Используем возможность устанавливать тень для                               CALayer:            U...
CALayer: 3D Transform +                               Animation                     UIView transform:                     ...
Transform+Animate:          UIView *superView = [[UIApplication sharedApplication] keyWindow]; ! !       [UIView     begin...
CAVideoLayer             @interface CVideoView : UIView             @property (nonatomic, retain) AVPlayer* Player;       ...
Прокрутка видео             - (void)stepByFloatCount:(float)count {             !       self.step+= count;             !  ...
Спасибо за внимание!                                     ул. Михайловская 25                                     Одесса 65...
Upcoming SlideShare
Loading in …5
×

Fun with core graphics

1,753 views

Published on

M.Gerasimenko, PM at SoftTechnics

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,753
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
12
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Fun with core graphics

  1. 1. Fun with CoreGraphics как сделать презентационное приложение нескучным Герасименко Михаил Project Manager, Team Lead 24.06.2011Friday, July 1, 11
  2. 2. Содержание От простого к сложному 1. Нестандартные шрифты 2. Переключение локализации в приложении 3. Скринсейвер 4. CALayer: Glow эффект 5. CALayer: 3D Transform + Animation 6. CAVideoLayer 7. Прокрутка видеоFriday, July 1, 11
  3. 3. Нестандартные шрифты 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
  4. 4. Переключение локализации в приложении Бандл (Bundle) = директория (Folder) Типы бандлов: 1. Бандл приложения. 2. Бандл ресурсов. 3. Бандл файла проекта Xcode. 4. Бандл локализации (lproj). 5. ...Friday, July 1, 11
  5. 5. Переключение локализации в приложении 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
  6. 6. Скринсейвер 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
  7. 7. CALayer 1. Любая UIView содержит один либо несколько CALayer, которые отображают ее собержимое. 2. Общие черты: Иерархия CALayer’ов ≈ иерархия UIView, занимаются отображением графики. 3. Отличия: CALayer не занимается обработкой действий пользователя.Friday, July 1, 11
  8. 8. Glow-эффект Используем возможность устанавливать тень для CALayer: 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);Friday, July 1, 11
  9. 9. CALayer: 3D Transform + Animation UIView transform: Аффинное преобразование, двумерное. Можно анимировать. CALayer transform: Аффинное преобразование, но уже трехмерное. Так же есть возможность анимировать.Friday, July 1, 11
  10. 10. 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
  11. 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]; } @endFriday, July 1, 11
  12. 12. Прокрутка видео - (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
  13. 13. Спасибо за внимание! ул. Михайловская 25 Одесса 65005, Украина www.softtechnics.bizFriday, July 1, 11

×