0
私は、セルのいくつかの基本的なアニメーションを扱う基本クラスを持っています。私のサブクラスでは、レコグナイザターゲットをオーバーライドして他のものをやりたがっていますが、基本クラスを呼び出して.zero
にリセットされているため、変換は常に0
です。UIPanGestureRecognizerのオーバーライド対象
基本アニメーションを行い、サブクラスを使ってメソッドをオーバーライドしたり、以下に示すように他のものを実行する方法はありますか?
私は、基底クラスを持っている:
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)
}
}
}
そして、私のサブクラス:基底クラスで
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)
}
}
}
はまだ問題が同じになり、:あなたはsuper.handlePanを呼び出す必要がありませんその方法'recognizer.translation(in:)'を使用してください。 –
私の例では、サブクラス内のものをオーバーライドしているので、スーパービュー** let **はサブクラスから呼び出されず、スーパービューだけが呼び出されます。サブクラスからの "スーパー"コールではどこにも見つかりません。 – dfd
あなたは正しいです。私はちょうどそれをテストし、それは動作します。ありがとう! –