【发布时间】:2017-02-03 16:10:56
【问题描述】:
我有以下代码可以创建滑块和标签并将其添加到视图中。只要我移动滑块,它就会在 AppDelegate 类中给出一个 SIGABRT 并进入一个无限循环。我不明白我在做什么错(如果我只添加滑块就可以了)
class test: UIView {
var value: Float
override func drawRect(rect: CGRect) {
self.addSubview(getSlider())
self.addSubview(getLabel())
}
override init(frame: CGRect) {
value = 0.9
super.init(frame:frame)
}
func getSlider()-> UISlider {
let slider: UISlider = UISlider(frame: CGRectMake(10,10,self.frame.width,30))
slider.addTarget(self, action:"change", forControlEvents:UIControlEvents.ValueChanged)
return slider
}
func getLabel()-> UILabel {
let label = UILabel(frame: CGRectMake(10,50,50,50))
label.text = "\(value)"
return label
}
func change(sender: UISlider) {
value = sender.value
}
【问题讨论】:
-
在
-drawRect:方法中调用-addSubview:并不是最聪明的主意;您应该将这些行放在视图生命周期中的不同位置,例如进入-didMoveToSuperview或-willMoveToSuperview:(当然也可以是它们的 Swift 等价物)。
标签: ios swift xcode uilabel uislider