için bir genel tamamlama işleyicisi oluşturma Yeni bir proje için oluşturduğum genel bir NSObject
animasyon sınıfım var ve bazı eski projeleri yeni sınıfla yeniden düzenlemeyi deniyorum. Görünüm kontrollerimden gereksiz miktarda gereksiz kodları kaldırmak için planımı attıran, tamamlama blokları içeren animasyonlar bulana kadar her şey yolundaydı. İşte Doğrusu bir düğme animasyon uygulamak için tüm şeyler yazmak yerine, onu kullanmak için ...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? **
}
}
}
bu var, ben sadece 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
}
nasılbesleyecek
MyViewController.swift'un başlatıcısı bir tamamlama bloğu olarak çalışmak için bir yöntem mi? this'a baktım (web sitem değil, ama nasıl hissediyorum), ama işe yaramayacağım.
Güncelleme
Ben sözdizimi ile biraz güreşmek zorunda kaldı, ama burada bitiş çizgisine üzerinde beni başlatıcı kod:
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?()
}
}
Bu/kod ve w tamamlama blokları kolları nil
tamamlama blokları.
Bu konuda bana meydan okuduğunuz için teşekkür ederim. Oldukça memnun olarak. – Adrian