UIView动画

作者: Mr_LiTong | 来源:发表于2016-09-26 18:26 被阅读397次

主要用到两个方法:

/**
 *  添加关键帧方法
 *
 *  @param duration   动画时长
 *  @param delay      动画延迟
 *  @param options    动画效果选项
 *  @param animations 动画执行代码
 *  @param completion 动画结束执行代码
 */
class  func animateKeyframes(withDuration 
  duration: TimeInterval, 
  delay: TimeInterval, 
  options: UIViewKeyframeAnimationOptions = [], 
  animations: @escaping () -> Swift.Void, 
  completion: (@escaping (Bool) -> Swift.Void)? = nil)
/**
 *  添加关键帧
 *
 *  @param frameStartTime 动画相对开始时间,取值为0-1.0
 *  @param frameDuration  动画相对持续时间,取值为0-1.0
 *  @param animations     动画执行代码
 */
class func addKeyframe(withRelativeStartTime
   frameStartTime: Double, 
  relativeDuration frameDuration: Double, 
  animations: @escaping () -> Swift.Void)

例子

func Animation(){
        let animationView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        animationView.backgroundColor = UIColor.green
        self.view.addSubview(animationView)
        
        UIView.animateKeyframes(withDuration: 3, delay: 0, options: .calculationModeLinear, animations: {
            UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration:0.2) {
                animationView.frame.origin.y = 500
            }
            UIView.addKeyframe(withRelativeStartTime: 0.2, relativeDuration: 0.5) {
                animationView.frame.origin.x = 300
            }
            UIView.addKeyframe(withRelativeStartTime: 0.7, relativeDuration: 0.3) {
                animationView.frame.origin.y = 300
            }
        }) { (finished) in
                //动画完成
        }
    }

翻转和翻页动画

主要方法

/**
 *  
 * 为view设置翻转货翻页动画
 *  @param transition   设置动画类型
 *  @param for view      执行动画的view
 *  @param cache    
 */
class func setAnimationTransition(_ transition: UIViewAnimationTransition, 
  for view: UIView, 
  cache: Bool)

设置动画类型

public enum UIViewAnimationTransition : Int {

    
    case none

    case flipFromLeft //从左往右翻转

    case flipFromRight //从右往左翻转

    case curlUp //从上往下翻转

    case curlDown //从下往上翻转
}

例子:

func Animation6(){
        UIView.beginAnimations(nil, context: nil)
        UIView.setAnimationDuration(1)
        UIView.setAnimationCurve(.easeInOut)
        //从左向右翻转
        UIView.setAnimationTransition(UIViewAnimationTransition.flipFromLeft, for: animationView, cache: false)//从左向右翻转
        UIView.commitAnimations()
    }

旋转,缩放,平移,取反

实现方法为设置View 的transform属性
创建一个CGAffineTransform实例

//向右向下平移是个单位,中心点位置改变
let transform = CGAffineTransform(translationX: 10, y: 10)
//旋转PI /4 个角度,中心点位置不变
let transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_4))
//宽缩放为原来的2倍,高缩放为原来的3倍,中心点位置不变
let transform = CGAffineTransform(scaleX: 2, y: 3)
//取反是吧CGAffineTransform的值取反,不是恢复到原来的状态
//例如:顺时针旋转90度取反就是逆时针旋转90度。
let transform = CGAffineTransform.inverted(animationView.transform)

例子:

//平移
func Animation11(){
        let transform = CGAffineTransform(translationX: 10, y: 10)
        UIView.animate(withDuration: 2, animations: {
            self.animationView.transform = transform
            
        }) { (finished) in
            print(NSStringFromCGRect(self.animationView.frame))
        }
    }

在主线程中调用Animation()方法即可查看效果。
本文参考文章:
http://www.tuicool.com/articles/BjMrQne
http://blog.csdn.net/mad2man/article/details/17554621

相关文章

网友评论

    本文标题:UIView动画

    本文链接:https://www.haomeiwen.com/subject/japqyttx.html