首页 > 解决方案 > 调整 UIView 大小后,UITapGestureRecognizer 不起作用

问题描述

我想以编程方式移动和扩展 a UIViewon tap 的大小,然后,如果UIView再次点击,将其动画化回其原始大小和位置。

我可以UIView在第一次点击时展开并移动。但是,在初始动画之后,根本不会注册点击。

let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))

myView.heightAnchor.constraint(equalToConstant: 50).isActive = true
myView.widthAnchor.constraint(equalToConstant: 50).isActive  = true
myView.isUserInteractionEnabled = true
myView.addGestureRecognizer(tapRecognizer)

下面是我的函数,handleTap 调用它在第一次点击时执行初始动画。它运行良好。我翻译 myView 的位置,然后更改帧大小以使其更大。

fileprivate func expandView(_ sender: UITapGestureRecognizer) {
    UIView.animate(withDuration: 0.5, animations: {
        let translate = CGAffineTransform(translationX: 100, y: 50 )
        sender.view?.transform = translate
        sender.view?.backgroundColor = .green

    })  { (_) in

        UIView.animate(withDuration: 0.5, animations: {
            // change frame size of view to make it bigger
            sender.view?.frame = CGRect(x: 100, y: 50, width: 100, height: 100)
        })
    }

}

我尝试注释掉改变帧大小的动画,只留下 XY 平移。这也不允许在点击 myView 时再次触发 handleTap。

标签: iosswiftuiviewuitapgesturerecognizer

解决方案


推荐阅读