我在堆栈视图中有很多视图,它们是可拖动的。我希望在拖放操作后从拖放视图中删除拖动的视图。我希望在拖放操作后重新组织堆栈视图。
self.stackView.removeArrangedSubview(sender.view!)
这段代码可以正常工作,但它打破了这段代码
sender.view!.center = referenceView.convertPoint(CGPoint(x: dropAreaLeft.midX, y: dropAreaLeft.midY), toView: sender.view!.superview)
sender.view!.frame = CGRectMake(sender.view!.frame.origin.x, sender.view!.frame.origin.y, sender.view!.frame.width * 0.5, sender.view!.frame.height * 0.5)
此代码用于删除视图并调整其大小。没有" removeArrangedSubview"它按预期工作,但如果我使用" removeArrangedSubview"我正在拖放的视图没有放在正确的点上,它会自行调整大小。
答案 0 :(得分:2)
您需要继承 UIStackView
你需要继承你要拖动的对象类型,并且在那个类中 为UIStackView的子类创建一个委托协议以符合
protocol objetMovedDelgateProtocol {
func card(card:Cardview, didDragFromPoint initialPoint:CGPoint, toPoint point:CGPoint)
}
3.在您要拖动的对象中,从它的类中,将对象中心点发送给委托,以配置该点是否在stackView内部, 你想做什么呢
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
if delegate != nil {
delegate?.card(self, didDragFromPoint: origin, toPoint: self.center)
}
}
在delagete你做这样的事情:
func card(card:Cardview, didDragFromPoint initialPoint:CGPoint, toPoint point:CGPoint){
if(!CGRectContainsPoint(self.frame, point)) && card.isObjecInStackView{
print("object was removed successfully from the stack view")
......
......
}
if(CGRectContainsPoint(self.frame, point)) && !card.isObjecInStackView{
print("object was added successfully to the stack view")
let constraints = card.constraints
card.removeConstraints(constraints)
self.addArrangedSubview(card)
self.bringSubviewToFront(card)
card.isObjecInStackView = true
......
......
}
}