2016-06-08 6 views
0

Я работаю быстро, чтобы сделать приложение использует структуру 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, который был создан с CoreGraphics и QuartzCore, и добавил следующую функцию для изменения цвета.

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

Edit: Я попытался с помощью setNeedsDisplay на кнопку, в topBar, и оба из них последовательно в функциях toggleMenu, didPresentBBSlideoutMenu и didDismissBBSlideoutMenu и это не сработало

Я также пытался называть его на фактическом виде (self.view)

ответ

0

Попробуйте позвонить setNeedsDisplay кнопку.

+0

Я пробовал это, это не сработало. Я добавлю примечание, говорящее к описанию. –