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")
}
}