更改变量以查看实时更改Xcode Swift

时间:2018-03-04 05:24:54

标签: swift xcode graph swift-playground uigraphicscontext

修改

现在,我有这个代码创建一个呼吸描记器的视图,然后在操场视图控制器中实例化它:

class Spirograph: UIView {

var insideRadius: CGFloat = 1 {
    didSet {
        updatePath()
    }
}
var rotationalSpeed: CGFloat = -31.0 / 3.0 {
    didSet {
        updatePath()
    }
}

private lazy var shapeLayer: CAShapeLayer = {
    let sl = CAShapeLayer()
    sl.fillColor = UIColor.clear.cgColor
    sl.strokeColor = UIColor.purple.cgColor
    sl.lineWidth = 2
    return sl
}()

override func layoutSubviews() {
    super.layoutSubviews()

    layer.addSublayer(shapeLayer)
    updatePath()
}

private func updatePath() {
    let path = UIBezierPath()
    let multiplier = frame.width / 5

    path.move(to: CGPoint(x: multiplier*(1+insideRadius) + bounds.midX, y: bounds.midY))

    for t in 0 ... 2000 {
        let angle = CGFloat(t) * .pi / 180.0
        let x = cos(angle) + insideRadius * cos(rotationalSpeed * angle)
        let y = sin(angle) + insideRadius * sin(rotationalSpeed * angle)

        path.addLine(to: CGPoint(x: multiplier * x + bounds.midX, y: multiplier * y + bounds.midY))
    }

    shapeLayer.path = path.cgPath

}

}

然后实时观察:

class MyViewController : UIViewController {

let spirograph = Spirograph(frame: CGRect(x: 0, y: 0, width: 300, height: 300))

let slider = UISlider(frame: CGRect(x: 0, y: 300, width: 300, height: 20))

@objc func sliderMoved() {
    spirograph.insideRadius = CGFloat(slider.value)
}

override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = .blue
    spirograph.backgroundColor = .white

    slider.minimumValue = 0
    slider.maximumValue = 1
    slider.isContinuous = true
    slider.tintColor = .orange
    slider.addTarget(self, action: #selector(sliderMoved), for: .valueChanged)
    view.addSubview(slider)

    view.addSubview(spirograph)

}

}

每当我移动滑块时,即使是一点点,也需要15秒才能绘制新的肺活量计可能是因为我没有在sliderMoved func中正确更改insideRadius变量 < / p>

更新: 我在一个xcode项目中运行相同的代码,它工作得很好,似乎操场无法处理这种类型的代码。

谢谢你的帮助!

0 个答案:

没有答案