UIButton内的CALayer

时间:2015-12-09 16:29:44

标签: ios uibutton swift2 calayer

我正在构建基于按钮的菜单。我正在纯粹用代码构建它们。

let menu00 = UIButton()
menu00.frame=menuHome
let imageSubLayer = CALayer()
imageSubLayer.contents = UIImage(named: "menuIcon.png")!.CGImage
menu00.layer.insertSublayer(drawHexFill(menu00.frame, fillColor: UIColor.lightGrayColor()), atIndex: 2)
menu00.layer.insertSublayer(drawHexBorder(menu00.frame, fillColor: UIColor.clearColor()), atIndex: 1)
menu00.layer.insertSublayer(imageSubLayer, atIndex: 0)
menu00.titleLabel!.text="MENU"
menu00.titleLabel!.textColor=UIColor.whiteColor()
menu00.tag=100
self.view.addSubview(menu00)

drawHexFill和drawHexBorder是两个UIBezierPath方法来绘制图形图层,我这样做,因为按钮可能有不同的颜色边框并根据情况填充。

我遇到的问题是文本和图像不可见。如果我将图像添加为按钮图像,则它是可见的,但是在十六进制边框和十六进制填充图层后面。

我为所有对象尝试了不同的位置“atIndex”,但根本无法得到我想要的东西。我想在后台使用hexFill,接下来是hexBorder,顶部是图像或文本。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

问题可能是您的subLayer具有不同的.zPosition属性值。来自

  

将新的子图层对象添加到当前图层。添加子层   到图层子层列表的末尾。这导致子层   出现在任何兄弟姐妹的顶部,其中包含相同的值   zPosition属性

来自here。您可以仔细检查.zPosition属性是否具有所有三个子图层的相同值。

如果这不是问题,请尝试使用insertSubLayer:above代替insertSubLayer:atIndex(请参阅documentation)。