swift - 从 UIStackView 中拖动和删除 UIView 但将其保留在其放置目的地

标签 swift uistackview

我在堆栈 View 中有一堆 View ,它们是可拖动的。我希望在拖放操作后从堆栈 View 中删除拖动的 View 。我希望在拖放操作后重新组织我的堆栈 View 。

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)

此代码用于删除 View 并调整其大小。如果没有“removeArrangedSubview”,它会按预期工作,但如果我使用“removeArrangedSubview”,我拖/放的 View 不会被放在正确的点上,它会自行调整大小。

最佳答案

  1. 您需要继承 UIStackView

  2. 您需要子类化您正在拖动的对象类型,并在该类中 为 UIStackView 的子类创建一个委托(delegate)协议(protocol)以符合

      protocol objetMovedDelgateProtocol {
      func card(card:Cardview, didDragFromPoint initialPoint:CGPoint, toPoint   point:CGPoint)
            }
    

3.在您拖动的对象中,从它的类中,将对象中心点发送到委托(delegate)以配置该点是否在 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

            ......
            ......

        } 
}
  1. 不要将具有自动布局约束的对象插入 StackView 它将开始表现出不可预测性

  2. 我已经得出结论(就像您在 gif 图像中看到的那样)尝试使用 StackView 做这样的事情是非常错误的,而且不可预测,所以我想我会放弃这个想法。 .(因为我也想那样用。)

StackView

关于swift - 从 UIStackView 中拖动和删除 UIView 但将其保留在其放置目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39133835/

相关文章:

ios - 在 iPhone 4S 上,ViewController 上的更改不会从 didSelectRowAtIndexPath 持续到 cellForRowAtIndexPath

ios - 如何以人类可读的形式显示 OptionSet 值?

ios - 在两个 View 之间添加尾随约束

swift - 将 StackView 中的可见图像移至更靠近前导空间的位置

ios - 以编程方式将 View 添加到 UIStackView

ios - UIStackView 没有显示阴影

ios - SPTSessionManager 未初始化或失败

ios - 在 tableview 中滑动手势

swift - 将 UIScrollView 发送到后台

swift - 如何在 StackView 中的两个 View 之间设置动画?