首页 > 解决方案 > UIButton 动画在 UIScrollView 上不起作用

问题描述

我的 ScrollView 上的按钮动画不起作用。我有其他只是 UIViews 和动画的 VC 工作得很好。所以我尝试从属性检查器中取消选中并添加......

self.scrollView.delaysContentTouches = false

...在我看来DidLoad,但它有效果。

我还发现点击不会触发动画,但按住按钮一秒钟或更长时间会触发动画,并且触觉按压也会触发动画。

这是我的动画代码:

extension UIButton {
    func startAnimatingPressActions() {
        addTarget(self, action: #selector(animateDown), for: [.touchDown, .touchDragEnter])
        addTarget(self, action: #selector(animateUp), for: [.touchDragExit, .touchCancel, .touchUpInside, .touchUpOutside])
    }

    @objc private func animateDown(sender: UIButton) {
        animate(sender, transform: CGAffineTransform.identity.scaledBy(x: 0.95, y: 0.95))
    }

    @objc private func animateUp(sender: UIButton) {
        animate(sender, transform: .identity)
    }

    private func animate(_ button: UIButton, transform: CGAffineTransform) {
        UIView.animate(withDuration: 0.4,
                       delay: 0,
                       usingSpringWithDamping: 0.5,
                       initialSpringVelocity: 3,
                       options: [.curveEaseInOut],
                       animations: {
                        button.transform = transform
        }, completion: nil)
    }
}

我可以让这个动画工作,但感觉不太对劲。所以我宁愿不使用下面的代码。但它确实有效。所以我不确定上面的代码是什么导致了这个问题。

extension UIButton {

    func pulsate() {

        let pulse = CASpringAnimation(keyPath: "transform.scale")
        pulse.duration = 0.2
        pulse.fromValue = 0.96
        pulse.toValue = 1.0
        pulse.repeatCount = 0
        pulse.initialVelocity = 0.5
        pulse.damping = 1.0

        layer.add(pulse, forKey: nil)
    }
}

标签: swiftxcodeuibuttonscrollview

解决方案


我有同样的问题,我解决了取消选中滚动视图属性检查器中的延迟触摸按钮: ScrollView's attrobutes 检查器


推荐阅读