View
1.701
Download
4
Category
Preview:
DESCRIPTION
M.Gerasimenko, PM at SoftTechnics
Citation preview
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
Recommended