Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 拖动放置在视图上的项目_Ios_Swift_Uistackview - Fatal编程技术网

Ios 拖动放置在视图上的项目

Ios 拖动放置在视图上的项目,ios,swift,uistackview,Ios,Swift,Uistackview,我有下面的代码,需要拖动视图以便重新定位。但是,拖动时,视图将消失。在堆栈视图顶部时,如何使视图可拖动 堆栈视图: let sView = UIStackView() sView.axis = UILayoutConstraintAxis.Vertical sView.distribution = .FillEqually sView.alignment = UIStackViewAlignment.Center sView.spacing = 15 sV

我有下面的代码,需要拖动视图以便重新定位。但是,拖动时,视图将消失。在堆栈视图顶部时,如何使视图可拖动

堆栈视图:

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
意见<代码>视图1、
视图2
视图3
的代码类似于以下代码:

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
}
布莱恩

这段代码实现了我认为您希望实现的功能。显然,您需要仔细检查并更改变量名,但我相信您能做到

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
            }
        }
    }
}
布莱恩

这段代码实现了我认为您希望实现的功能。显然,您需要仔细检查并更改变量名,但我相信您能做到

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
            }
        }
    }
}

嗨,你对这个问题有更简单的答案吗?下面给出的答案很好。嗨,你对这个问题有更简单的答案吗?下面给出的答案很好。