SlideShare uma empresa Scribd logo
1 de 43
CORE ANIMATION
                             Animated UIs on the iPhone




Monday, October 12, 2009
WHY ANIMATE?


               Animation brings ‘real world’ feel to user interfaces

               Provides clues to what is happening in the UI

               Makes the UI feel more responsive




Monday, October 12, 2009
PLEAS DON’T




               Make your UI Animated just for the sake of animation




Monday, October 12, 2009
WHAT IS IT ANYWAY?




               Compositing




Monday, October 12, 2009
WHAT IS IT ANYWAY?




               Animation




Monday, October 12, 2009
WHAT IS IT ANYWAY?




               Animation




Monday, October 12, 2009
WHAT IS IT ANYWAY?




               Backend for all animation on the iPhone and Mac




Monday, October 12, 2009
BACKEND




               Simple Stuff is very Simple




Monday, October 12, 2009
BACKEND




               Complex Stuff is Possible




                                           image from @pagedooley



Monday, October 12, 2009
SIMPLE STUFF FIRST
    - (void)touchesEnded:(NSSet *)touches         Begin Animations
               withEvent:(UIEvent *)event {
      [UIView beginAnimations:@"imageMove" context:NULL];
      CGPoint location = [[touches anyObject]
                               locationInView:self.view];
      self.imageView.center = location;
      [UIView commitAnimations];
    }




Monday, October 12, 2009
SIMPLE STUFF FIRST
    - (void)touchesEnded:(NSSet *)touches
               withEvent:(UIEvent *)event {
      [UIView beginAnimations:@"imageMove" context:NULL];
      CGPoint location = [[touches anyObject]
                               locationInView:self.view];
      self.imageView.center = location;
      [UIView commitAnimations];                   Calculate   and set
    }
                                                   the new location




Monday, October 12, 2009
SIMPLE STUFF FIRST
    - (void)touchesEnded:(NSSet *)touches
               withEvent:(UIEvent *)event {
      [UIView beginAnimations:@"imageMove" context:NULL];
      CGPoint location = [[touches anyObject]
                               locationInView:self.view];
      self.imageView.center = location;
      [UIView commitAnimations];
    }
                                 Start the animations




Monday, October 12, 2009
REAL WORLD USAGE



               Animate the Search bar
               into view




Monday, October 12, 2009
ANIMATE IN

   - (IBAction)search {
     if(nil == self.searchBar.superview) {
       self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f);
       [self.view addSubview:self.searchBar];
     }
     [UIView beginAnimations:@"SearchBarMoveIn" context:NULL];
     [UIView setAnimationDuration:0.5f];
     CGRect frame = self.searchBar.frame;
     frame.origin.y = 0.0f;
     self.searchBar.frame = frame;
     [self.searchBar becomeFirstResponder];
     [UIView commitAnimations];
   }




Monday, October 12, 2009
ANIMATE IN

   - (IBAction)search {
     if(nil == self.searchBar.superview) {
       self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f);
       [self.view addSubview:self.searchBar];
     }
     [UIView beginAnimations:@"SearchBarMoveIn" context:NULL];
     [UIView setAnimationDuration:0.5f];
     CGRect frame = self.searchBar.frame;
     frame.origin.y = 0.0f;
     self.searchBar.frame = frame;
     [self.searchBar becomeFirstResponder];
     [UIView commitAnimations];
   }




Monday, October 12, 2009
ANIMATE IN

   - (IBAction)search {
     if(nil == self.searchBar.superview) {
       self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f);
       [self.view addSubview:self.searchBar];
     }
     [UIView beginAnimations:@"SearchBarMoveIn" context:NULL];
     [UIView setAnimationDuration:0.5f];
     CGRect frame = self.searchBar.frame;
     frame.origin.y = 0.0f;
     self.searchBar.frame = frame;
     [self.searchBar becomeFirstResponder];
     [UIView commitAnimations];
   }




Monday, October 12, 2009
ANIMATE IN

   - (IBAction)search {
     if(nil == self.searchBar.superview) {
       self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f);
       [self.view addSubview:self.searchBar];
     }
     [UIView beginAnimations:@"SearchBarMoveIn" context:NULL];
     [UIView setAnimationDuration:0.5f];
     CGRect frame = self.searchBar.frame;
     frame.origin.y = 0.0f;
     self.searchBar.frame = frame;
     [self.searchBar becomeFirstResponder];
     [UIView commitAnimations];
   }




Monday, October 12, 2009
ANIMATE IN

   - (IBAction)search {
     if(nil == self.searchBar.superview) {
       self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f);
       [self.view addSubview:self.searchBar];
     }
     [UIView beginAnimations:@"SearchBarMoveIn" context:NULL];
     [UIView setAnimationDuration:0.5f];
     CGRect frame = self.searchBar.frame;
     frame.origin.y = 0.0f;
     self.searchBar.frame = frame;
     [self.searchBar becomeFirstResponder];
     [UIView commitAnimations];
   }




Monday, October 12, 2009
ANIMATE IN

   - (IBAction)search {
     if(nil == self.searchBar.superview) {
       self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f);
       [self.view addSubview:self.searchBar];
     }
     [UIView beginAnimations:@"SearchBarMoveIn" context:NULL];
     [UIView setAnimationDuration:0.5f];
     CGRect frame = self.searchBar.frame;
     frame.origin.y = 0.0f;
     self.searchBar.frame = frame;
     [self.searchBar becomeFirstResponder];
     [UIView commitAnimations];
   }




Monday, October 12, 2009
ANIMATE OUT


    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
      [self.searchBar resignFirstResponder];
      [UIView beginAnimations:@"SearchBarMoveOut" context:nil];
      [UIView setAnimationDuration:0.5f];
      CGRect frame = self.searchBar.frame;
      frame.origin.y = -CGRectGetHeight(frame);
      self.searchBar.frame = frame;
      [UIView commitAnimations];
    }




Monday, October 12, 2009
ANIMATE OUT


    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
      [self.searchBar resignFirstResponder];
      [UIView beginAnimations:@"SearchBarMoveOut" context:nil];
      [UIView setAnimationDuration:0.5f];
      CGRect frame = self.searchBar.frame;
      frame.origin.y = -CGRectGetHeight(frame);
      self.searchBar.frame = frame;
      [UIView commitAnimations];
    }




Monday, October 12, 2009
ANIMATE OUT


    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
      [self.searchBar resignFirstResponder];
      [UIView beginAnimations:@"SearchBarMoveOut" context:nil];
      [UIView setAnimationDuration:0.5f];
      CGRect frame = self.searchBar.frame;
      frame.origin.y = -CGRectGetHeight(frame);
      self.searchBar.frame = frame;
      [UIView commitAnimations];
    }




Monday, October 12, 2009
ANIMATE OUT


    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
      [self.searchBar resignFirstResponder];
      [UIView beginAnimations:@"SearchBarMoveOut" context:nil];
      [UIView setAnimationDuration:0.5f];
      CGRect frame = self.searchBar.frame;
      frame.origin.y = -CGRectGetHeight(frame);
      self.searchBar.frame = frame;
      [UIView commitAnimations];
    }




