2016-08-24 105 views
0

我在堆棧視圖中有一堆視圖,並且它們是可拖動的。我想在拖放操作之後從拖放視圖中刪除堆棧視圖。我希望我的堆棧視圖在拖放操作後重新組織。從UIStackView拖放UIView並將其保留在其放置目標

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

你是如何上漿正在拖動的看法? – beyowulf

+0

使用該行代碼「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)「 – Mamedoff

回答

2
  1. 你需要繼承UIStackView

  2. 你需要子要拖動對象類型,並在該類 創造了UIStackView的子類,以符合

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

3.in the object you拖動,從它的類,發送的對象中心點,以委託配置點是否是stackView內或不和 要在delagete做相應

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     if delegate != nil { 
      delegate?.card(self, didDragFromPoint: origin, toPoint: self.center) 
     } 
    } 

你做這樣的事:

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 

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

     } 
} 
  • 不插入對象,具有自動佈局constarint入StackView 它將開始表現unpredictabley

  • 我已經得出結論(就像你可以在gif圖片中看到的那樣)試圖用StackView做這樣的事情是非常麻煩的,並且是不可預知的,所以我想我會說出這個想法..(因爲我也想用它這樣的。)

  • StackView

    相關問題