【发布时间】:2016-04-17 17:48:18
【问题描述】:
在学习 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?
}
来自循环键视图:
...
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 中的变量(或变量数组/集合)联系起来?
【问题讨论】:
-
我认为这是与代表一起完成的......所以我正在学习。可能会更新
-
你有没有想过这个问题?我正在尝试更新使用 AKPropertySlider 播放的声音。我可以让变量更新,但我不知道如何更新正在播放的声音。
-
@Adrian 你好,Adrian 我已经很久没有看过这些材料了,但是是的,这是可能的。您可以使用代表和协议的东西。基本上,委托模式允许您创建在您的应用程序中全局存在的变量,并且任何实现“协议”的 swift 文件都可以在其更改时访问该变量,iirc。如果您需要帮助,我会破解我的旧代码并查看。