Monday, October 12, 2009
DRAWING ATTENTION




               Making elements jump out




Monday, October 12, 2009
SEARCHING



      - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
        [self.gridView animateImagesRelatedTo:searchBar.text];
      }




Monday, October 12, 2009
ANIMATING IMAGES


     - (void)animateImagesRelatedTo:(NSString *)term {
       NSUInteger count = random() % self.gridLayer.images.count;
       if(count < 1) {
         count = 1;
       }
       for(NSUInteger i = 0;i < count;i++) {
         NSUInteger index = random() % self.gridLayer.sublayers.count;
         CALayer *layer = [[self.gridLayer sublayers] objectAtIndex:index];
         [layer addAnimation:[self foundAnimation] forKey:@"emphasise"];
       }
     }




Monday, October 12, 2009
FOUND ANIMATION
  - (CAAnimationGroup *)foundAnimation {
    CAAnimationGroup *foundAnimation = [CAAnimationGroup animation];
    CATransform3D zoomTransform =
         CATransform3DMakeScale(0.75f, 0.75f, 1.0f);

       CABasicAnimation *zoomOutAnimation = [self
            zoomOutAnimation:zoomTransform];
       CAKeyframeAnimation *flipAnimation = [self
            flipAnimation:zoomTransform];
       CABasicAnimation *zoomInAnimation = [self
            zoomInAnimation:zoomTransform];

       foundAnimation.animations = [NSArray
                 arrayWithObjects:zoomOutAnimation,
                                  flipAnimation, zoomInAnimation, nil];
       foundAnimation.duration = 2.0f;

       return foundAnimation;
  }


Monday, October 12, 2009
FOUND ANIMATION
  - (CAAnimationGroup *)foundAnimation {
    CAAnimationGroup *foundAnimation = [CAAnimationGroup animation];
    CATransform3D zoomTransform =
         CATransform3DMakeScale(0.75f, 0.75f, 1.0f);

       CABasicAnimation *zoomOutAnimation = [self
            zoomOutAnimation:zoomTransform];
       CAKeyframeAnimation *flipAnimation = [self
            flipAnimation:zoomTransform];
       CABasicAnimation *zoomInAnimation = [self
            zoomInAnimation:zoomTransform];

       foundAnimation.animations = [NSArray
                 arrayWithObjects:zoomOutAnimation,
                                  flipAnimation, zoomInAnimation, nil];
       foundAnimation.duration = 2.0f;

       return foundAnimation;
  }


Monday, October 12, 2009
FOUND ANIMATION
  - (CAAnimationGroup *)foundAnimation {
    CAAnimationGroup *foundAnimation = [CAAnimationGroup animation];
    CATransform3D zoomTransform =
         CATransform3DMakeScale(0.75f, 0.75f, 1.0f);

       CABasicAnimation *zoomOutAnimation = [self
            zoomOutAnimation:zoomTransform];
       CAKeyframeAnimation *flipAnimation = [self
            flipAnimation:zoomTransform];
       CABasicAnimation *zoomInAnimation = [self
            zoomInAnimation:zoomTransform];

       foundAnimation.animations = [NSArray
                 arrayWithObjects:zoomOutAnimation,
                                  flipAnimation, zoomInAnimation, nil];
       foundAnimation.duration = 2.0f;

       return foundAnimation;
  }


Monday, October 12, 2009
FOUND ANIMATION
  - (CAAnimationGroup *)foundAnimation {
    CAAnimationGroup *foundAnimation = [CAAnimationGroup animation];
    CATransform3D zoomTransform =
         CATransform3DMakeScale(0.75f, 0.75f, 1.0f);

       CABasicAnimation *zoomOutAnimation = [self
            zoomOutAnimation:zoomTransform];
       CAKeyframeAnimation *flipAnimation = [self
            flipAnimation:zoomTransform];
       CABasicAnimation *zoomInAnimation = [self
            zoomInAnimation:zoomTransform];

       foundAnimation.animations = [NSArray
                 arrayWithObjects:zoomOutAnimation,
                                  flipAnimation, zoomInAnimation, nil];
       foundAnimation.duration = 2.0f;

       return foundAnimation;
  }


Monday, October 12, 2009
3 PART ANIMATION




Monday, October 12, 2009
3 PART ANIMATION




Monday, October 12, 2009
ZOOM OUT ANIMATION


  - (CABasicAnimation *)zoomOutAnimation:(CATransform3D)zoomTransform {
    CABasicAnimation *zoomOutAnimation =
            [CABasicAnimation animationWithKeyPath:@"transform"];
    zoomOutAnimation.fromValue =
            [NSValue valueWithCATransform3D:CATransform3DIdentity];
    zoomOutAnimation.toValue =
            [NSValue valueWithCATransform3D:zoomTransform];
    zoomOutAnimation.duration = 0.5f;
    return zoomOutAnimation;
  }




Monday, October 12, 2009
ZOOM OUT ANIMATION


  - (CABasicAnimation *)zoomOutAnimation:(CATransform3D)zoomTransform {
    CABasicAnimation *zoomOutAnimation =
            [CABasicAnimation animationWithKeyPath:@"transform"];
    zoomOutAnimation.fromValue =
            [NSValue valueWithCATransform3D:CATransform3DIdentity];
    zoomOutAnimation.toValue =
            [NSValue valueWithCATransform3D:zoomTransform];
    zoomOutAnimation.duration = 0.5f;
    return zoomOutAnimation;
  }




Monday, October 12, 2009
ZOOM OUT ANIMATION


  - (CABasicAnimation *)zoomOutAnimation:(CATransform3D)zoomTransform {
    CABasicAnimation *zoomOutAnimation =
            [CABasicAnimation animationWithKeyPath:@"transform"];
    zoomOutAnimation.fromValue =
            [NSValue valueWithCATransform3D:CATransform3DIdentity];
    zoomOutAnimation.toValue =
            [NSValue valueWithCATransform3D:zoomTransform];
    zoomOutAnimation.duration = 0.5f;
    return zoomOutAnimation;
  }




Monday, October 12, 2009
FLIP ANIMATION
     - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform {
       CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation
                                             animationWithKeyPath:@"transform"];
       flipAnimation.beginTime = 0.5f;
       CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f};
       CATransform3D flipTransform1 =
       CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform2 =
       CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform3 =
       CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform4 =
       CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       flipAnimation.values = [NSArray arrayWithObjects:
                               [NSValue valueWithCATransform3D:zoomTransform],
                               [NSValue valueWithCATransform3D:flipTransform1],
                               [NSValue valueWithCATransform3D:flipTransform2],
                               [NSValue valueWithCATransform3D:flipTransform3],
                               [NSValue valueWithCATransform3D:flipTransform4],
                               [NSValue valueWithCATransform3D:zoomTransform], nil];
       flipAnimation.duration = 1.0f;
       return flipAnimation;
     }

