ios - 在同一 View Controller 中的另一个 UIView 后面进行 UIView 更新

标签 ios swift core-graphics cocoapods quartz-core

我正在快速制作一个使用 cocoapod 框架的应用程序 BBSlideoutMenu显示菜单。我还使用 cocoapod 框架 ChameleonFramework。我想做的是让我正在使用的汉堡按钮在打开时改变颜色。我还没有实现它,但我也想让顶部的栏透明。我已经记录了here这样你就可以看到发生了什么。基本上,只有当我滑开菜单时, View 才会更新。

免责声明:我知道使用汉堡菜单被视为糟糕的代码设计,不幸的是,这正是我在此应用程序中所需要的。

这是我的代码:

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

编辑:我尝试在按钮、topBar 和函数 toggleMenudidPresentBBSlideoutMenu 中连续使用 setNeedsDisplaydidDismissBBSlideoutMenu 但它不起作用

我也尝试过在实际 View (self.view)上调用它

最佳答案

尝试调用 setNeedsDisplay 按钮。

关于ios - 在同一 View Controller 中的另一个 UIView 后面进行 UIView 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37694405/

相关文章:

ios - 使用多个字符串创建 onDoneBlock

ios - 自动通知 PFUser 更改

ios - 我如何告诉 Asset Catalog (.xcassets) 对多个图像井使用相同的图像?

swift - PFQuery 中的逻辑运算符错误

ios - 使用 UiButton 反复更改 UILabel 文本

ios - 如何确定 MTLTextureDescriptor 的最大允许大小

iphone - 在 iPhone 上更改背景图像的按钮

ios - 如何将 subview 放置在具有动态高度的 subview 下方?

iphone - 在 iOS 6 和 iOS 7 中更改不同的 UIImage 颜色

objective-c - ARC 是否与 Core Graphics 对象一起使用?