SlideShare ist ein Scribd-Unternehmen logo
1 von 88
Downloaden Sie, um offline zu lesen
Making Things Move
           on the iPhone
                             Keith Peters
                           www.bit-101.com




Wednesday, March 4, 2009
www.bit-101.com/
                               360iDev/
                            presentation.zip


Wednesday, March 4, 2009
CoreAnimation



Wednesday, March 4, 2009
Background



Wednesday, March 4, 2009
Background
                           2005




Wednesday, March 4, 2009
Background
                           2005
                                     2007



Wednesday, March 4, 2009
Background
                           2005
                                     2007
                                               2008

Wednesday, March 4, 2009
Wednesday, March 4, 2009
Wednesday, March 4, 2009
Wednesday, March 4, 2009
What is Animation?



Wednesday, March 4, 2009
Wednesday, March 4, 2009
Wednesday, March 4, 2009
Coded Animation




Wednesday, March 4, 2009
Coded Animation
                                Apply a
                                 rule




Wednesday, March 4, 2009
Coded Animation
                                Apply a
                                 rule




                                           Change
                                          something


Wednesday, March 4, 2009
Coded Animation
                                Apply a
                                 rule




                    Update                 Change
                  the screen              something


Wednesday, March 4, 2009
Coded Animation
                                Apply a
                                 rule




                    Update                 Change
                  the screen              something


Wednesday, March 4, 2009
Make something
                          to move


Wednesday, March 4, 2009
Make something
                          to move


Wednesday, March 4, 2009
Make something
                          to move

                           (project files: Animation101)


Wednesday, March 4, 2009
// interface
  UIImageView *ball;




  // viewDidLoad
  ball = [[UIImageView alloc] initWithImage:
            [UIImage imageNamed:@quot;ball.pngquot;]];
  [self.view addSubview:ball];




Wednesday, March 4, 2009
NSTimer




Wednesday, March 4, 2009
NSTimer
  [NSTimer
     scheduledTimerWithTimeInterval:1.0/60.0
     target:self
     selector:@selector(onTimer)
     userInfo:nil
     repeats:YES];




Wednesday, March 4, 2009
Moving UIViews




Wednesday, March 4, 2009
Moving UIViews

                   • view.center




Wednesday, March 4, 2009
Moving UIViews

                   • view.center
                   • view.transform



Wednesday, March 4, 2009
Moving UIViews

                   • view.center
                   • view.transform
                   • view.frame


Wednesday, March 4, 2009
// interface
     float x;
     float y;



                           // viewDidLoad
                           x = 50.0;
                           y = 50.0;




Wednesday, March 4, 2009
ball.center = CGPointMake(x, y);
  x += 2.0;
  y += 3.0;




Wednesday, March 4, 2009
ball.frame = CGRectMake(x, y, width, height);
  x += 2.0;
  y += 3.0;




Wednesday, March 4, 2009
ball.transform =
      CGAffineTransformMakeTranslation(x, y);
  x += 2.0;
  y += 3.0;




Wednesday, March 4, 2009
ball.transform =
      CGAffineTransformTranslate(
          ball.transform, 2.0, 3.0);




Wednesday, March 4, 2009
Which is fastest?




Wednesday, March 4, 2009
Which is fastest?

                   • view.center




Wednesday, March 4, 2009
Which is fastest?

                   • view.center
                   • view.transform (~2-3x)



Wednesday, March 4, 2009
Which is fastest?

                   • view.center
                   • view.transform (~2-3x)
                   • view.frame (~2-3x)


Wednesday, March 4, 2009
Velocity




                           (project files:Velocity)

Wednesday, March 4, 2009
Velocity


                               +
                           (project files:Velocity)

Wednesday, March 4, 2009
speed
                              and
                           direction




Wednesday, March 4, 2009
speed
                              and
                           direction
                                            y velocity




                               x velocity


Wednesday, March 4, 2009
- y velocity



                           - x velocity          + x velocity




                                          + y velocity


Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
  float vx;
  float vy;




Wednesday, March 4, 2009
// interface:
  float vx;
  float vy;


                    // viewDidLoad:
                    vx = 2.0;
                    vy = 3.0;