Monday, October 12, 2009
FLIP ANIMATION
     - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform {
       CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation
                                             animationWithKeyPath:@"transform"];
       flipAnimation.beginTime = 0.5f;
       CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f};
       CATransform3D flipTransform1 =
       CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform2 =
       CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform3 =
       CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform4 =
       CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       flipAnimation.values = [NSArray arrayWithObjects:
                               [NSValue valueWithCATransform3D:zoomTransform],
                               [NSValue valueWithCATransform3D:flipTransform1],
                               [NSValue valueWithCATransform3D:flipTransform2],
                               [NSValue valueWithCATransform3D:flipTransform3],
                               [NSValue valueWithCATransform3D:flipTransform4],
                               [NSValue valueWithCATransform3D:zoomTransform], nil];
       flipAnimation.duration = 1.0f;
       return flipAnimation;
     }

Monday, October 12, 2009
FLIP ANIMATION
     - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform {
       CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation
                                             animationWithKeyPath:@"transform"];
       flipAnimation.beginTime = 0.5f;
       CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f};
       CATransform3D flipTransform1 =
       CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform2 =
       CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform3 =
       CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform4 =
       CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       flipAnimation.values = [NSArray arrayWithObjects:
                               [NSValue valueWithCATransform3D:zoomTransform],
                               [NSValue valueWithCATransform3D:flipTransform1],
                               [NSValue valueWithCATransform3D:flipTransform2],
                               [NSValue valueWithCATransform3D:flipTransform3],
                               [NSValue valueWithCATransform3D:flipTransform4],
                               [NSValue valueWithCATransform3D:zoomTransform], nil];
       flipAnimation.duration = 1.0f;
       return flipAnimation;
     }

Monday, October 12, 2009
FLIP ANIMATION
     - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform {
       CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation
                                             animationWithKeyPath:@"transform"];
       flipAnimation.beginTime = 0.5f;
       CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f};
       CATransform3D flipTransform1 =
       CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform2 =
       CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform3 =
       CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform4 =
       CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       flipAnimation.values = [NSArray arrayWithObjects:
                               [NSValue valueWithCATransform3D:zoomTransform],
                               [NSValue valueWithCATransform3D:flipTransform1],
                               [NSValue valueWithCATransform3D:flipTransform2],
                               [NSValue valueWithCATransform3D:flipTransform3],
                               [NSValue valueWithCATransform3D:flipTransform4],
                               [NSValue valueWithCATransform3D:zoomTransform], nil];
       flipAnimation.duration = 1.0f;
       return flipAnimation;
     }

Monday, October 12, 2009
FLIP ANIMATION
     - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform {
       CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation
                                             animationWithKeyPath:@"transform"];
       flipAnimation.beginTime = 0.5f;
       CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f};
       CATransform3D flipTransform1 =
       CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform2 =
       CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform3 =
       CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       CATransform3D flipTransform4 =
       CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f,
                           rotationVector[0], rotationVector[1], rotationVector[2]);
       flipAnimation.values = [NSArray arrayWithObjects:
                               [NSValue valueWithCATransform3D:zoomTransform],
                               [NSValue valueWithCATransform3D:flipTransform1],
                               [NSValue valueWithCATransform3D:flipTransform2],
                               [NSValue valueWithCATransform3D:flipTransform3],
                               [NSValue valueWithCATransform3D:flipTransform4],
                               [NSValue valueWithCATransform3D:zoomTransform], nil];
       flipAnimation.duration = 1.0f;
       return flipAnimation;
     }

Monday, October 12, 2009
ZOOM IN ANIMATION


  - (CABasicAnimation *)zoomInAnimation:(CATransform3D)zoomTransform {
    CABasicAnimation *zoomInAnimation =
        [CABasicAnimation animationWithKeyPath:@"transform"];
    zoomInAnimation.beginTime = 1.5f;
    zoomInAnimation.fromValue =
        [NSValue valueWithCATransform3D:zoomTransform];
    zoomInAnimation.toValue =
        [NSValue valueWithCATransform3D:CATransform3DIdentity];
    zoomInAnimation.duration = 0.5f;
    return zoomInAnimation;
  }




Monday, October 12, 2009
RUN THE CODE



Monday, October 12, 2009
THANKS

                           Pragmatic iPhone Studio




Monday, October 12, 2009

Mais conteúdo relacionado

Mais procurados

Daniel Jalkut - dotSwift 2019
Daniel Jalkut - dotSwift 2019Daniel Jalkut - dotSwift 2019
Daniel Jalkut - dotSwift 2019DanielJalkut
 
Node meetup feb_20_12
Node meetup feb_20_12Node meetup feb_20_12
Node meetup feb_20_12jafar104
 
YUI for control freaks - a presentation at The Ajax Experience
YUI for control freaks - a presentation at The Ajax ExperienceYUI for control freaks - a presentation at The Ajax Experience
YUI for control freaks - a presentation at The Ajax ExperienceChristian Heilmann
 
jQuery Framework - Property Content
jQuery Framework - Property ContentjQuery Framework - Property Content
jQuery Framework - Property Contentjagadeeshm
 
I phone勉強会 (2011.11.23)
I phone勉強会 (2011.11.23)I phone勉強会 (2011.11.23)
I phone勉強会 (2011.11.23)Katsumi Kishikawa
 
Arquitetura de Front-end em Aplicações de Larga Escala
Arquitetura de Front-end em Aplicações de Larga EscalaArquitetura de Front-end em Aplicações de Larga Escala
Arquitetura de Front-end em Aplicações de Larga EscalaEduardo Shiota Yasuda
 
Learning jQuery in 30 minutes
Learning jQuery in 30 minutesLearning jQuery in 30 minutes
Learning jQuery in 30 minutesSimon Willison
 
14multithreaded Graphics
14multithreaded Graphics14multithreaded Graphics
14multithreaded GraphicsAdil Jafri
 
Unity遊戲程式設計(15) 實作Space shooter遊戲
Unity遊戲程式設計(15) 實作Space shooter遊戲Unity遊戲程式設計(15) 實作Space shooter遊戲
Unity遊戲程式設計(15) 實作Space shooter遊戲吳錫修 (ShyiShiou Wu)
 
3D Touch by Karol Kozub, Macoscope
3D Touch by Karol Kozub, Macoscope3D Touch by Karol Kozub, Macoscope
3D Touch by Karol Kozub, MacoscopeMacoscope
 
Matching Game In Java
Matching Game In JavaMatching Game In Java
Matching Game In Javacmkandemir
 
Макс Грибов — Использование SpriteKit в неигровых приложениях
Макс Грибов — Использование SpriteKit в неигровых приложенияхМакс Грибов — Использование SpriteKit в неигровых приложениях
Макс Грибов — Использование SpriteKit в неигровых приложенияхCocoaHeads
 
Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Saulo Arruda
 
2009 Hackday Taiwan Yui
2009 Hackday Taiwan Yui2009 Hackday Taiwan Yui
2009 Hackday Taiwan YuiJH Lee
 

Mais procurados (20)

YUI Hidden Gems
YUI Hidden GemsYUI Hidden Gems
YUI Hidden Gems
 
Yui3在美团
Yui3在美团Yui3在美团
Yui3在美团
 
Yui mobile
Yui mobileYui mobile
Yui mobile
 
Daniel Jalkut - dotSwift 2019
Daniel Jalkut - dotSwift 2019Daniel Jalkut - dotSwift 2019
Daniel Jalkut - dotSwift 2019
 
