animateKeyframes 与 Animation

这里写图片描述
这里写图片描述

import UIKit

class ViewController: UIViewController {


  @IBOutlet weak var fj:UIImageView!
  @IBOutlet weak var yd1:UIImageView!
  @IBOutlet weak var yd2:UIImageView!
  @IBOutlet weak var yd3:UIImageView!
  @IBOutlet weak var yd4:UIImageView!

  override func viewDidLoad() {
    super.viewDidLoad()
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

  override func viewWillAppear(_ animated: Bool) {

    // yd1.alpha = 0
    yd1.center.x -= 100
    yd2.center.x += 100

    yd3.center.x -= 100
    yd4.center.x += 100
  }

  override func viewDidAppear(_ animated: Bool) {

    let oriCenter = fj.center

    UIView.animate(withDuration: 2, delay: 0.2, options: UIViewAnimationOptions(rawValue: UIViewAnimationOptions.repeat.rawValue | UIViewAnimationOptions.autoreverse.rawValue), animations: {
      // self.yd1.alpha = 1
      self.yd1.center.x += 100
      self.yd2.center.x -= 100
      self.yd3.center.x += 100
      self.yd4.center.x -= 100
    }, completion: nil)
//
    // 关键帧动画
    UIView.animateKeyframes(withDuration: 3, delay: 0.1, options: UIViewKeyframeAnimationOptions.repeat, animations: { () -> Void in
      //第一段
      UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.25, animations: {
        self.fj.center.x += 60.0
        self.fj.center.y -= 100.0
      })

//      // 旋转
      UIView.addKeyframe(withRelativeStartTime: 0.1, relativeDuration: 0.4, animations: {
        self.fj.transform = CGAffineTransform
          .identity
          .rotated(by: CGFloat(-Double.pi/4/2))
      })

      UIView.addKeyframe(withRelativeStartTime: 0.25, relativeDuration: 0.25, animations: {
        self.fj.center.x += 100.0
        self.fj.center.y -= 50.0
        self.fj.alpha = 0
      })
//
      UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.01, animations: {
        self.fj.transform = CGAffineTransform.identity
        self.fj.center = CGPoint(x: 0, y: oriCenter.y);
      })
//
      UIView.addKeyframe(withRelativeStartTime: 0.55, relativeDuration: 0.45, animations: {
        self.fj.alpha = 1.0
        self.fj.center = oriCenter
      })
//
    }) { _ in

    }

  }

}

这里写图片描述

import UIKit

class ViewController: UIViewController , UITextFieldDelegate , CAAnimationDelegate{


  @IBOutlet weak var titleLable:UILabel!
  @IBOutlet weak var userName:UITextField!
  @IBOutlet weak var password:UITextField!
  @IBOutlet weak var login:UIButton!

  let info = UILabel()

