# iOS学习之UIView Animation

• 动画

• UIView中哪些属性可以做动画？
UIKit和Core Animation都提供了动画支持，但动画支持的层面因两者的技术差异而不同。在UIKit中，动画的执行者是视图对象。Views支持了一组基本涵盖许多常见任务的动画。

Table 4-1  Animatable UIView properties

Property

Changes you can make

frame

Modify this property to change the view’s size and position relative to its superview’s coordinate system. (If the transform property does not contain the identity transform, modify the bounds or center properties instead.)

bounds

Modify this property to change the view’s size.

center

Modify this property to change the view’s position relative to its superview’s coordinate system.

transform

Modify this property to scale, rotate, or translate the view relative to its center point. Transformations using this property are always performed in 2D space. (To perform 3D transformations, you must animate the view’s layer object using Core Animation.)

alpha

Modify this property to gradually change the transparency of the view.

backgroundColor

Modify this property to change the view’s background color.

contentStretch

Modify this property to change the way the view’s contents are stretched to fill the available space.

• 视图的属性动画

• 用block块执行动画

• animateWithDuration:animations:
• animateWithDuration:animations:completion:
• animateWithDuration:delay:options:animations:completion:

• The delay to use before starting the animation
delay设置动画延迟调用时间
• The type of timing curve to use during the animation
动画运动曲线类型
• The number of times the animation should repeat
• 动画的执行次数，是否需要重复
• Whether the animation should reverse itself automatically when it reaches the end
• 动画执行完是否需要逆向执行动画
• Whether touch events are delivered to views while the animations are in progress

• Whether the animation should interrupt any in-progress animations or wait until those are complete before starting

• 用begin/commit方法执行动画

 [UIViewbeginAnimations:@"animation"context:nil];

//添加动画块，在这区间
[UIViewcommitAnimations];

PS:Changing the value of a property while an animation involving that property is in progress does not stop the current animation. Instead, the animation continues and animates to the new value you just assigned to the property.在动画过程中改变动画中的属性不会停止当的的动画，相反，动画会继续执行并且会执行到最新的属性值

Table 4-2  Methods for configuring animation blocks

Method

Usage

setAnimationStartDate:

setAnimationDelay:

Use either of these methods to specify when the executions should begin executing. If the specified start date is in the past (or the delay is 0), the animations begin as soon as possible.

setAnimationDuration:

Use this method to set the period of time over which to execute the animations.

setAnimationCurve:

Use this method to set the timing curve of the animations. This controls whether animations execute linearly or change speed at certain times.

setAnimationRepeatCount:

setAnimationRepeatAutoreverses:

Use these methods to set the number of times the animation repeats and whether the animation runs in reverse at the end of each complete cycle. For more information about using these methods, see Implementing Animations That Reverse Themselves.

setAnimationDelegate:

setAnimationWillStartSelector:

setAnimationDidStopSelector:

Use these methods to execute code immediately before or after the animations. For more information about using a delegate, see Configuring an Animation Delegate.

setAnimationBeginsFromCurrentState:

Use this method to stop all previous animations immediately and start the new animations from the stopping point. If you pass NO to this method, instead of YES, the new animations do not begin executing until the previous animations stop.

• 配置动画的代理：

 - (void)animationWillStart:(NSString *)animationID context:(void *)context; - (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context;

 [UIView beginAnimations:@"ShowHideView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(showHideDidStop:finished:context:)];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:_thirdView cache:YES];
// 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];
//    UIView setAnimationTransition:<#(UIViewAnimationTransition)#> forView:<#(UIView *)#> cache:<#(BOOL)#>
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:_thirdView cache:YES];
_thirdView.alpha = 1.0;

[UIView commitAnimations];
}

ps:

Although animation delegates can be used in the block-based methods, there is generally no need to use them there. Instead, place any code you want to run before the animations at the beginning of your block and place any code you want to run after the animations finish in a completion handler.

  [UIViewanimateWithDuration:2animations:^{
self.view.alpha=1;
self.view.backgroundColor=[UIColorgroupTableViewBackgroundColor];
[UIViewanimateWithDuration:2delay:0options:UIViewAnimationOptionTransitionCurlDownanimations:^{
self.view.alpha=.3;
self.view.backgroundColor=[UIColoryellowColor];
} completion:^(BOOLfinished) {

}];

} completion:^(BOOLfinished) {

}];


View transitions help you hide sudden changes associated with adding, removing, hiding, or showing views in your view hierarchy. You use view transitions to implement the following types of changes:

• Change the visible subviews of an existing view. You typically choose this option when you want to make relatively small changes to an existing view.

• Replace one view in your view hierarchy with a different view. You typically choose this option when you want to replace a view hierarchy that spans all or most of the screen.

Important: View transitions should not be confused with transitions initiated by view controllers, such as the presentation of modal view controllers or the pushing of new view controllers onto a navigation stack. View transitions affect the view hierarchy only, whereas view-controller transitions change the active view controller as well. Thus, for view transitions, the view controller that was active when you initiated the transition remains active when the transition finishes.

For more information about how you can use view controllers to present new content, see View Controller Programming Guide for iOS.

 [UIViewtransitionWithView:_secondViewduration:1.0options:UIViewAnimationOptionTransitionFlipFromRight|UIViewAnimationOptionOverrideInheritedCurve
animations:^{
_secondView.hidden=NO;
} completion:nil];


 [UIView transitionFromView:_thirdView toView: _secondView duration:2 options:UIViewAnimationOptionTransitionFlipFromTop|UIViewAnimationOptionShowHideTransitionViews
completion:^(BOOL finished) { }];


• 本文已收录于以下专栏：

## iOS Core Animation笔记--UIView和CALayer

UIViewiOS中所有的视图均是从UIVIew派生的，UIVIew可以处理触摸事件、支持Core Graphics绘图、可以做仿射变换（例如旋转、缩放）、也可以做一些滑动或渐变的动画CALayerC...

## iOS 动画Animation详解, UIView动画,CALayer动画

//iOS 动画Animation详解, UIView动画(UIView属性动画,UIViewTransition动画,UIView Block动画),CALayer动画(CABasicAnima, ...

## iOS UI学习之路02 - UIWindow、UIView详解

UIKit框架结构 构建和管理你的用户界面 捕获触摸和基于移动的事件 呈现文字和web内容 创建定制用户界面元素 UIView（视图）框架的结构图 Window和View的关系 ...

## iOS学习笔记－－UIView的常见属性及方法,UIViewAnimationWithBlocks

@interface UIView : UIResponder /** * 通过一个frame来初始化一个UI控件 */ - (id)initWithFrame:(CGRect)frame; ...

举报原因： 您举报文章：深度学习：神经网络中的前向传播和反向传播算法推导 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)