Node meetup feb_20_12
Node meetup feb_20_12Node meetup feb_20_12
Node meetup feb_20_12
 
YUI for control freaks - a presentation at The Ajax Experience
YUI for control freaks - a presentation at The Ajax ExperienceYUI for control freaks - a presentation at The Ajax Experience
YUI for control freaks - a presentation at The Ajax Experience
 
Modular and Event-Driven JavaScript
Modular and Event-Driven JavaScriptModular and Event-Driven JavaScript
Modular and Event-Driven JavaScript
 
jQuery Framework - Property Content
jQuery Framework - Property ContentjQuery Framework - Property Content
jQuery Framework - Property Content
 
I phone勉強会 (2011.11.23)
I phone勉強会 (2011.11.23)I phone勉強会 (2011.11.23)
I phone勉強会 (2011.11.23)
 
Arquitetura de Front-end em Aplicações de Larga Escala
Arquitetura de Front-end em Aplicações de Larga EscalaArquitetura de Front-end em Aplicações de Larga Escala
Arquitetura de Front-end em Aplicações de Larga Escala
 
YUI Tidbits
YUI TidbitsYUI Tidbits
YUI Tidbits
 
Learning jQuery in 30 minutes
Learning jQuery in 30 minutesLearning jQuery in 30 minutes
Learning jQuery in 30 minutes
 
Real life XNA
Real life XNAReal life XNA
Real life XNA
 
14multithreaded Graphics
14multithreaded Graphics14multithreaded Graphics
14multithreaded Graphics
 
Unity遊戲程式設計(15) 實作Space shooter遊戲
Unity遊戲程式設計(15) 實作Space shooter遊戲Unity遊戲程式設計(15) 實作Space shooter遊戲
Unity遊戲程式設計(15) 實作Space shooter遊戲
 
3D Touch by Karol Kozub, Macoscope
3D Touch by Karol Kozub, Macoscope3D Touch by Karol Kozub, Macoscope
3D Touch by Karol Kozub, Macoscope
 
Matching Game In Java
Matching Game In JavaMatching Game In Java
Matching Game In Java
 
Макс Грибов — Использование SpriteKit в неигровых приложениях
Макс Грибов — Использование SpriteKit в неигровых приложенияхМакс Грибов — Использование SpriteKit в неигровых приложениях
Макс Грибов — Использование SpriteKit в неигровых приложениях
 
Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4
 
2009 Hackday Taiwan Yui
2009 Hackday Taiwan Yui2009 Hackday Taiwan Yui
2009 Hackday Taiwan Yui
 

Destaque

360iDev MapKit Presentation - Denver 2009
360iDev MapKit Presentation - Denver 2009360iDev MapKit Presentation - Denver 2009
360iDev MapKit Presentation - Denver 2009bdudney
 
Game Kit - iPhone
Game Kit - iPhoneGame Kit - iPhone
Game Kit - iPhonebdudney
 
Creative Ways to Combine Email and Social - Webinar Slides
Creative Ways to Combine Email and Social - Webinar SlidesCreative Ways to Combine Email and Social - Webinar Slides
Creative Ways to Combine Email and Social - Webinar SlidesVision6
 
Caprice 24-paganini violin solo
Caprice 24-paganini violin soloCaprice 24-paganini violin solo
Caprice 24-paganini violin solosamuel silva
 
Черенкование хвойников
Черенкование хвойниковЧеренкование хвойников
Черенкование хвойниковAnna Artemyeva
 
Microfiltration - Cryptosporidium Control Application
Microfiltration - Cryptosporidium Control ApplicationMicrofiltration - Cryptosporidium Control Application
Microfiltration - Cryptosporidium Control ApplicationKent Kise
 
Business Professionals Week
Business Professionals WeekBusiness Professionals Week
Business Professionals WeekCPA Australia
 
[제94차 오픈포럼 발제자료] 한국에 창조와 미래가 있는가?_순천대 생물학과 박기영 교수
[제94차 오픈포럼 발제자료] 한국에 창조와 미래가 있는가?_순천대 생물학과 박기영 교수[제94차 오픈포럼 발제자료] 한국에 창조와 미래가 있는가?_순천대 생물학과 박기영 교수
[제94차 오픈포럼 발제자료] 한국에 창조와 미래가 있는가?_순천대 생물학과 박기영 교수Sci Feel
 
Enterprise and Acumen:Real World Information Skills and Employability for Bus...
Enterprise and Acumen:Real World Information Skills and Employability for Bus...Enterprise and Acumen:Real World Information Skills and Employability for Bus...
Enterprise and Acumen:Real World Information Skills and Employability for Bus...Western Sydney University
 
eTail Asia Perfecting the Fundamentals of Ecommerce 2014 Agenda
eTail Asia Perfecting the Fundamentals of Ecommerce 2014 AgendaeTail Asia Perfecting the Fundamentals of Ecommerce 2014 Agenda
eTail Asia Perfecting the Fundamentals of Ecommerce 2014 Agendadigitalinasia
 
Social Media and Email Stats from Six Countries
Social Media and Email Stats from Six CountriesSocial Media and Email Stats from Six Countries
Social Media and Email Stats from Six CountriesKyle Lacy
 
SXSW 2016 Recap: Highlights of Brands and Technologies
SXSW 2016 Recap: Highlights of Brands and TechnologiesSXSW 2016 Recap: Highlights of Brands and Technologies
SXSW 2016 Recap: Highlights of Brands and TechnologiesDavid Berkowitz
 

Destaque (17)

360iDev MapKit Presentation - Denver 2009
360iDev MapKit Presentation - Denver 2009360iDev MapKit Presentation - Denver 2009
360iDev MapKit Presentation - Denver 2009
 
Game Kit - iPhone
Game Kit - iPhoneGame Kit - iPhone
Game Kit - iPhone
 
Creative Ways to Combine Email and Social - Webinar Slides
Creative Ways to Combine Email and Social - Webinar SlidesCreative Ways to Combine Email and Social - Webinar Slides
Creative Ways to Combine Email and Social - Webinar Slides
 
Portfolio
PortfolioPortfolio
Portfolio
 
Caprice 24-paganini violin solo
Caprice 24-paganini violin soloCaprice 24-paganini violin solo
Caprice 24-paganini violin solo
 
Черенкование хвойников
Черенкование хвойниковЧеренкование хвойников
Черенкование хвойников
 
Fluent_Spring_2014-Hauver
Fluent_Spring_2014-HauverFluent_Spring_2014-Hauver
Fluent_Spring_2014-Hauver
 
Microfiltration - Cryptosporidium Control Application
Microfiltration - Cryptosporidium Control ApplicationMicrofiltration - Cryptosporidium Control Application
Microfiltration - Cryptosporidium Control Application
 
Business Professionals Week
Business Professionals WeekBusiness Professionals Week
Business Professionals Week
 
[제94차 오픈포럼 발제자료] 한국에 창조와 미래가 있는가?_순천대 생물학과 박기영 교수
[제94차 오픈포럼 발제자료] 한국에 창조와 미래가 있는가?_순천대 생물학과 박기영 교수[제94차 오픈포럼 발제자료] 한국에 창조와 미래가 있는가?_순천대 생물학과 박기영 교수
[제94차 오픈포럼 발제자료] 한국에 창조와 미래가 있는가?_순천대 생물학과 박기영 교수
 
