在学习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中更改变量(或变量的数组/变量集合)联系起来?

    最佳答案

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

    它也应该是该Gesture Recognizer的目标,因此它可以将视图的中心设置在其自己的坐标系中(一个视图更新其自己的框架似乎很奇怪)。正如Apple的《 View Controller编程指南》所述:“视图控制器负责管理其视图层次结构”。

    08-04 02:24