使用 UIPanGestureRecognizer 从 CGRect 获取 UIView - Swift 2.0

Posted

技术标签:

【中文标题】使用 UIPanGestureRecognizer 从 CGRect 获取 UIView - Swift 2.0【英文标题】:Get UIView from CGRect using UIPanGestureRecognizer - Swift 2.0 【发布时间】:2016-02-02 02:33:16 【问题描述】:

我正在开发一个使用 UIPanGesturerecognizer移动 UIView 的应用程序。我的屏幕上有 3视图,更多固定

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

我的实际 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 Blue 位于 View Orange 上时,View Orange 应将背景颜色更改为蓝色,如“View Blue” '。

View GreenView Purple 也是如此。


我想做的事:

我正在尝试创建一个从 CGRect 数据中识别的函数,该数据是下面的视图并返回 UIView。

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


我需要什么?

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


有人可以帮我吗?

【问题讨论】:

【参考方案1】:

使用修改后的代码:

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
    

【讨论】:

以上是关于使用 UIPanGestureRecognizer 从 CGRect 获取 UIView - Swift 2.0的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 UIPanGestureRecognizer 移动对象时会有延迟?

UIPanGestureRecognizer ***视图未获取事件,子视图使用它们

在 UITableView 上滑动删除以使用 UIPanGestureRecognizer

在 UIPanGestureRecognizer 中使用velocityInView

使用 UIPanGestureRecognizer 拖动 + 旋转触摸下车

使用 UIPanGestureRecognizer 移动和缩放 UIView