Wednesday, March 4, 2009
// interface:
  float vx;
  float vy;


                    // viewDidLoad:
                    vx = 2.0;
                    vy = 3.0;

                           // onTimer:
                           ball.center = CGPointMake(x, y);
                           x += vx;
                           y += vy;


Wednesday, March 4, 2009
speed




                             angle


                           (project files: AngularVelocity)

Wednesday, March 4, 2009
y velocity
                                     speed                    =
                                                          sin(angle)
                                                               x
                                                            speed
                                 angle
                           x velocity = cos(angle) x speed
                              (project files: AngularVelocity)

Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
  float angle;
  float speed;




Wednesday, March 4, 2009
// interface:            // viewDidLoad:
  float angle;             angle = 45.0;
  float speed;             speed = 4.0;




Wednesday, March 4, 2009
// interface:            // viewDidLoad:
  float angle;             angle = 45.0;
  float speed;             speed = 4.0;




  // onTimer:
  ball.center = CGPointMake(x, y);
  x += cos(angle * M_PI / 180.0) * speed;
  y += sin(angle * M_PI / 180.0) * speed;




Wednesday, March 4, 2009
Acceleration




                           (project files: Acceleration)

Wednesday, March 4, 2009
Acceleration


                                 +
                           (project files: Acceleration)

Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
  float ax;
  float ay;




Wednesday, March 4, 2009
// interface:            // viewDidLoad:
  float ax;                ax = 0.07;
  float ay;                ay = 0.1;




Wednesday, March 4, 2009
// interface:                             // viewDidLoad:
  float ax;                                 ax = 0.07;
  float ay;                                 ay = 0.1;



                           // onTimer:
                           ball.center = CGPointMake(x, y);
                           x += vx;
                           y += vy;
                           vx += ax;
                           vy += ay;


Wednesday, March 4, 2009
Bouncing




                           (project files: Bouncing)

Wednesday, March 4, 2009
Wednesday, March 4, 2009
-x velocity y velocity




                                         y velocity
                            x velocity


Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
              float bounce;




Wednesday, March 4, 2009
// interface:
              float bounce;




                              // viewDidLoad:
                              bounce = -1.0;




Wednesday, March 4, 2009
ball.center = CGPointMake(x, y);
  x += vx;
  y += vy;
  if(x > 300)	 	 	  // 320 - radius (20)
  {
  	 x = 300;
  	 vx *= bounce;
  }
  else if(x < 20)		 // 0 + radius
  {
  	 x = 20;
  	 vx *= bounce;
  }


Wednesday, March 4, 2009
if(y > 440)	 	 // 460 - radius
              	
  {
  	 y = 440;
  	 vy *= bounce;
  }
  else if(y < 20)	 	 // 0 + radius
  {
  	 y = 20;
  	 vy *= bounce;
  }



Wednesday, March 4, 2009
Gravity



                               acceleration
                                   (+y)



Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
     float gravity;




Wednesday, March 4, 2009
// interface:
     float gravity;



                           // viewDidLoad:
                           gravity = 0.5;




Wednesday, March 4, 2009
// interface:
     float gravity;



                           // viewDidLoad:
                           gravity = 0.5;



                                             // onTimer:
                                             vy += gravity;



Wednesday, March 4, 2009
Wednesday, March 4, 2009
acceleration.y



                           acceleration.x



Wednesday, March 4, 2009
@interface GravityViewController :
  UIViewController <UIAccelerometerDelegate>
  {
  	 UIImageView *ball;
  	 float x;
  	 float y;
  	 float vx;
  	 float vy;
  	 float bounce;
  	 CGPoint gravity;
  }



Wednesday, March 4, 2009
Wednesday, March 4, 2009
// viewDidLoad
  gravity = CGPointZero;
  [[UIAccelerometer sharedAccelerometer]
      setDelegate:self];




Wednesday, March 4, 2009
// viewDidLoad
  gravity = CGPointZero;
  [[UIAccelerometer sharedAccelerometer]
      setDelegate:self];

  - (void)accelerometer:(UIAccelerometer *)accelerometer
          didAccelerate:(UIAcceleration *)acceleration
  {
  	 gravity = CGPointMake(acceleration.x,
                         -acceleration.y);
  }