Enterprise and Acumen:Real World Information Skills and Employability for Bus...
Enterprise and Acumen:Real World Information Skills and Employability for Bus...Enterprise and Acumen:Real World Information Skills and Employability for Bus...
Enterprise and Acumen:Real World Information Skills and Employability for Bus...
 
Instalación Knoppix
Instalación KnoppixInstalación Knoppix
Instalación Knoppix
 
Top 5 challenges in global healthcare it
Top 5 challenges in global healthcare itTop 5 challenges in global healthcare it
Top 5 challenges in global healthcare it
 
eTail Asia Perfecting the Fundamentals of Ecommerce 2014 Agenda
eTail Asia Perfecting the Fundamentals of Ecommerce 2014 AgendaeTail Asia Perfecting the Fundamentals of Ecommerce 2014 Agenda
eTail Asia Perfecting the Fundamentals of Ecommerce 2014 Agenda
 
GPSinsights poster
GPSinsights posterGPSinsights poster
GPSinsights poster
 
Social Media and Email Stats from Six Countries
Social Media and Email Stats from Six CountriesSocial Media and Email Stats from Six Countries
Social Media and Email Stats from Six Countries
 
SXSW 2016 Recap: Highlights of Brands and Technologies
SXSW 2016 Recap: Highlights of Brands and TechnologiesSXSW 2016 Recap: Highlights of Brands and Technologies
SXSW 2016 Recap: Highlights of Brands and Technologies
 

Semelhante a Core Animation

303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Code303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Codejonmarimba
 
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаКурсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаГлеб Тарасов
 
Building a Native Camera Access Library - Part V.pdf
Building a Native Camera Access Library - Part V.pdfBuilding a Native Camera Access Library - Part V.pdf
Building a Native Camera Access Library - Part V.pdfShaiAlmog1
 
iPhoneOS3.1でのカメラAPIについて
iPhoneOS3.1でのカメラAPIについてiPhoneOS3.1でのカメラAPIについて
iPhoneOS3.1でのカメラAPIについてKyosuke Takayama
 
Core animation taobao
Core animation taobaoCore animation taobao
Core animation taobaoyarshure Kong
 
Kick start with j query
Kick start with j queryKick start with j query
Kick start with j queryMd. Ziaul Haq
 
Dependency Injection @ AngularJS
Dependency Injection @ AngularJSDependency Injection @ AngularJS
Dependency Injection @ AngularJSRan Mizrahi
 
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)anistar sung
 
iOSインタラクションデザイン
iOSインタラクションデザインiOSインタラクションデザイン
iOSインタラクションデザインhIDDENxv
 
Randomising css animations
Randomising css animationsRandomising css animations
Randomising css animationsasjb
 
Creating an Uber Clone - Part XXII.pdf
Creating an Uber Clone - Part XXII.pdfCreating an Uber Clone - Part XXII.pdf
Creating an Uber Clone - Part XXII.pdfShaiAlmog1
 
Creating an Uber Clone - Part XXIV.pdf
Creating an Uber Clone - Part XXIV.pdfCreating an Uber Clone - Part XXIV.pdf
Creating an Uber Clone - Part XXIV.pdfShaiAlmog1
 
Introduction.to.j query
Introduction.to.j queryIntroduction.to.j query
Introduction.to.j queryHunter Wu
 
Swipe 2011 - iOS Gems
Swipe 2011 - iOS GemsSwipe 2011 - iOS Gems
Swipe 2011 - iOS GemsKevin O'Neill
 
Creating a Facebook Clone - Part XXXVI - Transcript.pdf
Creating a Facebook Clone - Part XXXVI - Transcript.pdfCreating a Facebook Clone - Part XXXVI - Transcript.pdf
Creating a Facebook Clone - Part XXXVI - Transcript.pdfShaiAlmog1
 

Semelhante a Core Animation (20)

iphonedevcon 2010: Cooking with iAd
iphonedevcon 2010:  Cooking with iAd iphonedevcon 2010:  Cooking with iAd
iphonedevcon 2010: Cooking with iAd
 
303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Code303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Code
 
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаКурсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
 
Building a Native Camera Access Library - Part V.pdf
Building a Native Camera Access Library - Part V.pdfBuilding a Native Camera Access Library - Part V.pdf
Building a Native Camera Access Library - Part V.pdf
 
iPhoneOS3.1でのカメラAPIについて
iPhoneOS3.1でのカメラAPIについてiPhoneOS3.1でのカメラAPIについて
iPhoneOS3.1でのカメラAPIについて
 
Core animation taobao
Core animation taobaoCore animation taobao
Core animation taobao
 
Kick start with j query
Kick start with j queryKick start with j query
Kick start with j query
 
Dependency Injection @ AngularJS
Dependency Injection @ AngularJSDependency Injection @ AngularJS
Dependency Injection @ AngularJS
 
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
 
iOSインタラクションデザイン
iOSインタラクションデザインiOSインタラクションデザイン
iOSインタラクションデザイン
 
Animations & swift
Animations & swiftAnimations & swift
Animations & swift
 
Randomising css animations
Randomising css animationsRandomising css animations
Randomising css animations
 
004
004004
004
 
Creating an Uber Clone - Part XXII.pdf
Creating an Uber Clone - Part XXII.pdfCreating an Uber Clone - Part XXII.pdf
Creating an Uber Clone - Part XXII.pdf
 
Core animation
Core animationCore animation
Core animation
 
Creating an Uber Clone - Part XXIV.pdf
Creating an Uber Clone - Part XXIV.pdfCreating an Uber Clone - Part XXIV.pdf
Creating an Uber Clone - Part XXIV.pdf
 
Introduction.to.j query
Introduction.to.j queryIntroduction.to.j query
Introduction.to.j query
 
I os 04
I os 04I os 04
I os 04
 
Swipe 2011 - iOS Gems
Swipe 2011 - iOS GemsSwipe 2011 - iOS Gems
Swipe 2011 - iOS Gems
 
Creating a Facebook Clone - Part XXXVI - Transcript.pdf
Creating a Facebook Clone - Part XXXVI - Transcript.pdfCreating a Facebook Clone - Part XXXVI - Transcript.pdf
Creating a Facebook Clone - Part XXXVI - Transcript.pdf
 

Último

trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdftrending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdfMintel Group
 
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdfChris Skinner
 
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptxThe-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptxmbikashkanyari
 
Darshan Hiranandani [News About Next CEO].pdf
Darshan Hiranandani [News About Next CEO].pdfDarshan Hiranandani [News About Next CEO].pdf
Darshan Hiranandani [News About Next CEO].pdfShashank Mehta
 
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptxGo for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptxRakhi Bazaar
 
Supercharge Your eCommerce Stores-acowebs
Supercharge Your eCommerce Stores-acowebsSupercharge Your eCommerce Stores-acowebs
Supercharge Your eCommerce Stores-acowebsGOKUL JS
 
