2016-03-04 103 views
0

我有下面的代碼,並需要拖動視圖,以便他們可以重新定位。但是,拖動時,視圖就會消失。如何在堆棧視圖之上使視圖可拖動?拖放項目放在UIStackView

堆棧視圖:

let sView = UIStackView() 
    sView.axis = UILayoutConstraintAxis.Vertical 
    sView.distribution = .FillEqually 
    sView.alignment = UIStackViewAlignment.Center 
    sView.spacing = 15 
    sView.backgroundColor = UIColor.redColor() 
    sView.addArrangedSubview(view1) 
    sView.addArrangedSubview(view2) 
    sView.addArrangedSubview(view3) 
    sView.layoutMarginsRelativeArrangement = true 
    sView.translatesAutoresizingMaskIntoConstraints = false 
    self.view.addSubview(sView) 
    sView.centerXAnchor.constraintEqualToAnchor(self.view.centerXAnchor).active = true 
    sView.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor).active = true 

的意見; view1view2,並view3有如下類似的代碼:

let view1 = UIView() 
    view1.frame = CGRectMake(30, 50, 50, 80) 
    view1.backgroundColor = UIColor.blueColor() 
    view1.layer.cornerRadius = 6 
    let gesture = UIPanGestureRecognizer(target: self, action: Selector("draggedView:")) 
    view1.addGestureRecognizer(gesture) 
    view1.userInteractionEnabled = true 
    view1.tag = 1 
    view1.heightAnchor.constraintEqualToConstant(85).active = true 
    view1.widthAnchor.constraintEqualToConstant(55).active = true 

draggedView功能:

func draggedView(gesture: UIPanGestureRecognizer){ 
    let loc = gesture.locationInView(self.view) 
    let gesturedView = gesture.view 
    gesturedView!.center = loc 
} 
+0

嗨,你有一個更簡單的問題答案? – Kawalya

+0

下面給出的答案工作正常。 – Kawalya

回答

1

布賴恩,

此代碼做什麼,我想你希望做。顯然你需要仔細考慮並更改變量名稱,但我相信你會接受它!

func draggedView(sender: UIPanGestureRecognizer) { 
    if (sender.state == UIGestureRecognizerState.Began) { 
     self.source = editorSVB!.arrangedSubviews.indexOf(sender.view!)! as Int 
    } 
    if (sender.state == UIGestureRecognizerState.Changed) { 
     center = sender.view?.center 
     let translation = sender.translationInView(sender.view) 
     center = CGPointMake(center!.x + translation.x, center!.y + translation.y) 
     sender.view?.center = center! 
     sender .setTranslation(CGPointZero, inView: sender.view) 
    } 
    for blah in self.editorSVB!.arrangedSubviews { 
     let no = blah.frame.intersect((sender.view?.frame)!) 
     if (!no.origin.x.isInfinite) { 
      self.object = editorSVB!.arrangedSubviews.indexOf(blah)! as Int 
      if (self.object != self.source) { 
       print("self,object, self.object",self,object, self.source) 
       self.executable = self.object 
      } 
     } 
    } 
} 
+0

謝謝你,你的代碼更簡單和有效。 – Kawalya

+0

Kawalya,如果您使用它,請將其標記爲已接受的答案! – user3069232