简体   繁体   English

拖放UITableViewCell,在cell.content中包含自定义UIView

[英]Drag and Drop UITableViewCell which contains custom UIView in cell.content

I am newbie on this, as titled, would like to implement custom drag & drop in UITableView , while each UITableViewCell content (cell.content?) will contains a custom UIView . 我是这个的新手,标题是要在UITableView实现自定义拖放,而每个UITableViewCell内容(cell.content?)将包含一个自定义UIView Eg Row1-cell-CustomUIView1, Row2-cell-CustomUIView2. 例如,Row1-cell-CustomUIView1,Row2-cell-CustomUIView2。 Which custom UIView added to which row is based on user selection on that row and a button click. 哪个自定义UIView添加到了哪一行是基于该行上用户的选择并单击按钮。 Now imagine you have 4 custom UIViews , ie being added into 4 rows/cells in the UITableView and how can I implement the drag and drop of these CustomUIView ? 现在,假设您有4个自定义UIViews ,即被添加到UITableView中的4行/单元格中,我如何实现这些CustomUIView的拖放? Note, each custom UIView may not be the same as typical table cell. 请注意,每个自定义UIView可能与典型的表格单元格不同。 ie custom UIView1 layout/design is different from custom UIView2 . 即自定义UIView1布局/设计与自定义UIView2不同。 Implement in swift, Any idea? 快速实施,有什么想法吗?

This may help you, add a UIPanGestureRecognizer to the mainImgView to handle the dragging: 这可以为您提供帮助,将UIPanGestureRecognizer添加到mainImgView来处理拖动:

var draggableImage : UIImageView!
var mainImgView : UIImageView!
var trashImgView : UIImageView!
var dragStartPositionRelativeToCenter : CGPoint?
var panGesture : UIPanGestureRecognizer!

panGesture = UIPanGestureRecognizer(target: self, action: "handleDrag:")
mainImgView.addGestureRecognizer(panGesture)

func handleDrag(nizer: UIPanGestureRecognizer!) {
   if nizer.state == UIGestureRecognizerState.Began {
      self.draggableImage = UIImageView(image: mainImgView.image)
      self.draggableImage.frame = CGRectMake(0, 0, 100, 100)
      self.draggableImage.center = mainImgView.center
      self.draggableImage.contentMode = .ScaleAspectFit
      self.draggableImage.userInteractionEnabled = true
      self.draggableImage.alpha = 0.5

      self.view.addSubview(self.draggableImage)
      self.view.bringSubviewToFront(sself.draggableImage)

      let locationInView = nizer.locationInView(self.draggableImage.superview)
      dragStartPositionRelativeToCenter = CGPoint(x: locationInView.x - self.draggableImage.center.x, y: locationInView.y - self.draggableImage.center.y)

      self.draggableImage.layer.shadowOffset = CGSize(width: 0, height: 20)
      self.draggableImage.layer.shadowOpacity = 0.3
      self.draggableImage.layer.shadowRadius = 6

      return
  }

  if nizer.state == UIGestureRecognizerState.Changed {
     let locationInView = nizer.locationInView(self.draggableImage.superview)
     UIView.animateWithDuration(0.1) {
        self.draggableImage.center = CGPoint(x: locationInView.x - self.dragStartPositionRelativeToCenter!.x,
            y: locationInView.y - self.dragStartPositionRelativeToCenter!.y)
    }

      var checkAddToBag : Bool = CGRectContainsRect(self.draggableImage.frame, self.trashImgView.frame)

      if (checkAddToBag == true){
        self.trashImgView.layer.borderColor = UIColor.redColor().CGColor
        self.trashImgView.layer.borderWidth = 1.0
    } else {
        self.trashImgView.layer.borderColor = UIColor.clearColor().CGColor
        self.trashImgView.layer.borderWidth = 0.0
      }

      return
   }

   if nizer.state == UIGestureRecognizerState.Ended {
      var checkAddToBag : Bool = CGRectContainsRect(self.draggableImage.frame, self.trashImgView.frame)

      self.trashImgView.layer.borderColor = UIColor.clearColor().CGColor
      self.trashImgView.layer.borderWidth = 0.0

      dragStartPositionRelativeToCenter = nil

      self.draggableImage.removeFromSuperview()
      self.draggableImage = nil

      return
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM