在 cell.content 中拖放包含自定义 UIView 的 UITableViewCell
Drag and Drop UITableViewCell which contains custom UIView in cell.content
如题,我是这方面的新手,想在 UITableView
中实现自定义拖放,而每个 UITableViewCell
内容(cell.content?)将包含一个自定义 UIView
。例如。 Row1-cell-CustomUIView1,Row2-cell-CustomUIView2。将哪个自定义 UIView
添加到哪一行取决于用户对该行的选择和按钮点击。现在假设您有 4 个自定义 UIViews
,即被添加到 UITableView
中的 4 个 rows/cells,我如何实现这些 CustomUIView
的拖放?请注意,每个自定义 UIView 可能与典型的 table 单元格不同。即自定义 UIView1 layout/design 不同于自定义 UIView2
。在 swift 中实施,有什么想法吗?
这可能对您有帮助,将 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
}
}
如题,我是这方面的新手,想在 UITableView
中实现自定义拖放,而每个 UITableViewCell
内容(cell.content?)将包含一个自定义 UIView
。例如。 Row1-cell-CustomUIView1,Row2-cell-CustomUIView2。将哪个自定义 UIView
添加到哪一行取决于用户对该行的选择和按钮点击。现在假设您有 4 个自定义 UIViews
,即被添加到 UITableView
中的 4 个 rows/cells,我如何实现这些 CustomUIView
的拖放?请注意,每个自定义 UIView 可能与典型的 table 单元格不同。即自定义 UIView1 layout/design 不同于自定义 UIView2
。在 swift 中实施,有什么想法吗?
这可能对您有帮助,将 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
}
}