iOS之UIView Animations

UIView Animations 是我们在开发中经常用到的一种动画实现方式,它主要包含四方面的内容:
  • BaseAnimation 
  • Springs
  • Transitions
  • Keyframe Animations
在正式说UIView Animations之前我们先来了解一个重要的动画属性:UIViewAnimationOptions
UIViewAnimationOptions是iOS4.0及以后出的一个UIViewAnimation属性,用于设置动画的一些定制效果,

其主要包含三个方面的属性设置:

常规动画属性设置:
  • .layoutSubviews:动画过程中保证子视图跟随运动
  • .allowUserInteraction:动画过程中允许用户交互
  • .beginFromCurrentState:所有视图从当前状态开始运行
  • .repeat:重复运行动画
  • .autoreverse :动画运行到结束点后仍然以动画方式回到初始点。
  • .overrideInheritedDuration:忽略嵌套动画时间设置。
  • .overrideInheritedCurve:忽略嵌套动画速度设置。
  • .allowAnimatedContent:动画过程中重绘视图(注意仅仅适用于转场动画)。  
  • .showHideTransitionViews:视图切换时直接隐藏旧视图、显示新视图,而不是将旧视图从父视图移除(仅仅适用于转场动画)
  • .overrideInheritedOptions :不继承父动画设置或动画类型
Animation easing:
  • .curveLinear: 匀速执行
  • .curveEaseIn:
  • .curveEaseOut:
  • .curveEaseInOut:
转场类型:(仅适用于转场动画设置,可以从中选择一个进行设置,基本动画、关键帧动画不需要设置)
  • .transitionNone:没有转场动画效果。
  • .transitionFlipFromLeft :从左侧翻转效果。
  • .transitionFlipFromRight:从右侧翻转效果。
  • .transitionCurlUp:向后翻页的动画过渡效果。    
  • .transitionCurlDown :向前翻页的动画过渡效果。    
  • .transitionCrossDissolve:旧视图溶解消失显示下一个新视图的效果。    
  • .transitionFlipFromTop :从上方翻转效果。    
  • .transitionFlipFromBottom:从底部翻转效果。
下面再来说说UIViewAnimations
一、BaseAnimation
baseAnimation主要完成一些简单的动画效果,如位置平移,透明度变化等,例如:

UIView.animate(withDuration: 0.5) {
  
}
UIView.animate(withDuration: 0.5, delay: 0.3, options: [],
  animations: {
},
  completion: nil
)

UIView.animate(withDuration: 0.5, delay: 0.3, options: [],
  animations: {
},
  completion: nil
)

上面的例子中:
  • withDuration: 动画时间
  • delay: 动画开始前的等待时间
  • options: UIViewAnimationOptions类型的动画细节相关定制
  • animations: 动画的闭包
  • completion: 动画完成后的操作
二、Springs
springs 主要是实现弹簧效果,主要用到的方法是:
UIView.animate(withDuration: 0.5, delay: 0.5,
usingSpringWithDamping: 0.0, initialSpringVelocity: 0.0, options: [],
animations: {
//
}, completion: nil)

上面的例子中:
  • withDuration: 动画时间
  • delay: 动画开始前的等待时间
  • usingSpringWithDamping: 阻尼常数,范围为0.0-1.0,数值越小,表示阻力越小,即停下来需要的时间越久
  • initialSpringVelocity: 动力指数,动力越大,初始速度越大
  • options: UIViewAnimationOptions类型的动画细节相关定制
  • animations:动画处理
  • completion:动画完成后的操作

三、Transitions
主要用于一些过渡动画的开发,其主要包含的方法如下:
UIView.transition(with: animationContainerView,
    duration: 0.33,
    options: [.curveEaseOut, .transitionFlipFromBottom],
    animations: {
},
    completion: nil
  )
UIView.transition(from: oldView, to: newView, duration: 0.33,
  options: .transitionFlipFromTop, completion: nil)

四、Keyframe Animations
有些时候可能会遇到制作复杂、具有连贯性UIView动画的需求,这时如果使用在completion闭包中衔接一段一段的动画,使之成为一段连续的动画,如果只是连接2个,或者3个动画,这种方式或许还行得通,但如果有更多的动画片段需要连接的时候,这种方式就会有很大的问题,代码会非常的冗余,不断的在completion闭包中嵌套代码。
这时最好的办法就是使用Keyframe AnimationsKeyframe Animations可以让我们有效的拆分由若干段动画连接而成的复杂动画,可以较为精准的定义每段动画的起始点及持续时间,并且在代码组织方面也非常清晰。

Keyframe Animations的一般使用:
UIView.animateKeyframes(withDuration: duration, delay: delay,
      animations: {
        //add keyframes
        UIView.addKeyframe(withRelativeStartTime: time1, relativeDuration: duration1,
          animations: {          
          }
        )
        UIView.addKeyframe(withRelativeStartTime: time2, relativeDuration: duration2) {        
        }
        UIView.addKeyframe(withRelativeStartTime: time3, relativeDuration: duration3) {      
        }  
      },
      completion: nil
    )


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值