从out-of-viewController更新振荡器频率

时间:2016-04-17 17:48:18

标签: ios swift

在学习iOS时,我正在创建一个使用AudioKit.io播放音调的应用程序

当用户点击屏幕时,会绘制一个新的“键”,并根据其X位置设置振荡器的频率。

所以现在我希望用户能够拖动“密钥”并更新振荡器的频率。

我认为这更像是一个项目组织/逻辑组织问题。

有:

  • ViewController.swift(制作振荡器并绘制键:didTap,toggleSound)
  • CircularKeyView.swift(循环键的属性:drawRect,didPan等)
来自CircularKeyView.swift的

//PAN IT LIKE u FRYIN.
func didPan(panGR: UIPanGestureRecognizer) {

self.superview!.bringSubviewToFront(self)

var translation = panGR.translationInView(self)

self.center.x += translation.x
self.center.y += translation.y


panGR.setTranslation(CGPointZero, inView: self)

//so the coordinates can be updated when there's a pan
self.setNeedsDisplay() //updates the coordinates on a pan event
//updateOscillatorFrequency here?
}

来自circularKeyView:

    ...
    override func viewDidLoad() {
        super.viewDidLoad()

        let tapGR = UITapGestureRecognizer(target: self, action: "didTap:")
        self.view.addGestureRecognizer(tapGR)


        let mixer = AKMixer(oscillator, osc2)
        AudioKit.output = mixer
        AudioKit.start()
    }

    func didTap(tapGR: UITapGestureRecognizer) {

        let tapPoint = tapGR.locationInView(self.view)

        let newCircularKey = circularKeyView(origin: tapPoint)

        self.view.addSubview(newCircularKey)
        oscillator.frequency = Double(newCircularKey.center.x) * 2
    }

基本上,我的问题是:如何将浏览行为与更改viewController中的变量(或数组/变量集合)联系起来?

1 个答案:

答案 0 :(得分:1)

我觉得应该是查看控制器的责任来创建UIPanGestureRecognizer,进行设置并将其添加到您的视图中(此处为CircularKeyView })。

它也应该是该手势识别器的目标,因此它可以将视图的中心设置在自己的坐标系中(视图更新自己的帧似乎很奇怪)。正如Apple的View Controller编程指南所述:"视图控制器负责管理其视图层次结构"。