Cyber Security Training in Office Environment
Cyber Security Training in Office EnvironmentCyber Security Training in Office Environment
Cyber Security Training in Office Environmentelijahj01012
 
GUIDELINES ON USEFUL FORMS IN FREIGHT FORWARDING (F) Danny Diep Toh MBA.pdf
GUIDELINES ON USEFUL FORMS IN FREIGHT FORWARDING (F) Danny Diep Toh MBA.pdfGUIDELINES ON USEFUL FORMS IN FREIGHT FORWARDING (F) Danny Diep Toh MBA.pdf
GUIDELINES ON USEFUL FORMS IN FREIGHT FORWARDING (F) Danny Diep Toh MBA.pdfDanny Diep To
 
APRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdfAPRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdfRbc Rbcua
 
business environment micro environment macro environment.pptx
business environment micro environment macro environment.pptxbusiness environment micro environment macro environment.pptx
business environment micro environment macro environment.pptxShruti Mittal
 
1911 Gold Corporate Presentation Apr 2024.pdf
1911 Gold Corporate Presentation Apr 2024.pdf1911 Gold Corporate Presentation Apr 2024.pdf
1911 Gold Corporate Presentation Apr 2024.pdfShaun Heinrichs
 
Cybersecurity Awareness Training Presentation v2024.03
Cybersecurity Awareness Training Presentation v2024.03Cybersecurity Awareness Training Presentation v2024.03
Cybersecurity Awareness Training Presentation v2024.03DallasHaselhorst
 
1911 Gold Corporate Presentation Apr 2024.pdf
1911 Gold Corporate Presentation Apr 2024.pdf1911 Gold Corporate Presentation Apr 2024.pdf
1911 Gold Corporate Presentation Apr 2024.pdfShaun Heinrichs
 
Lucia Ferretti, Lead Business Designer; Matteo Meschini, Business Designer @T...
Lucia Ferretti, Lead Business Designer; Matteo Meschini, Business Designer @T...Lucia Ferretti, Lead Business Designer; Matteo Meschini, Business Designer @T...
Lucia Ferretti, Lead Business Designer; Matteo Meschini, Business Designer @T...Associazione Digital Days
 
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...SOFTTECHHUB
 
Introducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applicationsIntroducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applicationsKnowledgeSeed
 
Planetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in LifePlanetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in LifeBhavana Pujan Kendra
 
Memorándum de Entendimiento (MoU) entre Codelco y SQM
Memorándum de Entendimiento (MoU) entre Codelco y SQMMemorándum de Entendimiento (MoU) entre Codelco y SQM
Memorándum de Entendimiento (MoU) entre Codelco y SQMVoces Mineras
 
PSCC - Capability Statement Presentation
PSCC - Capability Statement PresentationPSCC - Capability Statement Presentation
PSCC - Capability Statement PresentationAnamaria Contreras
 

Último (20)

trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdftrending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
 
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
 
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptxThe-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
 
Darshan Hiranandani [News About Next CEO].pdf
Darshan Hiranandani [News About Next CEO].pdfDarshan Hiranandani [News About Next CEO].pdf
Darshan Hiranandani [News About Next CEO].pdf
 
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptxGo for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
 
Supercharge Your eCommerce Stores-acowebs
Supercharge Your eCommerce Stores-acowebsSupercharge Your eCommerce Stores-acowebs
Supercharge Your eCommerce Stores-acowebs
 
Cyber Security Training in Office Environment
Cyber Security Training in Office EnvironmentCyber Security Training in Office Environment
Cyber Security Training in Office Environment
 
GUIDELINES ON USEFUL FORMS IN FREIGHT FORWARDING (F) Danny Diep Toh MBA.pdf
GUIDELINES ON USEFUL FORMS IN FREIGHT FORWARDING (F) Danny Diep Toh MBA.pdfGUIDELINES ON USEFUL FORMS IN FREIGHT FORWARDING (F) Danny Diep Toh MBA.pdf
GUIDELINES ON USEFUL FORMS IN FREIGHT FORWARDING (F) Danny Diep Toh MBA.pdf
 
WAM Corporate Presentation April 12 2024.pdf
WAM Corporate Presentation April 12 2024.pdfWAM Corporate Presentation April 12 2024.pdf
WAM Corporate Presentation April 12 2024.pdf
 
APRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdfAPRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdf
 
business environment micro environment macro environment.pptx
business environment micro environment macro environment.pptxbusiness environment micro environment macro environment.pptx
business environment micro environment macro environment.pptx
 
1911 Gold Corporate Presentation Apr 2024.pdf
1911 Gold Corporate Presentation Apr 2024.pdf1911 Gold Corporate Presentation Apr 2024.pdf
1911 Gold Corporate Presentation Apr 2024.pdf
 
Cybersecurity Awareness Training Presentation v2024.03
Cybersecurity Awareness Training Presentation v2024.03Cybersecurity Awareness Training Presentation v2024.03
Cybersecurity Awareness Training Presentation v2024.03
 
1911 Gold Corporate Presentation Apr 2024.pdf
1911 Gold Corporate Presentation Apr 2024.pdf1911 Gold Corporate Presentation Apr 2024.pdf
1911 Gold Corporate Presentation Apr 2024.pdf
 
Lucia Ferretti, Lead Business Designer; Matteo Meschini, Business Designer @T...
Lucia Ferretti, Lead Business Designer; Matteo Meschini, Business Designer @T...Lucia Ferretti, Lead Business Designer; Matteo Meschini, Business Designer @T...
Lucia Ferretti, Lead Business Designer; Matteo Meschini, Business Designer @T...
 
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
 
Introducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applicationsIntroducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applications
 
Planetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in LifePlanetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in Life
 
Memorándum de Entendimiento (MoU) entre Codelco y SQM
Memorándum de Entendimiento (MoU) entre Codelco y SQMMemorándum de Entendimiento (MoU) entre Codelco y SQM
Memorándum de Entendimiento (MoU) entre Codelco y SQM
 
PSCC - Capability Statement Presentation
PSCC - Capability Statement PresentationPSCC - Capability Statement Presentation
PSCC - Capability Statement Presentation
 

