我将在应用程序中使用几个不同的圆形按钮(甚至是完全圆形的按钮),从我所知,实现这一点最简单的方法是设置按钮CALayer的cornerRadius属性。
然而,我不想为每个需要它的按钮在每个控制器中手动执行此操作,因此我认为一个简单的子类在初始化时设置这个属性是正确的方法。
我正在使用Storyboard和Autolayout来定位和调整按钮大小,并将它们分配给这个子类。
class RoundedButton: UIButton {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.layer.cornerRadius = self.bounds.size.height / 2.0
self.clipsToBounds = true
NSLog("BUTTON BOUNDS: H-%f W-%f", self.bounds.size.height, self.bounds.size.width)
NSLog("BUTTON FRAME: H-%f W-%f", self.frame.height, self.frame.width)
}
}
但我发现在这一点上(即init),无论框架还是边界的大小都不是最终确定的。对于Storyboard中大小(和约束)为H40 x W40的按钮,bounds/frame大小显示为H30 x W38。
这意味着cornerRadius没有得到我期望的值。
我确认在稍后的某个时刻(例如当按钮已经可以响应点击时),其frame/bounds确实为H40 x W40。
所以,在所有这些之后,我的问题是:在UIButton子类中,什么时候/在哪里可以安全地使用实例的最终frame/bounds值设置cornerRadius?