2016-04-22 11 views
1

Ich habe eine UITableView in meiner App subclassed, so dass ich Berührungsereignisse abfangen kann. Ich benutze dies, um mir 3D-Touch-Gesten auf der gesamten Ansicht (einschließlich oben auf der Tischansicht) zur Verfügung zu stellen.3D Touch Force Geste aktiviert Zelle tippen auf Touch-Ende

Dies funktioniert gut, aber das Problem ist, dass die Verwendung von 3D-Touch auf einer der Zellen und dann loslassen Sie Ihren Finger aktiviert die Zelle tippen.

Ich muss nur den Zellabgriff aktivieren, wenn keine Kraft ausgeübt wird. Ich sollte erklären, dass ich ein Bild allmählich über den gesamten Bildschirm verblasse, während Sie Druck ausüben.

Hier ist meine Unterklasse:

protocol PassTouchesTableViewDelegate { 
    func touchMoved(touches: Set<UITouch>) 
    func touchEnded(touches: Set<UITouch>) 
} 

class PassTouchesTableView: UITableView { 
    var delegatePass: PassTouchesTableViewDelegate? 

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     super.touchesMoved(touches, withEvent: event) 

     self.delegatePass?.touchMoved(touches) 
    } 

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     super.touchesEnded(touches, withEvent: event) 

     self.delegatePass?.touchEnded(touches) 
    } 
} 

Und hier sind die Methoden, die ich aus meiner Sicht Controller ich anrufen, wenn die Berührungen zu beenden und bewegen:

internal func touchMoved(touches: Set<UITouch>) { 
    let touch = touches.first 

    self.pressureImageView.alpha = (touch!.force/2) - 1.0 
} 

internal func touchEnded(touches: Set<UITouch>) { 
    UIView.animateWithDuration(0.2, animations: { 
     self.pressureImageView.alpha = 0.0 
    }) 
} 

Antwort

1

Sie könnten einen boolean erstellen namens isForceTouch was in touchesBegan auf false gesetzt wird, und dann, wenn erzwungene Berührung erkannt wird, setze es auf wahr. Dann geben Sie in didSelectRowAtIndexPath einfach false zurück, wenn isForceTouch wahr ist. Es muss möglicherweise optimiert werden, aber das sollte funktionieren.

+0

Funktioniert gut. Vielen Dank! – user3746428