将 UIView 拖放到另一个(UIPanGesture 识别器)中

Posted

技术标签:

【中文标题】将 UIView 拖放到另一个(UIPanGesture 识别器)中【英文标题】:drag and drop UIView inside another (UIPanGesture recognizer) 【发布时间】:2017-06-05 15:51:29 【问题描述】:

我正在尝试将屏幕上的 UIView 拖到另一个 UIView 中 我在拖放时比较他们的帧以检查是否(bead1 与帧中的 hole1 匹配) 我可以拖放就好了,但问题是当我拖动(bead2 到孔 2)时,bead1 自动放置在 hole1 中(就像代码中的第二个 IF 变为 true) 请帮助这里的功能:

func draggingView(_ sender: UIPanGestureRecognizer)

let point = sender.location(in: view)
let draggingView = sender.view!
draggingView.center = point
print(point)
   if sender.state == .ended && bead1.frame.midX  != 
hole1.frame.midX  
            print("false")
            bead1.center = CGPoint (x: view.frame.width / 2 - 25, y: 
  view.frame.height / 2)
           
     if sender.state == .ended && bead1.frame.midX  == 
           hole1.frame.midX 
         bead1.center = hole1.center
         imageToShow.isHidden = false
        // sender.isEnabled = false
        print("True")
       

  if sender.state == .ended && bead2.frame.minX - 10 != 
   hole2.frame.minX - 10
    print("false")
    bead2.center = CGPoint (x: view.frame.width / 2 + 25, y: 
 view.frame.height / 2)
  
 if sender.state == .ended && bead2.frame.minX - 10 == hole2.frame.midX 
 - 10 
 bead2.center = hole2.center
         imageToShow.isHidden = false
        // sender.isEnabled = false
        print("True")

   

  

【问题讨论】:

【参考方案1】:

我终于可以修好了.. 我实际上需要检查一个 UIView 是否包含另一个 UIView,然后将每个 UIView 与另一个标签进行比较(我需要为每个 UIView 设置一个标签),如下所示..

    hole1.tag = 1
     bead1.tag = 1
     if hole1.tag == bead1.tag
         print("Bead1 IS IN!")

     else
        print("bead1 IS OUT!!!!")
  

然后 检查它是否包含其他的中心

 if bead1.frame.contains(hole1.center)

【讨论】:

以上是关于将 UIView 拖放到另一个(UIPanGesture 识别器)中的主要内容,如果未能解决你的问题,请参考以下文章

将 UIView 从 UIPopOverController 中的 UIScrollView 拖放到主 UIViewController?

bringSubviewToFront 将 UIView 移回原始位置

UIView alpha = 0 导致触摸被拖放到下面的视图

将列表视图的列表项拖放到另一个列表视图列表项

Angular 8拖放 - 将文件或文件夹拖放到另一个文件夹中

ipad:将 UITableViewCell 从一个 UITableViewController 拖放到另一个