Tap Gesture on animating UIView not working

How to detect touches in a view which is moving

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {

    let pf = layer.presentation()!.frame
    // note, that is in the space of our superview

    let p = self.convert(point, to: superview!)

    if pf.contains(p) { return self }
    return nil
}

It’s that easy

Related tip –

Don’t forget that in most cases if an animation is running, you will, of course, almost certainly want to cancel it. So, say there’s a “moving target” and you want to be able to grab it with your finger and slide it somewhere else, naturally in that use case your code in your view controller will look something like ..

   func sliderTouched() {
       if alreadyMoving {
          yourPropertyAnimator?.stopAnimation(true)
          yourPropertyAnimator = nil
       }
       etc ...
   }

Leave a Comment