Submit Search
Upload
Making things Move on the iPhone
•
2 likes
•
962 views
J
John Wilker
Follow
Keith Peters - "Making things Move on the iPhone", 360|iDev San Jose '09
Read less
Read more
Technology
News & Politics
Report
Share
Report
Share
1 of 88
Download now
Download to read offline
Recommended
Exporting from ebsco to ref works
Exporting from ebsco to ref works
Bialik Hebrew Day School
Refworks 2.0 in 15 minutes
Refworks 2.0 in 15 minutes
Bialik Hebrew Day School
Cranking Floating Point Performance Up To 11
Cranking Floating Point Performance Up To 11
John Wilker
Flash on Tap slides
Flash on Tap slides
jkosoy
The ABC of User Testing
The ABC of User Testing
GabrielRadic
OpenID DrupalCon 2009
OpenID DrupalCon 2009
James Walker
Encontro Locaweb Porto Alegre
Encontro Locaweb Porto Alegre
Fabio Akita
DrupalCon DC: Busines Analytics with Views
DrupalCon DC: Busines Analytics with Views
Irakli Nadareishvili
Recommended
Exporting from ebsco to ref works
Exporting from ebsco to ref works
Bialik Hebrew Day School
Refworks 2.0 in 15 minutes
Refworks 2.0 in 15 minutes
Bialik Hebrew Day School
Cranking Floating Point Performance Up To 11
Cranking Floating Point Performance Up To 11
John Wilker
Flash on Tap slides
Flash on Tap slides
jkosoy
The ABC of User Testing
The ABC of User Testing
GabrielRadic
OpenID DrupalCon 2009
OpenID DrupalCon 2009
James Walker
Encontro Locaweb Porto Alegre
Encontro Locaweb Porto Alegre
Fabio Akita
DrupalCon DC: Busines Analytics with Views
DrupalCon DC: Busines Analytics with Views
Irakli Nadareishvili
Introtoduction to cocos2d
Introtoduction to cocos2d
John Wilker
Getting Started with OpenGL ES
Getting Started with OpenGL ES
John Wilker
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 Design
John 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...
John Wilker
Getting Started with iPhone Game Development
Getting Started with iPhone Game Development
John Wilker
Internationalizing Your Apps
Internationalizing Your Apps
John Wilker
Optimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application Responsiveness
John Wilker
I Phone On Rails
I Phone On Rails
John Wilker
Integrating Push Notifications in your iPhone application with iLime
Integrating Push Notifications in your iPhone application with iLime
John Wilker
Starting Core Animation
Starting Core Animation
John Wilker
P2P Multiplayer Gaming
P2P Multiplayer Gaming
John Wilker
Using Concurrency To Improve Responsiveness
Using Concurrency To Improve Responsiveness
John Wilker
Leaving Interface Builder Behind
Leaving Interface Builder Behind
John Wilker
Mobile WebKit Development and jQTouch
Mobile WebKit Development and jQTouch
John Wilker
Accelerometer and OpenGL
Accelerometer and OpenGL
John Wilker
Deep Geek Diving into the iPhone OS and Framework
Deep Geek Diving into the iPhone OS and Framework
John Wilker
NSNotificationCenter vs. AppDelegate
NSNotificationCenter vs. AppDelegate
John Wilker
Using SQLite
Using SQLite
John Wilker
From Flash to iPhone
From Flash to iPhone
John Wilker
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
Antenna Manufacturer Coco
More Related Content
More from John Wilker
Introtoduction to cocos2d
Introtoduction to cocos2d
John Wilker
Getting Started with OpenGL ES
Getting Started with OpenGL ES
John Wilker
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 Design
John 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...
John Wilker
Getting Started with iPhone Game Development
Getting Started with iPhone Game Development
John Wilker
Internationalizing Your Apps
Internationalizing Your Apps
John Wilker
Optimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application Responsiveness
John Wilker
I Phone On Rails
I Phone On Rails
John Wilker
Integrating Push Notifications in your iPhone application with iLime
Integrating Push Notifications in your iPhone application with iLime
John Wilker
Starting Core Animation
Starting Core Animation
John Wilker
P2P Multiplayer Gaming
P2P Multiplayer Gaming
John Wilker
Using Concurrency To Improve Responsiveness
Using Concurrency To Improve Responsiveness
John Wilker
Leaving Interface Builder Behind
Leaving Interface Builder Behind
John Wilker
Mobile WebKit Development and jQTouch
Mobile WebKit Development and jQTouch
John Wilker
Accelerometer and OpenGL
Accelerometer and OpenGL
John Wilker
Deep Geek Diving into the iPhone OS and Framework
Deep Geek Diving into the iPhone OS and Framework
John Wilker
NSNotificationCenter vs. AppDelegate
NSNotificationCenter vs. AppDelegate
John Wilker
Using SQLite
Using SQLite
John Wilker
From Flash to iPhone
From Flash to iPhone
John Wilker
More from John Wilker
(20)
Introtoduction to cocos2d
Introtoduction to cocos2d
Getting 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.
Physics 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 Started with iPhone Game Development
Getting Started with iPhone Game Development
Internationalizing Your Apps
Internationalizing Your Apps
Optimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application Responsiveness
I Phone On Rails
I Phone On Rails
Integrating Push Notifications in your iPhone application with iLime
Integrating Push Notifications in your iPhone application with iLime
Starting Core Animation
Starting Core Animation
P2P Multiplayer Gaming
P2P Multiplayer Gaming
Using Concurrency To Improve Responsiveness
Using Concurrency To Improve Responsiveness
Leaving Interface Builder Behind
Leaving Interface Builder Behind
Mobile WebKit Development and jQTouch
Mobile WebKit Development and jQTouch
Accelerometer and OpenGL
Accelerometer and OpenGL
Deep Geek Diving into the iPhone OS and Framework
Deep Geek Diving into the iPhone OS and Framework
NSNotificationCenter vs. AppDelegate
NSNotificationCenter vs. AppDelegate
Using SQLite
Using SQLite
From Flash to iPhone
From Flash to iPhone
Recently uploaded
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
Antenna Manufacturer Coco
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
Igalia
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
Maria Levchenko
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Igalia
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
ThousandEyes
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
wesley chun
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
sudhanshuwaghmare1
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Katpro Technologies
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Khem
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Miguel Araújo
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
The Digital Insurer
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
Results
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
Michael W. Hawkins
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
wesley chun
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Rafal Los
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
Radu Cotescu
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
Puma Security, LLC
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
Anna Loughnan Colquhoun
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
Recently uploaded
(20)
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
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
3.
CoreAnimation Wednesday, March 4,
2009
4.
Background 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
8.
Wednesday, March 4,
2009
9.
Wednesday, March 4,
2009
10.
Wednesday, March 4,
2009
11.
What is Animation? Wednesday,
March 4, 2009
12.
Wednesday, March 4,
2009
13.
Wednesday, March 4,
2009
14.
Coded Animation 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
23.
NSTimer 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
25.
Moving UIViews 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
34.
Which is fastest? 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
43.
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
49.
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
55.
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
60.
Wednesday, March 4,
2009
61.
-x velocity y
velocity y velocity x velocity Wednesday, March 4, 2009
62.
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
68.
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
72.
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
75.
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
80.
Dragging and Throwing Wednesday,
March 4, 2009
81.
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
Download now