View 如何:在点击时将视图带到前面;设置最大/最小夹持手势比例;将屏幕限制设置为平移手势

View 如何:在点击时将视图带到前面;设置最大/最小夹持手势比例;将屏幕限制设置为平移手势,view,swift4,uigesturerecognizer,View,Swift4,Uigesturerecognizer,注:我发现的所有东西都太旧了,或者与我实际需要的东西太不一样了,而且我几乎尝试了我发现的所有东西,但都没有找到正确的方法 我创建了3个UIView,我可以拖动它们并缩放它们。 现在,我需要: 把他们中的一些带到前面:我想给每个人增加一个 UITap手势,允许我将点击的UIView带到前面 将其他视图传递到后面 为UIPinchGestureRecognitor设置最大/最小刻度,以便 不能有超大的UIView或小的UIView 为UIPanGestureRecognizer设置一种屏幕限制,以便

注:我发现的所有东西都太旧了,或者与我实际需要的东西太不一样了,而且我几乎尝试了我发现的所有东西,但都没有找到正确的方法

我创建了3个UIView,我可以拖动它们并缩放它们。 现在,我需要:

  • 把他们中的一些带到前面:我想给每个人增加一个 UITap手势,允许我将点击的UIView带到前面 将其他视图传递到后面
  • 为UIPinchGestureRecognitor设置最大/最小刻度,以便 不能有超大的UIView或小的UIView
  • 为UIPanGestureRecognizer设置一种屏幕限制,以便 无法将我的UIView拖到主视图之外 这是我的密码:

    我解决了我的问题

  • 我找到了如何为UIPinchGestureRecognitor设置最大/最小刻度的方法,下面是我所做的
  • ecc。。。 但如果您想限制平移手势,则无法执行此操作,因此您可能需要添加轻触手势识别器:

    向视图中添加手势识别器并设置代理

    @IBAction func tappedView1(recognizer: UITapGestureRecognizer) {
            view.bringSubviewToFront(myView)
        }
    
    在您的viewDidLoad中:

     let tap = UITapGestureRecognizer(target: self, action: #selector(tappedView1))
            tap.cancelsTouchesInView = false
            self.view.addGestureRecognizer(tap)
    
  • 要设置屏幕限制/平移限制,我发现以下代码:
  • @iAction func handlePan(识别器:UIPangestureRecognitizer){
    let translation=recognizer.translation(在:self.view中)
    让statusFrame=UIApplication.shared.statusBarFrame
    如果让识别器视图=recognizer.view{
    如果识别器view.frame.origin.x<0.0{
    recognizerView.frame.origin=CGPoint(x:0.0,y:recognizerView.frame.origin.y)
    }
    如果识别器view.frame.origin.yview.frame.width{
    recognizerView.frame.origin=CGPoint(x:view.frame.width-recognizerView.frame.size.width,y:recognizerView.frame.origin.y)
    }
    如果识别器view.frame.origin.y+识别器view.frame.size.height>view.frame.height{
    recognizerView.frame.origin=CGPoint(x:recognizerView.frame.origin.x,y:view.frame.height-recognizerView.frame.size.height)
    }
    }
    如果让centerX=recognizer.view?.center.x,则让centerY=recognizer.view?.center.y{
    识别器.view?.center=CGPoint.init(x:centerX+translation.x,y:centerY+translation.y)
    识别器.setTranslation(CGPoint.zero,in:self.view)
    }
    视图。将子视图带到前面(视图1)
    识别器.setTranslation(CGPoint.zero,in:self.view)
    }
    
    @IBAction func tappedView1(recognizer: UITapGestureRecognizer) {
            view.bringSubviewToFront(myView)
        }
    
     let tap = UITapGestureRecognizer(target: self, action: #selector(tappedView1))
            tap.cancelsTouchesInView = false
            self.view.addGestureRecognizer(tap)
    
    @IBAction func handlePan(recognizer:UIPanGestureRecognizer) {
            let translation = recognizer.translation(in: self.view)
            let statusFrame = UIApplication.shared.statusBarFrame
    
    
            if let recognizerView = recognizer.view {
                if recognizerView.frame.origin.x < 0.0 {
                    recognizerView.frame.origin = CGPoint(x: 0.0, y: recognizerView.frame.origin.y)
                }
                if recognizerView.frame.origin.y < statusFrame.height {
                    recognizerView.frame.origin = CGPoint(x: recognizerView.frame.origin.x, y: statusFrame.height)
                }
                if recognizerView.frame.origin.x + recognizerView.frame.size.width > view.frame.width {
                    recognizerView.frame.origin = CGPoint(x: view.frame.width - recognizerView.frame.size.width, y: recognizerView.frame.origin.y)
    
                }
                if recognizerView.frame.origin.y + recognizerView.frame.size.height > view.frame.height {
                    recognizerView.frame.origin = CGPoint(x: recognizerView.frame.origin.x, y: view.frame.height - recognizerView.frame.size.height)
                }
            }
    
            if let centerX = recognizer.view?.center.x, let centerY = recognizer.view?.center.y {
                recognizer.view?.center = CGPoint.init(x: centerX + translation.x , y: centerY + translation.y)
                recognizer.setTranslation(CGPoint.zero, in: self.view)
            }
    
            view.bringSubviewToFront(view1)
            recognizer.setTranslation(CGPoint.zero, in: self.view)
    }