【问题标题】:Get UIView from CGRect using UIPanGestureRecognizer - Swift 2.0使用 UIPanGestureRecognizer 从 CGRect 获取 UIView - 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 时使视图的识别重叠


有人可以帮我吗?

【问题讨论】:

    标签: ios swift uiview swift2 uipangesturerecognizer


    【解决方案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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多