1窖认、ExtensionUIView.swift
import UIKit
public enum ShakeDirection: Int
{
case horizontal
case vertical
}
extension UIView
{
// MARK: - 擴(kuò)展UIView,增加抖動(dòng)方法
///
/// - Parameters:
/// - direction: 抖動(dòng)方向(默認(rèn)是水平方向)
/// - times: 抖動(dòng)次數(shù)(默認(rèn)5次)
/// - interval: 每次抖動(dòng)時(shí)間(默認(rèn)0.1秒)
/// - delta: 抖動(dòng)偏移量(默認(rèn)2)
/// - completion: 抖動(dòng)動(dòng)畫結(jié)束后的回調(diào)
public func shake(direction: ShakeDirection = .horizontal, times: Int = 5, interval: TimeInterval = 0.1, delta: CGFloat = 2, completion: (() -> Void)? = nil)
{
UIView.animate(withDuration: interval, animations: {
switch direction
{
case .horizontal:
self.layer.setAffineTransform(CGAffineTransform(translationX: delta, y: 0))
case .vertical:
self.layer.setAffineTransform(CGAffineTransform(translationX: 0, y: delta))
}
}) { (finish) in
if times == 0
{
UIView.animate(withDuration: interval, animations: {
self.layer.setAffineTransform(CGAffineTransform.identity)
}, completion: { (finish) in
completion?()
})
}
else
{
self.shake(direction: direction, times: times - 1, interval: interval, delta: -delta, completion: completion)
}
}
}
}
2、使用
import UIKit
class ViewController: UIViewController
{
@IBOutlet weak var inputTextField: UITextField!
@IBAction func horizontalShakeButtonTap(_ sender: UIButton)
{
inputTextField.shake {
print("水平抖動(dòng)結(jié)束")
}
}
@IBAction func verticalShakeButtonTap(_ sender: UIButton)
{
inputTextField.shake(direction: .vertical, times: 4, interval: 0.1, delta: 1.8) {
print("垂直抖動(dòng)結(jié)束")
}
}
override func viewDidLoad()
{
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
整理自:航歌