iOS UIView基本动画

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的基本动画的使用以及我的个人理解。

转载于:https://juejin.im/post/5c1a0dff518825659869ffad

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值