我有一個通用的NSObject
動畫班,我爲一個新項目創建了一個動畫班,我試圖用新班級重構一些舊的項目。一切都很好,直到我找到了一些動畫w /完成塊,這就拋棄了我的計劃,從我的視圖控制器中刪除了過多的冗餘代碼。下面是我有...在Swift中創建一個通用的完成處理程序
Animator.swift
class Animator: NSObject {
var control: UIControl? // Can accept everything that's a subclass of UIControl
override init() {
super.init()
}
// FIXME: figure out how to add a completion block as a parameter on a method call
func animateControl(control: UIControl) {
control.transform = CGAffineTransformMakeScale(0.75, 0.75)
UIView.animateWithDuration(0.5,
delay: 0,
usingSpringWithDamping: 0.3,
initialSpringVelocity: 5.0,
options: UIViewAnimationOptions.AllowUserInteraction,
animations: {
control.transform = CGAffineTransformIdentity
}) { (value: Bool) -> Void in
// completion block
// ** method as a parameter goes here? **
}
}
}
要使用它,而不是所有的東西輸入到動畫按鈕,只需要調用類從MyViewController.swift
MyViewController.swift
// Property declaration
let animator = Animator()
// Tie it to an IBAction
@IBAction func myButtonAction(sender: UIButton) {
animator.animateControl(sender, methodIWantToRunAfterAnimateControlFinishes)
}
func methodIWantToRunAfterAnimateControlFinishes() {
// Do Stuff
}
我怎麼養活animateControl
的初始化程序是作爲完成塊運行的一種方法?我看着this(不是我的網站,但這是我的感受),但我無法讓它工作。
更新
我曾與語法搏鬥了一點點,但這裏是讓我在終點線的初始化代碼:
func animateControl(control: UIControl, completion: (() -> Void)?) {
control.transform = CGAffineTransformMakeScale(0.75, 0.75)
UIView.animateWithDuration(0.5,
delay: 0,
usingSpringWithDamping: 0.3,
initialSpringVelocity: 5.0,
options: UIViewAnimationOptions.AllowUserInteraction,
animations: {
control.transform = CGAffineTransformIdentity
}) { _ in
// completion block
completion?()
}
}
此處理完成塊W /碼nil
完成塊。
謝謝你讓我擺脫這一點。不勝感激。 – Adrian