2016-03-04 87 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