Swift无法设置导航栏按钮项目的动画

问题描述 投票:0回答:1

我需要一些帮助来将rightBarButtonItem转换为UINavigationBar。我关注了this,也发现了类似的问题,这些问题使我将按钮添加为customViewUIBarButtonItem,但是代码仍然无法正常工作。

我创建了一个UIBarButtonItem,并将UIButton设置为其自定义视图。

let button: UIButton = {
    let b = UIButton(type: .system)
    b.setTitle("Test", for: .normal)
    return b
}()

lazy var barButton = UIBarButtonItem(customView: button)

此方法从viewDidLoad中调用

func configNavBar() {
    navigationItem.rightBarButtonItem = barButton
}

在发生某些操作时为条形按钮制作动画:

func animateRightBarButton() {
    UIView.animate(withDuration: 0.25,
                   delay: 0,
                   usingSpringWithDamping: 0.8,
                   initialSpringVelocity: 1.5,
                   options: .curveEaseInOut,
                   animations: {
                    guard let customView = self.barButton.customView else {return}
                    var x: CGFloat = customView.transform.tx == 0 ? 100 : 0
                    customView.transform = CGAffineTransform(scaleX: x, y: 0)
    }, completion: nil)
} 

视图加载后,条形按钮将按预期显示。我希望按钮滑出屏幕,但我注意到了两个问题。

调用此函数时,按钮从视图中消失,没有动画。如果I print(x)(转换的x值),则它保持为100.0,并且不会使用三进制运算符变回0。感谢您的帮助以使它正常工作,谢谢。

ios swift animation
1个回答
0
投票

如果要在加载控制器时将按钮滑入,则可以使用以下代码。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let button = UIButton(type: .system)
        button.setTitle("Button", for: .normal)
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)
    }

    override func viewDidAppear(_ animated: Bool) {
        if let rightBarButton = self.navigationItem.rightBarButtonItem {
            if let view = rightBarButton.customView {
                view.transform.tx = 100
                UIView.animate(withDuration: 0.5) {
                    view.transform.tx = 0
                }
            }
        }
    }

}

并且要滑动,您可以将初始tx设置为0,而在动画块中可以设置view.transform.tx = 100。希望对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.