2016-06-08 61 views
0

我正在swift中使用cocoapod框架BBSlideoutMenu來顯示菜單。我也使用cocoapod框架ChameleonFramework。我想要做的是讓打開的漢堡按鈕變爲顏色。我還沒有實現它,但我也想讓頂部的欄變得透明。我記錄了它here,這樣你就可以看到發生了什麼。基本上,只有當我滑開菜單時,視圖纔會更新。在同一視圖控制器中製作UIView更新後面的另一個

聲明:我知道,使用漢堡菜單被視爲糟糕的代碼設計,不幸的是這是我在這個應用程序需要。

這裏是我的代碼:

import UIKit 
import BBSlideoutMenu 
import ChameleonFramework 

class ViewController: UIViewController, BBSlideoutMenuDelegate { 

    @IBOutlet var slideMenu: BBSlideoutMenu! 


    var button: HamburgerButton! = nil 
    var menuOpen = false; 
    let screenSize: CGRect = UIScreen.mainScreen().bounds 
    let topBar = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height * 0.1)) 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib 
     view.backgroundColor = UIColor.whiteColor() 
     topBar.backgroundColor = FlatRed() 
     button = HamburgerButton(frame: CGRectMake(0, 20, 54, 54)) 
     button.addTarget(self, action: #selector(toggleMenu(_:)), forControlEvents:.TouchUpInside) 
     topBar.addSubview(button) 
     view.addSubview(topBar) 

    } 

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

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
     slideMenu.setupEdgePan() 
     slideMenu.slideDirection = .Right 
     slideMenu.shrinkAmount = 0 
     slideMenu.slideTravelPercent = 0.87 
     slideMenu.menuOffset = 0 
     slideMenu.zoomFactor = 1 
     slideMenu.springEnabled = false 
     slideMenu.backgroundColor = FlatRed() 
     slideMenu.delegate = self 
     slideMenu.setupEdgePan() 
    } 

    func toggleMenu(sender : HamburgerButton!) { 
     if(menuOpen) { 
      slideMenu.dismissSlideMenu(animated: true, time: nil) 
     } else { 
      slideMenu.presentSlideMenu(true) {() -> Void in 
       //Runs after menu is presented 
      } 
     } 
    } 

    func didPresentBBSlideoutMenu(menu: BBSlideoutMenu) { 
     menuOpen = true 
     button.changeColor(UIColor.blackColor()) 
    } 

    func didDismissBBSlideoutMenu(menu: BBSlideoutMenu) { 
     menuOpen = false 
     button.changeColor(UIColor.whiteColor()) 
    } 

} 

我使用this hamburger menu button,已與CoreGraphicsQuartzCore創建,並增加了對變色以下功能。

func changeColor(color: UIColor) { 
     for layer in [ self.topStroke, self.middleStroke, self.bottomStroke ] { 
      layer.fillColor = nil 
      layer.strokeColor = color.CGColor 
      layer.lineWidth = 4 
      layer.miterLimit = 4 
      layer.lineCap = kCALineCapRound 
      layer.masksToBounds = true 

      let strokingPath = CGPathCreateCopyByStrokingPath(layer.path, nil, 4, .Round, .Miter, 4) 

      layer.bounds = CGPathGetPathBoundingBox(strokingPath) 

      layer.actions = [ 
       "strokeStart": NSNull(), 
       "strokeEnd": NSNull(), 
       "transform": NSNull() 
      ] 

      self.layer.addSublayer(layer) 
     } 
    } 

編輯:我上的按鈕,在頂欄使用setNeedsDisplay試過了,他們兩人連續在功能toggleMenudidPresentBBSlideoutMenudidDismissBBSlideoutMenu並沒有奏效

我自己也嘗試調用它在實際視圖(self.view)

回答

0

嘗試撥打setNeedsDisplay該按鈕。

+0

我試過了,它沒有工作。我會添加一個說明,說明這一點。 –

相關問題