Wednesday, March 4, 2009
// viewDidLoad
  gravity = CGPointZero;
  [[UIAccelerometer sharedAccelerometer]
      setDelegate:self];

  - (void)accelerometer:(UIAccelerometer *)accelerometer
          didAccelerate:(UIAcceleration *)acceleration
  {
  	 gravity = CGPointMake(acceleration.x,
                         -acceleration.y);
  }

  // onTimer
  vx += gravity.x;
  vy += gravity.y;


Wednesday, March 4, 2009
Do we still have time?



Wednesday, March 4, 2009
Dragging and Throwing



Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface
    BOOL dragging;




Wednesday, March 4, 2009
// interface           // viewDidLoad
    BOOL dragging;         dragging = NO;




Wednesday, March 4, 2009
// interface                         // viewDidLoad
    BOOL dragging;                       dragging = NO;



                           - (void)onTimer
                           {
                              if(!dragging)
                              {
                                 ...
                              }
                           }


Wednesday, March 4, 2009
- (void)touchesBegan:(NSSet *)touches
          withEvent:(UIEvent *)event
  {
  	 UITouch *touch = [touches anyObject];
  	 CGPoint point = [touch locationInView:self.view];
  	 float dx = point.x - x;
  	 float dy = point.y - y;
  	 float dist = sqrt(dx * dx + dy * dy);
  	 if(dist < 20)
  	{
  		    dragging = YES;
  		    x = point.x;
  		    y = point.y;
  		    vx = 0;
  		    vy = 0;
  	}
  }



Wednesday, March 4, 2009
- (void)touchesEnded:(NSSet *)touches
          withEvent:(UIEvent *)event
  {
  	 dragging = NO;
  }




Wednesday, March 4, 2009
- (void)touchesMoved:(NSSet *)touches
          withEvent:(UIEvent *)event
  {
  	 if(dragging)
  	{
  		    UITouch *touch = [touches anyObject];
  		    CGPoint point = [touch locationInView:self.view];
  		    vx = point.x - x;
  		    vy = point.y - y;
  		    x = point.x;
  		    y = point.y;
  		    ball.center = point;
  	}
  }	




Wednesday, March 4, 2009
Thank you
                   • Keith Peters
                   • kp@bit-101.com
                   • www.bit-101.com
                   • www.wickedpissahgames.com
                   • www.bit-101.com/360iDev/presentation.zip

Wednesday, March 4, 2009

Weitere ähnliche Inhalte

Mehr von John Wilker

Introtoduction to cocos2d
Introtoduction to  cocos2dIntrotoduction to  cocos2d
Introtoduction to cocos2dJohn Wilker
 
Getting Started with OpenGL ES
Getting Started with OpenGL ESGetting Started with OpenGL ES
Getting Started with OpenGL ESJohn Wilker
 
User Input in a multi-touch, accelerometer, location aware world.
User Input in a multi-touch, accelerometer, location aware world.User Input in a multi-touch, accelerometer, location aware world.
User Input in a multi-touch, accelerometer, location aware world.John Wilker
 
Physics Solutions for Innovative Game Design
Physics Solutions for Innovative Game DesignPhysics Solutions for Innovative Game Design
Physics Solutions for Innovative Game DesignJohn Wilker
 
Getting Oriented with MapKit: Everything you need to get started with the new...
Getting Oriented with MapKit: Everything you need to get started with the new...Getting Oriented with MapKit: Everything you need to get started with the new...
Getting Oriented with MapKit: Everything you need to get started with the new...John Wilker
 
Getting Started with iPhone Game Development
Getting Started with iPhone Game DevelopmentGetting Started with iPhone Game Development
Getting Started with iPhone Game DevelopmentJohn Wilker
 
Internationalizing Your Apps
Internationalizing Your AppsInternationalizing Your Apps
Internationalizing Your AppsJohn Wilker
 
Optimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application ResponsivenessOptimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application ResponsivenessJohn Wilker
 
I Phone On Rails
I Phone On RailsI Phone On Rails
I Phone On RailsJohn Wilker
 
Integrating Push Notifications in your iPhone application with iLime
Integrating Push Notifications in your iPhone application with iLimeIntegrating Push Notifications in your iPhone application with iLime
Integrating Push Notifications in your iPhone application with iLimeJohn Wilker
 
Starting Core Animation
Starting Core AnimationStarting Core Animation
Starting Core AnimationJohn Wilker
 