Core Animation

  • 1. CORE ANIMATION Animated UIs on the iPhone Monday, October 12, 2009
  • 2. WHY ANIMATE? Animation brings ‘real world’ feel to user interfaces Provides clues to what is happening in the UI Makes the UI feel more responsive Monday, October 12, 2009
  • 3. PLEAS DON’T Make your UI Animated just for the sake of animation Monday, October 12, 2009
  • 4. WHAT IS IT ANYWAY? Compositing Monday, October 12, 2009
  • 5. WHAT IS IT ANYWAY? Animation Monday, October 12, 2009
  • 6. WHAT IS IT ANYWAY? Animation Monday, October 12, 2009
  • 7. WHAT IS IT ANYWAY? Backend for all animation on the iPhone and Mac Monday, October 12, 2009
  • 8. BACKEND Simple Stuff is very Simple Monday, October 12, 2009
  • 9. BACKEND Complex Stuff is Possible image from @pagedooley Monday, October 12, 2009
  • 10. SIMPLE STUFF FIRST - (void)touchesEnded:(NSSet *)touches Begin Animations withEvent:(UIEvent *)event { [UIView beginAnimations:@"imageMove" context:NULL]; CGPoint location = [[touches anyObject] locationInView:self.view]; self.imageView.center = location; [UIView commitAnimations]; } Monday, October 12, 2009
  • 11. SIMPLE STUFF FIRST - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [UIView beginAnimations:@"imageMove" context:NULL]; CGPoint location = [[touches anyObject] locationInView:self.view]; self.imageView.center = location; [UIView commitAnimations]; Calculate and set } the new location Monday, October 12, 2009
  • 12. SIMPLE STUFF FIRST - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [UIView beginAnimations:@"imageMove" context:NULL]; CGPoint location = [[touches anyObject] locationInView:self.view]; self.imageView.center = location; [UIView commitAnimations]; } Start the animations Monday, October 12, 2009
  • 13. REAL WORLD USAGE Animate the Search bar into view Monday, October 12, 2009
  • 14. ANIMATE IN - (IBAction)search { if(nil == self.searchBar.superview) { self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f); [self.view addSubview:self.searchBar]; } [UIView beginAnimations:@"SearchBarMoveIn" context:NULL]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = 0.0f; self.searchBar.frame = frame; [self.searchBar becomeFirstResponder]; [UIView commitAnimations]; } Monday, October 12, 2009
  • 15. ANIMATE IN - (IBAction)search { if(nil == self.searchBar.superview) { self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f); [self.view addSubview:self.searchBar]; } [UIView beginAnimations:@"SearchBarMoveIn" context:NULL]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = 0.0f; self.searchBar.frame = frame; [self.searchBar becomeFirstResponder]; [UIView commitAnimations]; } Monday, October 12, 2009
  • 16. ANIMATE IN - (IBAction)search { if(nil == self.searchBar.superview) { self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f); [self.view addSubview:self.searchBar]; } [UIView beginAnimations:@"SearchBarMoveIn" context:NULL]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = 0.0f; self.searchBar.frame = frame; [self.searchBar becomeFirstResponder]; [UIView commitAnimations]; } Monday, October 12, 2009
  • 17. ANIMATE IN - (IBAction)search { if(nil == self.searchBar.superview) { self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f); [self.view addSubview:self.searchBar]; } [UIView beginAnimations:@"SearchBarMoveIn" context:NULL]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = 0.0f; self.searchBar.frame = frame; [self.searchBar becomeFirstResponder]; [UIView commitAnimations]; } Monday, October 12, 2009
  • 18. ANIMATE IN - (IBAction)search { if(nil == self.searchBar.superview) { self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f); [self.view addSubview:self.searchBar]; } [UIView beginAnimations:@"SearchBarMoveIn" context:NULL]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = 0.0f; self.searchBar.frame = frame; [self.searchBar becomeFirstResponder]; [UIView commitAnimations]; } Monday, October 12, 2009
  • 19. ANIMATE IN - (IBAction)search { if(nil == self.searchBar.superview) { self.searchBar.frame = CGRectMake(0.0f, -64.0f, 320.0f, 44.0f); [self.view addSubview:self.searchBar]; } [UIView beginAnimations:@"SearchBarMoveIn" context:NULL]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = 0.0f; self.searchBar.frame = frame; [self.searchBar becomeFirstResponder]; [UIView commitAnimations]; } Monday, October 12, 2009
  • 20. ANIMATE OUT - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [self.searchBar resignFirstResponder]; [UIView beginAnimations:@"SearchBarMoveOut" context:nil]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = -CGRectGetHeight(frame); self.searchBar.frame = frame; [UIView commitAnimations]; } Monday, October 12, 2009
  • 21. ANIMATE OUT - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [self.searchBar resignFirstResponder]; [UIView beginAnimations:@"SearchBarMoveOut" context:nil]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = -CGRectGetHeight(frame); self.searchBar.frame = frame; [UIView commitAnimations]; } Monday, October 12, 2009
  • 22. ANIMATE OUT - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [self.searchBar resignFirstResponder]; [UIView beginAnimations:@"SearchBarMoveOut" context:nil]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = -CGRectGetHeight(frame); self.searchBar.frame = frame; [UIView commitAnimations]; } Monday, October 12, 2009
  • 23. ANIMATE OUT - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [self.searchBar resignFirstResponder]; [UIView beginAnimations:@"SearchBarMoveOut" context:nil]; [UIView setAnimationDuration:0.5f]; CGRect frame = self.searchBar.frame; frame.origin.y = -CGRectGetHeight(frame); self.searchBar.frame = frame; [UIView commitAnimations]; } Monday, October 12, 2009
  • 24. DRAWING ATTENTION Making elements jump out Monday, October 12, 2009
  • 25. SEARCHING - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { [self.gridView animateImagesRelatedTo:searchBar.text]; } Monday, October 12, 2009
  • 26. ANIMATING IMAGES - (void)animateImagesRelatedTo:(NSString *)term { NSUInteger count = random() % self.gridLayer.images.count; if(count < 1) { count = 1; } for(NSUInteger i = 0;i < count;i++) { NSUInteger index = random() % self.gridLayer.sublayers.count; CALayer *layer = [[self.gridLayer sublayers] objectAtIndex:index]; [layer addAnimation:[self foundAnimation] forKey:@"emphasise"]; } } Monday, October 12, 2009
  • 27. FOUND ANIMATION - (CAAnimationGroup *)foundAnimation { CAAnimationGroup *foundAnimation = [CAAnimationGroup animation]; CATransform3D zoomTransform = CATransform3DMakeScale(0.75f, 0.75f, 1.0f); CABasicAnimation *zoomOutAnimation = [self zoomOutAnimation:zoomTransform]; CAKeyframeAnimation *flipAnimation = [self flipAnimation:zoomTransform]; CABasicAnimation *zoomInAnimation = [self zoomInAnimation:zoomTransform]; foundAnimation.animations = [NSArray arrayWithObjects:zoomOutAnimation, flipAnimation, zoomInAnimation, nil]; foundAnimation.duration = 2.0f; return foundAnimation; } Monday, October 12, 2009
  • 28. FOUND ANIMATION - (CAAnimationGroup *)foundAnimation { CAAnimationGroup *foundAnimation = [CAAnimationGroup animation]; CATransform3D zoomTransform = CATransform3DMakeScale(0.75f, 0.75f, 1.0f); CABasicAnimation *zoomOutAnimation = [self zoomOutAnimation:zoomTransform]; CAKeyframeAnimation *flipAnimation = [self flipAnimation:zoomTransform]; CABasicAnimation *zoomInAnimation = [self zoomInAnimation:zoomTransform]; foundAnimation.animations = [NSArray arrayWithObjects:zoomOutAnimation, flipAnimation, zoomInAnimation, nil]; foundAnimation.duration = 2.0f; return foundAnimation; } Monday, October 12, 2009
  • 29. FOUND ANIMATION - (CAAnimationGroup *)foundAnimation { CAAnimationGroup *foundAnimation = [CAAnimationGroup animation]; CATransform3D zoomTransform = CATransform3DMakeScale(0.75f, 0.75f, 1.0f); CABasicAnimation *zoomOutAnimation = [self zoomOutAnimation:zoomTransform]; CAKeyframeAnimation *flipAnimation = [self flipAnimation:zoomTransform]; CABasicAnimation *zoomInAnimation = [self zoomInAnimation:zoomTransform]; foundAnimation.animations = [NSArray arrayWithObjects:zoomOutAnimation, flipAnimation, zoomInAnimation, nil]; foundAnimation.duration = 2.0f; return foundAnimation; } Monday, October 12, 2009
  • 30. FOUND ANIMATION - (CAAnimationGroup *)foundAnimation { CAAnimationGroup *foundAnimation = [CAAnimationGroup animation]; CATransform3D zoomTransform = CATransform3DMakeScale(0.75f, 0.75f, 1.0f); CABasicAnimation *zoomOutAnimation = [self zoomOutAnimation:zoomTransform]; CAKeyframeAnimation *flipAnimation = [self flipAnimation:zoomTransform]; CABasicAnimation *zoomInAnimation = [self zoomInAnimation:zoomTransform]; foundAnimation.animations = [NSArray arrayWithObjects:zoomOutAnimation, flipAnimation, zoomInAnimation, nil]; foundAnimation.duration = 2.0f; return foundAnimation; } Monday, October 12, 2009
  • 31. 3 PART ANIMATION Monday, October 12, 2009
  • 32. 3 PART ANIMATION Monday, October 12, 2009
  • 33. ZOOM OUT ANIMATION - (CABasicAnimation *)zoomOutAnimation:(CATransform3D)zoomTransform { CABasicAnimation *zoomOutAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; zoomOutAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; zoomOutAnimation.toValue = [NSValue valueWithCATransform3D:zoomTransform]; zoomOutAnimation.duration = 0.5f; return zoomOutAnimation; } Monday, October 12, 2009
  • 34. ZOOM OUT ANIMATION - (CABasicAnimation *)zoomOutAnimation:(CATransform3D)zoomTransform { CABasicAnimation *zoomOutAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; zoomOutAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; zoomOutAnimation.toValue = [NSValue valueWithCATransform3D:zoomTransform]; zoomOutAnimation.duration = 0.5f; return zoomOutAnimation; } Monday, October 12, 2009
  • 35. ZOOM OUT ANIMATION - (CABasicAnimation *)zoomOutAnimation:(CATransform3D)zoomTransform { CABasicAnimation *zoomOutAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; zoomOutAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; zoomOutAnimation.toValue = [NSValue valueWithCATransform3D:zoomTransform]; zoomOutAnimation.duration = 0.5f; return zoomOutAnimation; } Monday, October 12, 2009
  • 36. FLIP ANIMATION - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform { CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; flipAnimation.beginTime = 0.5f; CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f}; CATransform3D flipTransform1 = CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform2 = CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform3 = CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform4 = CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); flipAnimation.values = [NSArray arrayWithObjects: [NSValue valueWithCATransform3D:zoomTransform], [NSValue valueWithCATransform3D:flipTransform1], [NSValue valueWithCATransform3D:flipTransform2], [NSValue valueWithCATransform3D:flipTransform3], [NSValue valueWithCATransform3D:flipTransform4], [NSValue valueWithCATransform3D:zoomTransform], nil]; flipAnimation.duration = 1.0f; return flipAnimation; } Monday, October 12, 2009
  • 37. FLIP ANIMATION - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform { CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; flipAnimation.beginTime = 0.5f; CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f}; CATransform3D flipTransform1 = CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform2 = CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform3 = CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform4 = CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); flipAnimation.values = [NSArray arrayWithObjects: [NSValue valueWithCATransform3D:zoomTransform], [NSValue valueWithCATransform3D:flipTransform1], [NSValue valueWithCATransform3D:flipTransform2], [NSValue valueWithCATransform3D:flipTransform3], [NSValue valueWithCATransform3D:flipTransform4], [NSValue valueWithCATransform3D:zoomTransform], nil]; flipAnimation.duration = 1.0f; return flipAnimation; } Monday, October 12, 2009
  • 38. FLIP ANIMATION - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform { CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; flipAnimation.beginTime = 0.5f; CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f}; CATransform3D flipTransform1 = CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform2 = CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform3 = CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform4 = CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); flipAnimation.values = [NSArray arrayWithObjects: [NSValue valueWithCATransform3D:zoomTransform], [NSValue valueWithCATransform3D:flipTransform1], [NSValue valueWithCATransform3D:flipTransform2], [NSValue valueWithCATransform3D:flipTransform3], [NSValue valueWithCATransform3D:flipTransform4], [NSValue valueWithCATransform3D:zoomTransform], nil]; flipAnimation.duration = 1.0f; return flipAnimation; } Monday, October 12, 2009
  • 39. FLIP ANIMATION - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform { CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; flipAnimation.beginTime = 0.5f; CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f}; CATransform3D flipTransform1 = CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform2 = CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform3 = CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform4 = CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); flipAnimation.values = [NSArray arrayWithObjects: [NSValue valueWithCATransform3D:zoomTransform], [NSValue valueWithCATransform3D:flipTransform1], [NSValue valueWithCATransform3D:flipTransform2], [NSValue valueWithCATransform3D:flipTransform3], [NSValue valueWithCATransform3D:flipTransform4], [NSValue valueWithCATransform3D:zoomTransform], nil]; flipAnimation.duration = 1.0f; return flipAnimation; } Monday, October 12, 2009
  • 40. FLIP ANIMATION - (CAKeyframeAnimation *)flipAnimation:(CATransform3D) zoomTransform { CAKeyframeAnimation *flipAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; flipAnimation.beginTime = 0.5f; CGFloat rotationVector[3] = {1.0f, 1.0f, 0.0f}; CATransform3D flipTransform1 = CATransform3DRotate(zoomTransform, 1.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform2 = CATransform3DRotate(zoomTransform, 2.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform3 = CATransform3DRotate(zoomTransform, 3.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); CATransform3D flipTransform4 = CATransform3DRotate(zoomTransform, 4.0f * M_PI / 2.0f, rotationVector[0], rotationVector[1], rotationVector[2]); flipAnimation.values = [NSArray arrayWithObjects: [NSValue valueWithCATransform3D:zoomTransform], [NSValue valueWithCATransform3D:flipTransform1], [NSValue valueWithCATransform3D:flipTransform2], [NSValue valueWithCATransform3D:flipTransform3], [NSValue valueWithCATransform3D:flipTransform4], [NSValue valueWithCATransform3D:zoomTransform], nil]; flipAnimation.duration = 1.0f; return flipAnimation; } Monday, October 12, 2009
  • 41. ZOOM IN ANIMATION - (CABasicAnimation *)zoomInAnimation:(CATransform3D)zoomTransform { CABasicAnimation *zoomInAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; zoomInAnimation.beginTime = 1.5f; zoomInAnimation.fromValue = [NSValue valueWithCATransform3D:zoomTransform]; zoomInAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; zoomInAnimation.duration = 0.5f; return zoomInAnimation; } Monday, October 12, 2009
  • 42. RUN THE CODE Monday, October 12, 2009
  • 43. THANKS Pragmatic iPhone Studio Monday, October 12, 2009