我有一个Swift UIView类(名为HypnosisView),它在屏幕上绘制一个圆圈。视图的框架设置为填充屏幕。我想在初始化时以编程方式设置视图的背景颜色(因此,当创建视图的实例时,它会自动具有指定的背景颜色)。我能够使用便利初始化程序来完成这项工作,但是我想知道是否有更有效的方法来执行此操作(或者实际上我是否正确地执行此操作)。在理想情况下,我想添加一段代码来设置背景:self.background = UIColor.clearColor()
到继承的init(frame: CGRect)
方法,所以我不必编写一个全新的初始化程序来设置背景颜色。
这是我的便利初始化方法(我目前正在使用的方法):
convenience init(rect: CGRect){
self.init(frame: rect)
self.backgroundColor = UIColor.clearColor()
}
我在委托中调用该方法,如下所示:
var mainFrame = self.window!.bounds
var mainView = HypnosisView(rect: mainFrame)
如果您有任何疑问,请与我们联系。谢谢!
答案 0 :(得分:0)
正如评论中所讨论的,当想要自定义UIView的行为时,使用convenience
初始化程序通常更容易,而不是覆盖指定的初始化程序。
具体来说,对于UIViews,如果覆盖指定的init(frame aRect: CGRect)
,则遗憾的是还要求覆盖init(coder decoder: NSCoder!)
协议的NSCoding
。因此,通常如果您只想将一些属性设置为某些默认值,请按照原始海报的要求进行操作并创建一个便利初始化程序,然后调用init(frame aRect: CGRect)
:
convenience init(rect: CGRect, bgColor: UIColor){
self.init(frame: rect)
self.backgroundColor = bgColor
}
有关摆脱NSCoding
合规性的讨论,请参阅Class does not implement its superclass's required members