只记录自己不熟悉的,具体见View Programming Guide for iOS - Animations篇
视图属性动画
- setAnimationsEnabled:
默认情况下,动画块中所有可动画属性的更改都将进行动画处理。如果你想要一部分进行动画处理剩下的不做动画,使用setAnimationsEnabled:方法临时禁用动画,做你想要的改变,然后在调用setAnimationsEnabled:允许动画。可以通过调用类方法areAnimationsEnabled 判断当前是否支持动画
Tables | Are |
---|---|
setAnimationStartDate: setAnimationDelay: | 使用这两个方法指明什么时候开始执行,如果指明的开始时间是过去的则动画立即执行 |
setAnimationDuration: | 使用这个方法指明动画时间 |
setAnimationCurve: | 使用此方法设置动画的时间曲线。 这控制动画是在某些时间线性执行还是改变速度。 |
setAnimationRepeatCount: setAnimationRepeatAutoreverses: | 使用这些方法设置动画重复次数以及在动画结束时是否反转 |
setAnimationDelegate: setAnimationWillStartSelect: setAnimationDidStopSelect: | 使用这些方法设置代理以及在动画开始前和结束后执行相应代码 |
setAnimationBeginFromCurrentState: | 使用这个方法去立即结束所有之前的动画并且在当前状态下开始新的动画。如果你将参数传为NO则新的动画将在之前的动画结束之后再执行 |
动画代理方法:
// This method begins the first animation.
- (IBAction)showHideView:(id)sender
{
[UIView beginAnimations:@"ShowHideView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(showHideDidStop:finished:context:)];
// Make the animatable changes.
thirdView.alpha = 0.0;
// Commit the changes and perform the animation.
[UIView commitAnimations];
}
// Called at the end of the preceding animation.
- (void)showHideDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
[UIView beginAnimations:@"ShowHideView2" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelay:1.0];
thirdView.alpha = 1.0;
[UIView commitAnimations];
}
动画代理方法应该如下所示:
- (void)animationWillStart:(NSString *)animationID context:(void *)context;
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context;
animationID和context是在动画块开始方法中beginAnimations:context: 传递的参数,
- animationID - 应用程序提供的用于标识动画的字符串。
- context - 应用程序提供的对象用于传递额外的信息给代理
setAnimationDidStopSelector:的方法有一个额外的参数——一个布尔值,如果是YES则表明动画执行完成。如果值为NO,则动画可能被取消或者被其他动画打断了。
创建视图过渡动画
视图过渡动画可以隐藏在视图层级中和添加,删除,隐藏和展示的相关的突然改变。可以通过使用视图过渡动画实现以下改变:
- 改变现有视图的可见子视图。当你想对现有视图做出一些小改变时使用这个选项
- 在视图层级中替换一个视图。当你想要改变整个或大部分屏幕视图的时候使用这个选项
改变子视图(iOS 4以后鼓励使用):
- (IBAction)displayNewPage:(id)sender
{
[UIView transitionWithView:self.view
duration:1.0
options:UIViewAnimationOptionTransitionCurlUp
animations:^{
currentTextView.hidden = YES;
swapTextView.hidden = NO;
}
completion:^(BOOL finished){
// Save the old text and then swap the views.
[self saveNotes:temp];
UIView* temp = currentTextView;
currentTextView = swapTextView;
swapTextView = temp;
}];
}
使用begin/commit方法改变子视图
[UIView beginAnimations:@"ToggleSiblings" context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
[UIView setAnimationDuration:1.0];
// Make your changes
[UIView commitAnimations];
替换视图
- (IBAction)toggleMainViews:(id)sender {
[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView)
toView:(displayingPrimary ? secondaryView : primaryView)
duration:1.0
options:(displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight :
UIViewAnimationOptionTransitionFlipFromLeft)
completion:^(BOOL finished) {
if (finished) {
displayingPrimary = !displayingPrimary;
}
}];
}