Swift - 輸入框抖動效果的實現(xiàn)(擴展UIView、支持所有UI組件)


1、ExtensionUIView.swift

import UIKit

public enum ShakeDirection: Int
{
    case horizontal
    case vertical
}

extension UIView
{
    // MARK: - 擴展UIView,增加抖動方法
    ///
    /// - Parameters:
    ///   - direction: 抖動方向(默認是水平方向)
    ///   - times: 抖動次數(shù)(默認5次)
    ///   - interval: 每次抖動時間(默認0.1秒)
    ///   - delta: 抖動偏移量(默認2)
    ///   - completion: 抖動動畫結(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("水平抖動結(jié)束")
        }
    }
    
    @IBAction func verticalShakeButtonTap(_ sender: UIButton)
    {
        inputTextField.shake(direction: .vertical, times: 4, interval: 0.1, delta: 1.8) { 
            print("垂直抖動結(jié)束")
        }
    }

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

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

整理自:航歌

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 早起未起,睡至不耐煩。 衣服未洗。 中午至圖書館一樓廳中準備化學反應工程的考試。 下午買了后天晚上回家的票,請了兩...
    胡心白閱讀 102評論 0 0
  • 前幾天看了西游伏妖記,感覺不是那么好,三顆星吧。這部電影,導演徐克,監(jiān)制周星馳,觀影前,是很讓人期待的。 一、故事...
    心際花園閱讀 423評論 0 1
  • 太棒了,班級技術部門特別給力,已經(jīng)開始搭建印象筆記班級共享空間,以后班級的教學視頻,分享信息都能在里面找到...
    yolanda的花花世界閱讀 147評論 0 1
  • 不清楚在別人心里的地位 卻很在乎 非常在乎 習慣逃避 在改進 玻璃心真很煩 時間很短 也不一定能成功 加油哦
    atinokay閱讀 360評論 0 0