swift 拖动view, 自动停靠屏幕边缘

 

 

 

     // 创建view  添加pan 手势 点手势

     let drapBtn = UIView(frame:CGRect(x: 100, y: 100, width: 100, height: 100))

        drapBtn.backgroundColor = UIColor.orange

        self.view.addSubview(drapBtn)

        drapBtn.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(dragMoving(pan:))))

        drapBtn.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tap(tap:))))

 

   // pan手势事件

    @objc func dragMoving(pan: UIPanGestureRecognizer){

        let point = pan.translation(in: view)

        if pan.state == .began {

            pan.view?.alpha = 0.8

        }

        pan.view?.center = CGPoint(x: pan.view!.center.x + point.x, y: pan.view!.center.y + point.y)

        pan.setTranslation(.zero, in: view)

        if pan.state == .ended {

            if let v = pan.view{

          // 计算 当前view 距离屏幕上下左右的距离

                let top = v.frame.minY ; let left = v.frame.minX ; v.alpha = 1

                let bottom = view.frame.height - v.frame.maxY - 49

                let right = KW-v.frame.maxX

          // 计算出 view 距离屏幕边缘距离的最小值

                let temp = [top,left,bottom,right].sorted().first

          // 平移动画

                UIView.animate(withDuration: 0.3, delay: 0.3, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {

                    if temp == top{

                        v.transform = v.transform.translatedBy(x: 0, y: -top)

                    }else if temp == left{

                        v.transform = v.transform.translatedBy(x: -left, y: 0)

                    }else if temp == bottom{

                        v.transform = v.transform.translatedBy(x: 0, y: bottom)

                    }else{

                        v.transform = v.transform.translatedBy(x: right, y: 0)

                    }

                }, completion: { (finish) in

                    

                })

            }

        }

    }

    

   // 点手势 事件处理

    @objc func tap(tap: UITapGestureRecognizer){

        print("tap")

        

        

        

    }

posted on 2017-11-14 15:57  顾玉玺  阅读(1471)  评论(0)    收藏  举报

导航