对不起,这可能看起来像个愚蠢的问题。如果我有一个继承自UIButton的类LargeButton,我有办法说当点击任何LargeButton时,所有LargeButton对象都会动画并消失吗?
UIView.animateWithDuration(0.4, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
AllLargeButtons.alpha = 0
}, completion: { finished in
AllLargeButtons.hidden = true
有没有办法做这样的事情而不先将所有LargeButton存储在数组中?
编辑:
class LargeButton: UIButton {
required init?(coder: NSCoder) {
super.init(coder: coder)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(oneLargeButtonTapped), name: "oneOfLargeButtonsTapped", object: nil)
}
func oneLargeButtonTapped() {
UIView.animateWithDuration(0.4, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
self.alpha = 0 // Here you will get the animation you want
}, completion: { finished in
self.hidden = true // Here you hide it when animation done
})
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
}
class viewController: UIViewController {
@IBAction func buttonTapped(sender: UIButton) {
NSNotificationCenter.defaultCenter().postNotificationName("oneOfLargeButtonsTapped", object: nil, userInfo: nil)
}
}
创建LargeButton:
lazy var aButton: LargeButton = {
let button = LargeButton()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(oneLargeButtonTapped), name: "oneOfLargeButtonsTapped", object: nil)
// button.addTarget(self, action: #selector(oneLargeButtonTapped), forControlEvents: .TouchUpInside)
return button
}()
答案 0 :(得分:4)
创建LargeButton对象时,将其注册为接收通知:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LargeButton.oneLargeButtonTapped), name: "oneOfLargeButtonsTapped", object: nil)
在通知后点击其中一个LargeButtons。
NSNotificationCenter.defaultCenter().postNotificationName("oneOfLargeButtonsTapped", object: nil, userInfo: nil)
在方法“oneLargeButtonTapped”中实现所需的行为。
不要忘记在销毁之前取消注册通知中心的按钮。
NSNotificationCenter.defaultCenter().removeObserver(self)
答案 1 :(得分:2)
不是你建议的方式,不是。这将要求每个班级跟踪他们不会做的所有现有对象。您可以通过让初始值设定项向MyView.as_view()(request, 'arg1', 'arg2', id='34')
static
添加新实例来实现此目的,但您不应该这样做。如果您希望拥有相同级别的对象,而其他对象没有动画,会发生什么?
相反,您应该创建一个包含您想要设置动画的所有对象的数组。让Array
' LargeButton
调用一个迭代对象数组的方法,并为它们设置动画。