2017-07-01 4 views
2

In Swift, ich habe eine Hamburger Bar-Taste, so wenn ich angezapft will ich diese Hamburger Bar-Taste um 90 Grad zu drehen (so dass die Linien vertikal sind) und dann, wenn Sie es erneut klicken möchte ich es gehen Zurück zum ursprünglichen Zustand (horizontal)Drehen UIBarButtonItem Swift

HINWEIS: Können Sie sicherstellen, dass dies für ein UIBarButtonItem funktioniert, weil eine Lösung für eine normale UIButton nicht funktioniert.

Antwort

2

Ich benutze ein UIButton innerhalb von UIBarButtonItem dies zu erreichen, und eine Variable mit Zustand vertikal oder nicht

das ist mein Storyboard Setup enter image description here

Hier ist der Code einfacher View-Controller

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 
      }) 
     } 

    } 


} 

Ergebnis

enter image description here

this helps

+0

für das Helfen Sie mir so viel Danke !! Ich habe genau das gemacht, was du getan hast und die Animation funktioniert wunderbar! Leider gibt es ein Problem, wenn Sie auf den Hamburger klicken, öffnet sich die Seitenansicht nicht wie früher. Und wenn ich versuche, die Animation auf den anderen Bildschirmen, auf die über das Seitenmenü zugegriffen wird, auf die gleiche Weise einzurichten, gibt es einen Fehler und sagt: "Wert des Typs 'AboutWhoKnew' hat kein Mitglied 'isVertical'" (AboutWhoKnew ist der Name eines schnelle Datei). Vielen Dank für deine Hilfe! –

+0

Was ich vorher hatte, was das Seitenmenü öffnete, war ein IBOutlet des UIBarButtonItem-Hamburgers, das in jeder der swift-Dateien, die mit jedem View-Controller verbunden waren, in die viewDidLoad() "hamburger.target = self.revealViewController()" und "hamburger.action = #selector (SWRevealViewController.revealToggle (_ :))" –

+0

@C.Elam haben Sie Ihr Problem gelöst ?, Sie können dies in Ihrem Basis-ViewController hinzufügen und dann in Ihrer gesamten Anwendung arbeiten müssen, können Sie auch Definieren Sie eine benutzerdefinierte UIButton-Klasse und definieren Sie die Eigenschaft isVertical dort, wenn Sie Hilfe benötigen, lassen Sie es mich wissen, bitte akzeptieren Sie meine Antwort, beste Grüße –

1
@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) 
    } 
} 
+0

Vielleicht ist es besser, 'revealViewController(). ReveaveToggle (false)' und 'revealViewController(). ReveentToggle (true)' innerhalb der Animation enden Blöcke müssen noch besser warten bis die Animation endet zu zeigen und verstecken Sie Ihre Seite Menü, aber es ist bis zu Sie –