  override func viewDidLoad() {
    super.viewDidLoad()
    info.frame = CGRect(x: 0.0, y: login.center.y + 60.0,
                        width: view.frame.size.width, height: 30)
    info.backgroundColor = UIColor.clear
    info.font = UIFont(name: "HelveticaNeue", size: 12.0)
    info.textAlignment = .center
    info.textColor = UIColor.white
    info.text = "Tap on a field and enter username and password"
    view.insertSubview(info, belowSubview: login)

    userName.delegate = self
    password.delegate = self
    // Do any additional setup after loading the view, typically from a nib.
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

  override func viewWillAppear(_ animated: Bool) {

  }

  override func viewDidAppear(_ animated: Bool) {
    // view.layer.speed = 2
    let basic = CABasicAnimation(keyPath: "position.x");
    basic.duration = 0.7
    basic.fromValue = -view.bounds.size.width/2
    basic.toValue = view.bounds.width/2
    basic.fillMode = kCAFillModeBoth
    basic.delegate = self
//    basic.isRemovedOnCompletion = false  //停留在动画最后的位置 而不是其实放得位置

    basic.setValue(titleLable.layer, forKey: "layer")
    titleLable.layer.add(basic, forKey: nil)

    basic.beginTime = CACurrentMediaTime()+0.5
    basic.setValue(userName.layer, forKey: "layer")
    userName.layer.add(basic, forKey: nil)

    basic.beginTime = CACurrentMediaTime()+0.6
    basic.setValue(password.layer, forKey: "layer")
    password.layer.add(basic, forKey: nil)


    //添加说明字符的动画
    let flyLeft = CABasicAnimation(keyPath: "position.x")
    flyLeft.repeatCount = 2.5
    flyLeft.speed = 2
    flyLeft.autoreverses = true
    flyLeft.duration = 4
    flyLeft.fromValue = info.layer.position.x +
      view.frame.size.width
    flyLeft.toValue = info.layer.position.x
    info.layer.add(flyLeft, forKey: "infoAppear")

    let fadeLabelIn = CABasicAnimation(keyPath: "opacity")
    fadeLabelIn.repeatCount = 2.5
    fadeLabelIn.autoreverses = true
    fadeLabelIn.speed = 2
    fadeLabelIn.fromValue = 0.2
    fadeLabelIn.toValue = 1.0
    fadeLabelIn.duration = 4
    info.layer.add(fadeLabelIn, forKey: "fadein")

    //处理登录按钮
    let groupAnimatiom = CAAnimationGroup()
    groupAnimatiom.beginTime = CACurrentMediaTime() + 0.5
    groupAnimatiom.duration = 0.5
    groupAnimatiom.fillMode = kCAFillModeForwards
    groupAnimatiom.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)

    let scaleDown = CABasicAnimation(keyPath:"transform.scale")
    scaleDown.fromValue = 3.5
    scaleDown.toValue = 1

    let rotate = CABasicAnimation(keyPath: "transform.rotation")
    rotate.fromValue = CGFloat(M_PI_4)
    rotate.toValue = 0

    let fade = CABasicAnimation(keyPath: "opacity")
    fade.fromValue = 0
    fade.toValue = 1

    groupAnimatiom.animations = [scaleDown,rotate,fade]
    login.layer.add(groupAnimatiom, forKey: nil)

  }

  @IBAction func login(_ sender:UIButton){
    view.endEditing(true)
    let wobble = CAKeyframeAnimation(keyPath: "transform.rotation")
    wobble.duration = 0.25
    wobble.repeatCount = 4
    wobble.values = [0.0, -Double.pi/4, 0.0, Double.pi/4, 0.0]
    wobble.keyTimes = [0.0, 0.25, 0.5, 0.75, 1.0]
    titleLable.layer.add(wobble, forKey: nil)

    //添加一个气球
    let balloon = CALayer()
    balloon.contents = UIImage(named: "balloon")!.cgImage
    balloon.frame = CGRect(x: -50.0, y: 0.0,
                           width: 65.0, height: 70.0)
    view.layer.insertSublayer(balloon, below: userName.layer)

    //气球动画
    let flight = CAKeyframeAnimation(keyPath: "position")
    flight.duration = 3.5
    flight.values = [
      CGPoint(x: -50.0, y: 0.0),
      CGPoint(x: view.frame.width + 50.0, y: 160.0),
      CGPoint(x: -50.0, y: login.center.y)
      ].map{
        NSValue(cgPoint:$0)

    }
    flight.keyTimes = [0.0,0.5,1.0]
    balloon.add(flight, forKey: nil)
    balloon.position = CGPoint(x: -50.0, y: login.center.y)
  }


  func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
    let layer = anim.value(forKey: "layer")
    let puase = CABasicAnimation(keyPath: "transform.scale")
    puase.fromValue = 1.5
    puase.toValue = 1.0
    puase.duration = 0.25
    (layer as AnyObject).add(puase, forKey: nil)
  }


  func textFieldDidBeginEditing(_ textField: UITextField) {
    info.layer.removeAnimation(forKey: "infoAppear")
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值