/// 抖動(dòng)方向枚舉
public enum ShakeDirection {
/// 水平抖動(dòng)
case horizontal
/// 垂直抖動(dòng)
case vertical
}
extension UIView {
/// 擴(kuò)展UIView增加抖動(dòng)方法
///
/// - Parameters:
/// - direction: 抖動(dòng)方向(默認(rèn)是水平方向)
/// - times: 抖動(dòng)次數(shù)(默認(rèn)6次)
/// - interval: 每次抖動(dòng)時(shí)間(默認(rèn)0.1秒)
/// - delta: 抖動(dòng)偏移量(默認(rèn)4)
/// - completion: 抖動(dòng)動(dòng)畫結(jié)束后的回調(diào)
public func shake(direction: ShakeDirection = .horizontal, times: Int = 6, interval: TimeInterval = 0.1, delta: CGFloat = 4, completion: ((Bool) -> ())? = 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))
}
}) { (_) in
if (times == 0) { // 最后一次抖動(dòng),將位置還原,并調(diào)用完成回調(diào)函數(shù)
UIView.animate(withDuration: interval, animations: {
self.layer.setAffineTransform(CGAffineTransform.identity)
}, completion: completion)
} else { // 不是最后一次抖動(dòng),繼續(xù)播放動(dòng)畫(總次數(shù)減1,偏移位置反向)
self.shake(direction: direction, times: times - 1, interval: interval, delta: delta * -1, completion:completion)
}
}
}
}
iOS 抖動(dòng)動(dòng)畫
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 不多說 直接上代碼吧 #pragma mark -抖動(dòng)動(dòng)畫 -(void)shaking:(IconView*)v...
- A-關(guān)鍵幀動(dòng)畫 關(guān)鍵幀動(dòng)畫就是在動(dòng)畫控制過程中開發(fā)者指定主要的動(dòng)畫狀態(tài),各個(gè)狀態(tài)間動(dòng)畫如何進(jìn)行則由系統(tǒng)自動(dòng)運(yùn)算補(bǔ)充...
- 額...... 簡(jiǎn)書居然沒有復(fù)制富文本的功能, 我在有道上記的筆記, 拷到這里就純文本了。。。不過還好,后來花了些...