UIView动画简述
UIView 动画能够完美的建立起一座连接视图当前状态和未来状态的视觉桥梁。利用这个特性,你可以把所有的视觉变化连接起来形成动画,从而给用户带来更好的体验。可以产生UIView动画效果的变化包括
@property frame //基于父视图的位置和大小
@property bounds //改变视图的框架和边界
@property center //改变视图的中心
@property transform //仿射变换
@property alpha //改变透明度
@property backgroundColor //改变背景颜色
@property contentStretch //拉伸变换
注意:大部分的动画效果都有一个准备时长,在viewDidLoad方法中直接调用的时候可能会显现不出动画的效果。
UIView动画块
首先我们先来看几个方法,以下的类方法都由UIView来调用,设置动画的一些相关的属性。
- 开始构建动画,标志着动画块的开始
animationID:标记动画的ID,可以简单理解为这个动画的名字
context:上下文,可以为动画的代理方法传值
如果不想给这两个参数,也可以填nil,一般建议给animationID一个参数。
+(void)beginAnimations:(nullable NSString *)animationID context:(nullable void *)context;
- 定义动画加速和减速的方式
curve:是UIViewAnimationCurve的一个枚举值。
+(void)setAnimationCurve:(UIViewAnimationCurve)curve;
下面是它的四个枚举值,这四种方式分别为淡入淡出、淡入、淡出、线性。其中淡入淡出效果最为自然。
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {
UIViewAnimationCurveEaseInOut, // slow at beginning and end
UIViewAnimationCurveEaseIn, // slow at beginning
UIViewAnimationCurveEaseOut, // slow at end
UIViewAnimationCurveLinear
};
- 以秒为单位指定动画的时长。
尽量让动画在1到2秒内完成,以免让用户觉得不耐烦。
+(void)setAnimationDuration:(NSTimeInterval)duration; // default = 0.2
- 设置动画的重复次数。
如果填写的不是整数,而是带有小数的,动画会执行不完整,所以切记不要给小数。
+(void)setAnimationRepeatCount:(float)repeatCount;
- 反转,让动画原速返回,只有设置了重复次数,此方法才会生效。
+(void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;
- 设置动画播放时的回调对象
+(void)setAnimationDelegate:(nullable id)delegate;
- 动画开始和结束时的回调方法。
+(void)setAnimationWillStartSelector:(nullable SEL)selector;
// default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context
+(void)setAnimationDidStopSelector:(nullable SEL)selector;
// default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
- 提交动画,也标识着动画块的结束。
在我们设置完动画的一些相关的属性后,我们需要提交这个动画,才能完成整个流程的操作。
注意,所有有关于动画的设置必须都在这个调用这个方法之前进行,否则无效。
+(void)commitAnimations;
示例代码
以下是一个让红色的View移动的动画,我们只需要在合适的地方调用它就可以看到效果了。
- (void)animationAction{
//开始构建动画
//第一个参数:动画的标记
//第二个参数:上下文,可以为动画的代理方法传值。
[UIView beginAnimations:@"第一个动画" context:@"55555"];
//动画的时长
[UIView setAnimationDuration:0.05];
//重复次数
[UIView setAnimationRepeatCount:10];
//反转,让动画原速返回,只有设置了重复次数,此属性才会生效
[UIView setAnimationRepeatAutoreverses:YES];
//设置动画播放的回调对象
[UIView setAnimationDelegate:self];
//代理方法中动画开始时的回调方法
[UIView setAnimationWillStartSelector:@selector(amimationWillStart: context:)];
//代理方法中动画结束时的回调方法
[UIView setAnimationDidStopSelector:@selector(animationStop: context:)];
//改变redView的frame
CGRect rect = self.redView.frame;
rect.origin = CGPointMake(250, 300);
self.redView.frame = rect;
//提交动画
[UIView commitAnimations];
}
下面是上述代码中两个代理方法的回调方法
- (void)amimationWillStart:(NSString *)animationTag context:(NSString *)context{
NSLog(@"%@就要开始了----context---%@",animationTag,context);
}
- (void)animationStop:(NSString *)animatonTag context:(NSString *)context{
NSLog(@"%@就要停止了----context---%@",animatonTag,context);
}
过渡动画
调用这个方法就可以实现对指定视图的过渡效果,transition是一个枚举值,它决定了过渡的效果,cache参数是告诉系统是否用cache进行动画,一般填YES。
+(void)setAnimationTransition:(UIViewAnimationTransition)transition forView:
(UIView *)view cache:(BOOL)cache;
示例代码
以下是一个过渡动画的示例
-(void)aniamtion{
[UIView beginAnimations:@"animation" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.aView cache:YES];
[UIView commitAnimations];
}
转场动画
转场动画是过渡动画的一个兄弟类型,它和过渡动画的效果类似,它的应用场景一般使用在,我们需要在两个视图之间进行切换的时候,它与过渡动画不同的是,它的效果不管你的视图是多大的,都会进行一个全屏的动画效果,而过渡动画的效果只局限于这个视图的范围内。
示例代码
- (void)transitionAnimation{
// 转场动画在转场的时候做的操作。
// [self.redView.superview addSubview:self.green];
// [self.redView removeFromSuperview];
[UIView transitionFromView:self.redView toView:self.green duration:2.0
options:UIViewAnimationOptionTransitionFlipFromBottom completion:nil];
}
以上是关于UIView的基本动画的使用以及我的个人理解。