【发布时间】:2019-08-02 16:50:15
【问题描述】:
我正在尝试扩展多个类,即 UIButton 和 UITextField。它们都具有相同的功能,当我调用该功能时它们可以摆动。我试图不重复我的代码不止一次。我一直在尝试使用可以扩展并编写我想要的函数然后在我的类中扩展它们的协议,但问题出在我的函数中,我必须调用 self,但我会得到一个错误,因为 self 可以仅在 UITextField 和 UIButton 上调用。
这是我的代码
import UIKit
extension UIButton {
func wiggle() {
let position = "position"
let wiggleAnimation = CABasicAnimation(keyPath: position)
wiggleAnimation.duration = 0.05
wiggleAnimation.repeatCount = 5
wiggleAnimation.autoreverses = true
wiggleAnimation.fromValue = CGPoint(x: self.center.x - 4.0, y: self.center.y)
wiggleAnimation.toValue = CGPoint(x: self.center.x + 4.0, y: self.center.y)
layer.add(wiggleAnimation, forKey: position)
}
}
extension UITextField {
func wiggle() {
let position = "position"
let wiggleAnimation = CABasicAnimation(keyPath: position)
wiggleAnimation.duration = 0.05
wiggleAnimation.repeatCount = 5
wiggleAnimation.autoreverses = true
wiggleAnimation.fromValue = CGPoint(x: self.center.x - 4.0, y: self.center.y)
wiggleAnimation.toValue = CGPoint(x: self.center.x + 4.0, y: self.center.y)
layer.add(wiggleAnimation, forKey: position)
}
}
这是我尝试尝试的方法,但由于我正在调用 self,因此出现错误。
protocol Animations {
func wiggle()
}
extension Animations {
func wiggle() {
let position = "position"
let wiggleAnimation = CABasicAnimation(keyPath: position)
wiggleAnimation.duration = 0.05
wiggleAnimation.repeatCount = 5
wiggleAnimation.autoreverses = true
wiggleAnimation.fromValue = CGPoint(x: self.center.x - 4.0, y: self.center.y)
wiggleAnimation.toValue = CGPoint(x: self.center.x + 4.0, y: self.center.y)
layer.add(wiggleAnimation, forKey: position)
}
}
extension UIButton: Animations {}
extension UITextField: Animations {}
我收到的错误是 “自我”类型的值没有成员“中心” “自我”类型的值没有成员“中心” 使用未解析的标识符“层”
【问题讨论】: