Ich habe eine Basisklasse, die einige grundlegende Animationen der Zelle behandelt. In meiner Unterklasse habe ich das Erkennungsziel außer Kraft gesetzt und möchte etwas anderes tun, aber die Übersetzung lautet immer 0
, da ich in der Basisklasse die Übersetzung anrufe, die auf .zero
zurückgesetzt wird.Override Ziel von UIPanGestureRecognizer
Gibt es eine Möglichkeit, meine Basisklasse für die grundlegende Animation zu verwenden und eine Unterklasse zu verwenden, um die Methode zu überschreiben und einige andere Dinge zu tun, wie unten gezeigt?
Ich habe eine Basisklasse:
class Base: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
let gesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
addGestureRecognizer(gesture)
}
func handlePan(recognizer: UIPanGestureRecognizer) {
if recognizer.state == .changed {
let translation = recognizer.translation(in: self)
...
recognizer.setTranslation(.zero, in: self)
}
}
}
Und meine Unterklasse:
class Sub: Base {
override func handlePan(recognizer: UIPanGestureRecognizer) {
super.handlePan(recognizer: recognizer)
if recognizer.state == .changed {
let translation = recognizer.translation(in: self)
print(translation.x) // is always 0
recognizer.setTranslation(.zero, in: self)
}
}
}
Das Problem ist immer noch die gleiche sein würde, die Basisklasse mit Aufruf 'recognizer.setTranslation (.zero, in: Selbst-)', die die Unterklasse verhindert, benutze 'recognizer.translation (in:)'. –
In meinem Beispiel, da Sie Dinge in der Unterklasse überschrieben haben, wird die Superview ** let ** nicht von der Unterklasse, nur die Superansicht aufgerufen. Es ist nirgends in dem "Super" -Aufruf von der Unterklasse zu finden. – dfd
Sie haben Recht. Ich habe es gerade getestet und es funktioniert. Vielen Dank! –