P2P Multiplayer Gaming
P2P Multiplayer GamingP2P Multiplayer Gaming
P2P Multiplayer GamingJohn Wilker
 
Using Concurrency To Improve Responsiveness
Using Concurrency To Improve ResponsivenessUsing Concurrency To Improve Responsiveness
Using Concurrency To Improve ResponsivenessJohn Wilker
 
Leaving Interface Builder Behind
Leaving Interface Builder BehindLeaving Interface Builder Behind
Leaving Interface Builder BehindJohn Wilker
 
Mobile WebKit Development and jQTouch
Mobile WebKit Development and jQTouchMobile WebKit Development and jQTouch
Mobile WebKit Development and jQTouchJohn Wilker
 
Accelerometer and OpenGL
Accelerometer and OpenGLAccelerometer and OpenGL
Accelerometer and OpenGLJohn Wilker
 
Deep Geek Diving into the iPhone OS and Framework
Deep Geek Diving into the iPhone OS and FrameworkDeep Geek Diving into the iPhone OS and Framework
Deep Geek Diving into the iPhone OS and FrameworkJohn Wilker
 
NSNotificationCenter vs. AppDelegate
NSNotificationCenter vs. AppDelegateNSNotificationCenter vs. AppDelegate
NSNotificationCenter vs. AppDelegateJohn Wilker
 
From Flash to iPhone
From Flash to iPhoneFrom Flash to iPhone
From Flash to iPhoneJohn Wilker
 

Mehr von John Wilker (20)

Introtoduction to cocos2d
Introtoduction to  cocos2dIntrotoduction to  cocos2d
Introtoduction to cocos2d
 
Getting Started with OpenGL ES
Getting Started with OpenGL ESGetting Started with OpenGL ES
Getting Started with OpenGL ES
 
User Input in a multi-touch, accelerometer, location aware world.
User Input in a multi-touch, accelerometer, location aware world.User Input in a multi-touch, accelerometer, location aware world.
User Input in a multi-touch, accelerometer, location aware world.
 
Physics Solutions for Innovative Game Design
Physics Solutions for Innovative Game DesignPhysics Solutions for Innovative Game Design
Physics Solutions for Innovative Game Design
 
Getting Oriented with MapKit: Everything you need to get started with the new...
Getting Oriented with MapKit: Everything you need to get started with the new...Getting Oriented with MapKit: Everything you need to get started with the new...
Getting Oriented with MapKit: Everything you need to get started with the new...
 
Getting Started with iPhone Game Development
Getting Started with iPhone Game DevelopmentGetting Started with iPhone Game Development
Getting Started with iPhone Game Development
 
Internationalizing Your Apps
Internationalizing Your AppsInternationalizing Your Apps
Internationalizing Your Apps
 
Optimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application ResponsivenessOptimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application Responsiveness
 
I Phone On Rails
I Phone On RailsI Phone On Rails
I Phone On Rails
 
Integrating Push Notifications in your iPhone application with iLime
Integrating Push Notifications in your iPhone application with iLimeIntegrating Push Notifications in your iPhone application with iLime
Integrating Push Notifications in your iPhone application with iLime
 
Starting Core Animation
Starting Core AnimationStarting Core Animation
Starting Core Animation
 
P2P Multiplayer Gaming
P2P Multiplayer GamingP2P Multiplayer Gaming
P2P Multiplayer Gaming
 
Using Concurrency To Improve Responsiveness
Using Concurrency To Improve ResponsivenessUsing Concurrency To Improve Responsiveness
Using Concurrency To Improve Responsiveness
 
Leaving Interface Builder Behind
Leaving Interface Builder BehindLeaving Interface Builder Behind
Leaving Interface Builder Behind
 
Mobile WebKit Development and jQTouch
Mobile WebKit Development and jQTouchMobile WebKit Development and jQTouch
Mobile WebKit Development and jQTouch
 
Accelerometer and OpenGL
Accelerometer and OpenGLAccelerometer and OpenGL
Accelerometer and OpenGL
 
Deep Geek Diving into the iPhone OS and Framework
Deep Geek Diving into the iPhone OS and FrameworkDeep Geek Diving into the iPhone OS and Framework
Deep Geek Diving into the iPhone OS and Framework
 
NSNotificationCenter vs. AppDelegate
NSNotificationCenter vs. AppDelegateNSNotificationCenter vs. AppDelegate
NSNotificationCenter vs. AppDelegate
 
Using SQLite
Using SQLiteUsing SQLite
Using SQLite
 
From Flash to iPhone
From Flash to iPhoneFrom Flash to iPhone
From Flash to iPhone
 

Kürzlich hochgeladen

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 

Kürzlich hochgeladen (20)

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 

Making things Move on the iPhone

  • 1. Making Things Move on the iPhone Keith Peters www.bit-101.com Wednesday, March 4, 2009
  • 2. www.bit-101.com/ 360iDev/ presentation.zip Wednesday, March 4, 2009
  • 5. Background 2005 Wednesday, March 4, 2009
  • 6. Background 2005 2007 Wednesday, March 4, 2009
  • 7. Background 2005 2007 2008 Wednesday, March 4, 2009
  • 15. Coded Animation Apply a rule Wednesday, March 4, 2009
  • 16. Coded Animation Apply a rule Change something Wednesday, March 4, 2009
  • 17. Coded Animation Apply a rule Update Change the screen something Wednesday, March 4, 2009
  • 18. Coded Animation Apply a rule Update Change the screen something Wednesday, March 4, 2009
  • 19. Make something to move Wednesday, March 4, 2009
  • 20. Make something to move Wednesday, March 4, 2009
  • 21. Make something to move (project files: Animation101) Wednesday, March 4, 2009
  • 22. // interface UIImageView *ball; // viewDidLoad ball = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@quot;ball.pngquot;]]; [self.view addSubview:ball]; Wednesday, March 4, 2009
  • 24. NSTimer [NSTimer scheduledTimerWithTimeInterval:1.0/60.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; Wednesday, March 4, 2009
  • 26. Moving UIViews • view.center Wednesday, March 4, 2009
  • 27. Moving UIViews • view.center • view.transform Wednesday, March 4, 2009
  • 28. Moving UIViews • view.center • view.transform • view.frame Wednesday, March 4, 2009
  • 29. // interface float x; float y; // viewDidLoad x = 50.0; y = 50.0; Wednesday, March 4, 2009
  • 30. ball.center = CGPointMake(x, y); x += 2.0; y += 3.0; Wednesday, March 4, 2009
  • 31. ball.frame = CGRectMake(x, y, width, height); x += 2.0; y += 3.0; Wednesday, March 4, 2009
  • 32. ball.transform = CGAffineTransformMakeTranslation(x, y); x += 2.0; y += 3.0; Wednesday, March 4, 2009
  • 33. ball.transform = CGAffineTransformTranslate( ball.transform, 2.0, 3.0); Wednesday, March 4, 2009
  • 35. Which is fastest? • view.center Wednesday, March 4, 2009
  • 36. Which is fastest? • view.center • view.transform (~2-3x) Wednesday, March 4, 2009
  • 37. Which is fastest? • view.center • view.transform (~2-3x) • view.frame (~2-3x) Wednesday, March 4, 2009
  • 38. Velocity (project files:Velocity) Wednesday, March 4, 2009
  • 39. Velocity + (project files:Velocity) Wednesday, March 4, 2009
  • 40. speed and direction Wednesday, March 4, 2009
  • 41. speed and direction y velocity x velocity Wednesday, March 4, 2009
  • 42. - y velocity - x velocity + x velocity + y velocity Wednesday, March 4, 2009
  • 44. // interface: float vx; float vy; Wednesday, March 4, 2009
  • 45. // interface: float vx; float vy; // viewDidLoad: vx = 2.0; vy = 3.0; Wednesday, March 4, 2009
  • 46. // interface: float vx; float vy; // viewDidLoad: vx = 2.0; vy = 3.0; // onTimer: ball.center = CGPointMake(x, y); x += vx; y += vy; Wednesday, March 4, 2009
  • 47. speed angle (project files: AngularVelocity) Wednesday, March 4, 2009
  • 48. y velocity speed = sin(angle) x speed angle x velocity = cos(angle) x speed (project files: AngularVelocity) Wednesday, March 4, 2009
  • 50. // interface: float angle; float speed; Wednesday, March 4, 2009
  • 51. // interface: // viewDidLoad: float angle; angle = 45.0; float speed; speed = 4.0; Wednesday, March 4, 2009
  • 52. // interface: // viewDidLoad: float angle; angle = 45.0; float speed; speed = 4.0; // onTimer: ball.center = CGPointMake(x, y); x += cos(angle * M_PI / 180.0) * speed; y += sin(angle * M_PI / 180.0) * speed; Wednesday, March 4, 2009
  • 53. Acceleration (project files: Acceleration) Wednesday, March 4, 2009
  • 54. Acceleration + (project files: Acceleration) Wednesday, March 4, 2009
  • 56. // interface: float ax; float ay; Wednesday, March 4, 2009
  • 57. // interface: // viewDidLoad: float ax; ax = 0.07; float ay; ay = 0.1; Wednesday, March 4, 2009
  • 58. // interface: // viewDidLoad: float ax; ax = 0.07; float ay; ay = 0.1; // onTimer: ball.center = CGPointMake(x, y); x += vx; y += vy; vx += ax; vy += ay; Wednesday, March 4, 2009
  • 59. Bouncing (project files: Bouncing) Wednesday, March 4, 2009
  • 61. -x velocity y velocity y velocity x velocity Wednesday, March 4, 2009
  • 63. // interface: float bounce; Wednesday, March 4, 2009
  • 64. // interface: float bounce; // viewDidLoad: bounce = -1.0; Wednesday, March 4, 2009
  • 65. ball.center = CGPointMake(x, y); x += vx; y += vy; if(x > 300) // 320 - radius (20) { x = 300; vx *= bounce; } else if(x < 20) // 0 + radius { x = 20; vx *= bounce; } Wednesday, March 4, 2009
  • 66. if(y > 440) // 460 - radius { y = 440; vy *= bounce; } else if(y < 20) // 0 + radius { y = 20; vy *= bounce; } Wednesday, March 4, 2009
  • 67. Gravity acceleration (+y) Wednesday, March 4, 2009
  • 69. // interface: float gravity; Wednesday, March 4, 2009
  • 70. // interface: float gravity; // viewDidLoad: gravity = 0.5; Wednesday, March 4, 2009
  • 71. // interface: float gravity; // viewDidLoad: gravity = 0.5; // onTimer: vy += gravity; Wednesday, March 4, 2009
  • 73. acceleration.y acceleration.x Wednesday, March 4, 2009
  • 74. @interface GravityViewController : UIViewController <UIAccelerometerDelegate> { UIImageView *ball; float x; float y; float vx; float vy; float bounce; CGPoint gravity; } Wednesday, March 4, 2009
  • 76. // viewDidLoad gravity = CGPointZero; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; Wednesday, March 4, 2009
  • 77. // viewDidLoad gravity = CGPointZero; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { gravity = CGPointMake(acceleration.x, -acceleration.y); } Wednesday, March 4, 2009
  • 78. // viewDidLoad gravity = CGPointZero; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { gravity = CGPointMake(acceleration.x, -acceleration.y); } // onTimer vx += gravity.x; vy += gravity.y; Wednesday, March 4, 2009
  • 79. Do we still have time? Wednesday, March 4, 2009
  • 82. // interface BOOL dragging; Wednesday, March 4, 2009
  • 83. // interface // viewDidLoad BOOL dragging; dragging = NO; Wednesday, March 4, 2009
  • 84. // interface // viewDidLoad BOOL dragging; dragging = NO; - (void)onTimer { if(!dragging) { ... } } Wednesday, March 4, 2009
  • 85. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint point = [touch locationInView:self.view]; float dx = point.x - x; float dy = point.y - y; float dist = sqrt(dx * dx + dy * dy); if(dist < 20) { dragging = YES; x = point.x; y = point.y; vx = 0; vy = 0; } } Wednesday, March 4, 2009
  • 86. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { dragging = NO; } Wednesday, March 4, 2009
  • 87. - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { if(dragging) { UITouch *touch = [touches anyObject]; CGPoint point = [touch locationInView:self.view]; vx = point.x - x; vy = point.y - y; x = point.x; y = point.y; ball.center = point; } } Wednesday, March 4, 2009
  • 88. Thank you • Keith Peters • kp@bit-101.com • www.bit-101.com • www.wickedpissahgames.com • www.bit-101.com/360iDev/presentation.zip Wednesday, March 4, 2009