【发布时间】:2017-01-11 12:21:03
【问题描述】:
不确定我的想法是否正确,但我在整个 iOS 项目中使用了类似的动画,我想将其压缩为 1 个文件并在任何我想要的地方重复使用。
一个简单的例子。在我的动画文件中,我有一个缩放动画
Animations.swift
class Animations {
class func scaleSmall(_ view: UIView) {
let scaleAnim = POPBasicAnimation(propertyNamed: kPOPLayerScaleXY)
scaleAnim?.toValue = NSValue(cgSize: CGSize(width: 0.9, height: 0.9))
view.layer.pop_add(scaleAnim, forKey: "scaleSmallAnim")
}
}
我的 View 文件夹中有许多 swift 文件之一,我想将该动画添加到按钮
Button.swift
class Button: UIButton {
override func awakeFromNib() {
super.awakeFromNib()
self.addTarget(self, action: #selector(Animations.scaleSmall(_:)), for: .touchDown)
}
}
我以为我可以从其他文件中引用动画,但是每次我这样做时都会遇到同样的错误
'#selector' 的参数是指没有暴露给 Objective-C 的实例方法 'scaleSmall'
我引用这个函数有错吗?
【问题讨论】:
-
你做得对。只是 Swift 类与 Obj-C 不完全兼容,
UIKit(即UIButton)在 Obj-C 世界中。您可以尝试通过Animations类从NSObject继承或将您的方法标记为@objc。 -
令我困惑的是,如果我的 Button 类中有动画,我可以使用 #selector(Button.scaleSmall) 访问它并且它可以正常工作。一旦我把它从文件中拿出来,我就无法正确地得到它
标签: ios swift animation addtarget