我在访问事件处理程序中的实例var时遇到问题。
当我尝试在事件处理程序中访问实例var时,它似乎总是具有初始值,即使该值已经发生了变化。
在我的简单演示应用程序中,我有一个水平滑块和一个UIImageView:
ViewController.swift
:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var slider: UISlider!
var canvas:MyCanvas?
override func viewDidLoad() {
super.viewDidLoad()
self.canvas = MyCanvas()
}
@IBAction func sliderValueChanged(sender: UISlider) {
self.canvas!.sliderValueUpdated(sender.value);
}
}
MyCanvas.swift
:
import Foundation
import UIKit
class MyCanvas : UIImageView {
// the var I care about
var sliderValue:Float = 0.5;
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
override init() {
super.init()
}
func sliderValueUpdated (newValue:Float) {
self.sliderValue = newValue;
// prints the correct value
println(self.sliderValue)
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
// always prints initial value, 0.5
println(self.sliderValue)
}
}
我将MyCanvas.swift
设置为UIImageView的自定义类。
因此,当我调整滑块时,会打印出self.sliderValue
的正确值。但是,当我在此之后触发触摸事件时,它总是打印出初始值0.5
而不是滑块值。
为什么?
我该如何解决这个问题?
答案 0 :(得分:1)
我认为您的问题是您的画布上没有IBOutlet
。通过在viewDidLoad
中初始化画布,初始化的画布实际上不在屏幕上(您必须将其添加到子视图中)。因此,您的sliderValueChanged IBAction
实际上并未更新屏幕上sliderValue
的{{1}}属性。我建议将故事板中的MyCanvas
设置为UIImageView
课程,并MyCanvas
IBOutlet
MyCanvas
Storyboard
canvas = MyCanvas()
。然后从viewDidLoad
功能中删除{{1}}。