使用 UIPanGestureRecognizer 从 CGRect 获取 UIView - Swift 2.0

Get UIView from CGRect using UIPanGestureRecognizer - Swift 2.0

我正在开发一个应用程序,它使用 UIPanGesturerecognizermove a UIView .我的屏幕上 3 更多 views,更多 fixed.

我将用手势拖动的视图颜色为蓝色。第一个视图固定为 orange 颜色。第二个视图固定为 green 颜色。第三个视图固定为 紫色 颜色。

我的实际Swift代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet var panView: UIView!

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

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        panView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: "panViewGesture:"))
    }

    func panViewGesture(sender: UIPanGestureRecognizer) {

        let locationInView = sender.locationInView(self.view)

        if sender.state == .Changed {

            panView.frame.origin = locationInView

        }

    }

}

我的问题:

View BlueView Orange 上时,View Orange 应该改变背景色为蓝色,如'View Blue'.

绿色视图紫色视图也是如此。


我想做什么:

我正在尝试制作一个从 CGRect 数据识别的函数,该数据是从下面看的视图和 returns 一个 UIView。

回到UIView,我可以轻松改变背景颜色。


我需要什么?

我需要一种语法,可以在使用 UIPanGestureRecognizer 拖动另一个 UIView 时识别视图重叠


有人可以帮助我吗?

使用修改后的代码:

class ViewController: UIViewController {

    @IBOutlet var panView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        panView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: "panViewGesture:"))
    }

    func panViewGesture(sender: UIPanGestureRecognizer) {

        let locationInView = sender.locationInView(self.view)

        if sender.state == .Changed {

            panView.center = locationInView

            if let view  = intersectingViewWithView(panView) {
                view.backgroundColor = panView.backgroundColor
            }
        }

    }


    func intersectingViewWithView(panView: UIView) -> UIView? {
        for view in self.view.subviews {
            if view != panView {
                if CGRectIntersectsRect(panView.frame, view.frame) {
                    return view
                }
            }
        }
        return nil
    }
}