【发布时间】:2014-08-09 17:03:09
【问题描述】:
我有一个在屏幕上绘制圆圈的 Swift UIView 类(名为 HypnosisView)。视图的框架设置为填满屏幕。我想在初始化时以编程方式设置视图的背景颜色(因此,当创建视图实例时,它会自动具有指定的背景颜色)。我能够使用便利的初始化程序来完成这项工作,但是我想知道是否有更有效的方法来做到这一点(或者事实上我是否正确地做到了这一点)。在理想情况下,我只想在继承的init(frame: CGRect) 方法中添加一段设置背景的代码:self.background = UIColor.clearColor(),因此我不必编写一个全新的初始化程序来设置背景颜色。
这是我的便利初始化方法(我目前正在使用的方法):
convenience init(rect: CGRect){
self.init(frame: rect)
self.backgroundColor = UIColor.clearColor()
}
我在委托中这样调用该方法:
var mainFrame = self.window!.bounds
var mainView = HypnosisView(rect: mainFrame)
如果您有任何问题,请告诉我。谢谢!
【问题讨论】:
-
为什么要使用便捷初始化器?你已经继承了 UIView。在它的 designated 初始化器中,设置背景颜色。但这基本上正是您正在做的事情(减去便利性),而且我不知道如何使它更短。您的“全新初始化程序”只是对 super 和您自己的修改的调用。
-
@Rikkles 我曾尝试像这样覆盖指定的初始化程序:
override init(frame: CGRect){ self.backgroundColor = UIColor.clearColor() <return key> super.init(frame: frame)},但它抛出了错误:Class "HypnosisView" does not implement its superclass's required members,这就是我尝试使用便捷初始化程序的原因。我还在学习这一切 -
其实我收回了。如果您使用便利初始化程序,它是最简单的。因为如果您覆盖
init(frame),您也必须覆盖init(coder),这会为您创建更多代码。所以在你的情况下,我认为你有最简单的解决方案。将属性设置为默认值的便捷初始化器。 -
+1 非常感谢! @Rikkles
标签: ios uiview swift object-initializers