UIViewAnimationState

From iPhone Development Wiki
Jump to: navigation, search

UIViewAnimationState is the manager class of UIView animation blocks. The system maintains a private global stack that contains all pending animation states. When a state is popped, the corresponding animation begins.

The animations will all go back to QuartzCore (Core Animation).

Contents

Drag coefficient

Signature CGFloat UIAnimationDragCoefficient();
Available in 2.0 –

The drag coefficient is a multiplier applied on time measurements. A large drag coefficient can slow down animations.

The drag coefficient is obtained with the UIAnimationDragCoefficient() function, which in turn is an integer of the key UIAnimationDragCoefficient in the preference file ~/Library/Preferences/com.apple.UIKit.plist.

Drag coefficient will not affect non-UIKit animations.

Animation transitions

Besides the default 4, the iPhoneOS identifies tons of transition effects, all value numerical value starting from 101:

Numeric String Available on 3.x Comments
0 (UIViewAnimationTransitionNone) - Yes
1 (UIViewAnimationTransitionFlipFromLeft) oglFlip, fromLeft Yes
2 (UIViewAnimationTransitionFlipFromRight) oglFlip, fromRight Yes
3 (UIViewAnimationTransitionCurlUp) pageCurl Yes
4 (UIViewAnimationTransitionCurlDown) pageUnCurl Yes
101 pageCurl Yes Equivalent to UIViewAnimationTransitionCurlUp
102 pageUnCurl Yes Equivalent to UIViewAnimationTransitionCurlDown
103 suckEffect Yes Sucked to around (160, 360) on the screen.
104 spewEffect No
105 cameraIris Yes You should assume the view you're operating on has a black background.
106 cameraIrisHollowClose Yes First half of cameraIris.
107 cameraIrisHollowOpen Yes Second half of cameraIris.
108 genieEffect No
109 unGenieEffect No
110 rippleEffect Yes
111 twist No
112 tubey No
113 swirl No
114 charminUltra No
115 zoomyIn No
116 zoomyOut No
117 oglApplicationSuspend No

Using suckEffect

The most SDK-compatible way of using suckEffect is to use animation blocks. But the suction point by default is close to nowhere. Therefore you still need to use the undocumented method +[UIView setAnimationPosition:]:

[UIView beginAnimations:@"suck" context:NULL];
[UIView setAnimationTransition:103 forView:myViewContainer cache:YES];
[UIView setAnimationPosition:CGPointMake(12, 345)];
[myView removeFromSuperview];
[UIView commitAnimations];

Curl-up animation

Starting from 3.2, you can mimic the Maps curl-up animation using animation blocks. The syntax is:

[UIView beginAnimations:@"curlUp" context:NULL];
[UIView _setAnimationFilter:200 forView:view_to_curl_up];
[UIView _setAnimationFilterValue:height_to_curl_for];
[UIView commitAnimations];

This is converted into a pageCurl filter, with the parameters:

  • inputRadius = 20
  • inputAngle = 4.5379 (= 260°)
  • endTime = (200 + 0.174 width + 0.985 height_to_curl_for) / (200 + 0.174 width + 0.985 height), and clipped within [0.65, 0.9]

References