旋转 UIBarButtonItem Swift

Posted

技术标签:

【中文标题】旋转 UIBarButtonItem Swift【英文标题】:Rotate UIBarButtonItem Swift 【发布时间】:2017-07-01 02:11:50 【问题描述】:

在 Swift 中,我有一个汉堡栏按钮,所以当我点击汉堡栏按钮时,我希望该汉堡栏按钮旋转 90 度(这样线条是垂直的),然后当你再次点击它时,我希望它回到原来的位置原始状态(水平)

注意:您能否确保这适用于 UIBarButtonItem,因为对于普通 UIButton 的某些解决方案不起作用。

【问题讨论】:

【参考方案1】:

我在UIBarButtonItem 中使用UIButton 来实现这一点,以及一个状态是否垂直的变量

这是我的故事板设置

这里是简单视图控制器的代码

import UIKit

class ViewController: UIViewController 

    var isVertical : Bool = false

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

    @IBAction func rotateAction(_ sender: Any) 
        if(!self.isVertical)
        
            UIView.animate(withDuration: 0.2, animations:  
                self.navigationItem.leftBarButtonItem?.customView?.transform =  CGAffineTransform(rotationAngle: 90 * .pi / 180)
            , completion:  (finished) in
                self.isVertical = true
            )
        else
            UIView.animate(withDuration: 0.2, animations: 
                self.navigationItem.leftBarButtonItem?.customView?.transform =  CGAffineTransform.identity
            , completion:  (finished) in
                self.isVertical = false
            )
        

    



结果

希望对你有帮助

【讨论】:

非常感谢您对我的帮助!!我做了你所做的,动画效果很好!不幸的是,有一个问题,当您单击汉堡包时,它并没有像以前那样打开侧视图。当我尝试在通过侧边菜单访问的其他屏幕上以相同的方式设置动画时,它会给出错误并显示“'AboutWhoKnew' 类型的值没有成员'isVertical'”(AboutWhoKnew 是一个名称快速文件)。非常感谢你帮助我! 我之前打开侧边菜单的是 UIBarButtonItem 汉堡包的 IBOutlet,在每个连接到每个视图控制器的 swift 文件中,我放入 viewDidLoad() "hamburger.target = self.revealViewController()" 和 "hamburger.action = #selector(SWRevealViewController.revealToggle(_:))" @C.Elam 你解决了你的问题吗?,你可以在你的基础 viewController 中添加它,然后必须在你的所有应用程序中工作,你还可以定义一个自定义 UIButton 类并在那里定义 de 属性 isVertical ,如果您需要帮助,请告诉我,请接受我的回答,最好的问候 不,我没有解决我的问题。我对你刚才说的有点困惑,你能解释一下吗?因此,在我添加整个东西以使其垂直之前,我所拥有的是一个名为 hamburger 的 IBOutlet,然后在 viewDidLoad() 中,我有我之前在其他评论中键入的代码,一切正常,它执行了revealViewController。但无论如何,我该如何制作这个(你给我的代码)revealViewController。 所以我最终解决了我的一个问题,当我在其他视图控制器上设置它时它给了我错误。不幸的是,我不确定如何制作它,以便当您单击按钮时它会显示 ViewController?【参考方案2】:
@IBAction func rotateAction1(_ sender: Any) 
    if (!self.isVertical) 

        UIView.animate(withDuration: 0.2, animations: 
            self.navigationItem.leftBarButtonItem?.customView?.transform = CGAffineTransform(rotationAngle: 90 * .pi / 180)
        , completion: 
            (finished) in
            self.isVertical = true

        )

        revealViewController().revealToggle(true)
     else 
        UIView.animate(withDuration: 0.2, animations: 
            self.navigationItem.leftBarButtonItem?.customView?.transform = CGAffineTransform.identity
        , completion: 
            (finished) in
            self.isVertical = false
        )
        revealViewController().revealToggle(false)
    

【讨论】:

也许最好把 revealViewController().revealToggle(false)revealViewController().revealToggle(true) 放在动画结束块内,等到动画结束显示和隐藏你的侧边菜单时,块必须更好地工作,但这取决于你【参考方案3】:

斯威夫特 4:

func rotateBarButton() 

        let button = UIButton(frame: CGRect(x: 0, y: 0, width: 40, height: 40)) // Create new button & set its frame
        button.setImage(#imageLiteral(resourceName: "settings"), for: UIControlState()) // Assign an image
        let lef = UIBarButtonItem(customView: button)
        self.navigationItem.leftBarButtonItem = lef// Set as barButton's customView

        // Gets you half way there //
        UIView.animate(withDuration: 0.8, delay: 0.1, options: UIViewAnimationOptions.curveEaseIn, animations: 
            self.navigationItem.leftBarButtonItem?.customView?.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI))
        , completion: nil)
        // Rotates all the way around //
        UIView.animate(withDuration: 0.5, delay: 0.5, options: UIViewAnimationOptions.curveEaseIn, animations: 
            self.navigationItem.leftBarButtonItem?.customView?.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI * 2))
        , completion: nil)
    

【讨论】:

以上是关于旋转 UIBarButtonItem Swift的主要内容,如果未能解决你的问题,请参考以下文章

垂直 UIToolBar 及其 UIBarButtonItem

替换或扩展 UIBarButtonItem 选择器

调整 UITextField 的宽度以横向填充工具栏

带有图像的 UIBarButtonItem 不显示

在 KeyboardDidShow 上切换 UIBarButtonItem

UIBarButtonItem 有颜色?