我需要一些帮助来将rightBarButtonItem
转换为UINavigationBar
。我关注了this,也发现了类似的问题,这些问题使我将按钮添加为customView
的UIBarButtonItem
,但是代码仍然无法正常工作。
我创建了一个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
。感谢您的帮助以使它正常工作,谢谢。
如果要在加载控制器时将按钮滑入,则可以使用以下代码。
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。希望对您有所帮助。