在学习iOS时,我正在创建一个使用AudioKit.io播放音调的应用程序
当用户点击屏幕时,会绘制一个新的“键”,并根据其X位置设置振荡器的频率。
所以现在我希望用户能够拖动“密钥”并更新振荡器的频率。
我认为这更像是一个项目组织/逻辑组织问题。
有:
:
//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中的变量(或数组/变量集合)联系起来?
答案 0 :(得分:1)
我觉得应该是查看控制器的责任来创建UIPanGestureRecognizer
,进行设置并将其添加到您的视图中(此处为CircularKeyView
})。
它也应该是该手势识别器的目标,因此它可以将视图的中心设置在自己的坐标系中(视图更新自己的帧似乎很奇怪)。正如Apple的View Controller编程指南所述:"视图控制器负责管理其视图层次结构"。