swift5.x view平移以及拖动四角改变frame

2020-05-28  本文已影响0人  Bruce_XHG

1、view添加pan手势,移动view在屏幕上的位置,根据需求是否要限制屏幕边界还是父视图边界

@objc func panSliding(pan:UIPanGestureRecognizer){
      let point = pan.translation(in: self)
      let width = self.superview!.frame.size.width
      let height = self.superview!.frame.size.height
      var originalFrame = self.frame
    if originalFrame.origin.x >= 0 && (originalFrame.origin.x + originalFrame.size.width) <= width {
        originalFrame.origin.x += point.x
    }
    if originalFrame.origin.y >= 0 && (originalFrame.origin.y+originalFrame.size.height) <= height {
        originalFrame.origin.y += point.y
    }
    self.frame = originalFrame
        pan.setTranslation(CGPoint.zero, in: self)
        if pan.state == .began {
            self.fastBtn.isEnabled = false
        }else if pan.state == .changed {
        
    }else{
            var frame = self.frame;
            //记录是否越界
            var isOver = false
            if frame.origin.x < 0 {
                frame.origin.x = 0
                isOver = true
            }else if frame.origin.x + frame.size.width > width {
                frame.origin.x = width - frame.size.width;
                isOver = true
            }
            if frame.origin.y < 0 {
                frame.origin.y=0
                isOver = true
            }else if frame.origin.y + frame.size.height > height {
                frame.origin.y = height - frame.size.height
                isOver = true
            }
            if(isOver) {
                UIView.animate(withDuration: 0.2) {
                    self.frame = frame
                }
            }
            self.fastBtn.isEnabled = true
    }
}

2、有时候会遇到拖动view的四角改变view的frame,拖动的对角位置不变。我的做法是分别在四角添加了view以及对添加的view添加了pan手势,注意改变frame时的连续性(pan.setTranslation(CGPoint.zero, in: self))也就是这句代码

@objc func rightTopView(pan:UIPanGestureRecognizer){
        
        let point = pan.translation(in: self)
        let superviewMaxX = self.superview!.frame.size.width
//      let superviewMaxY = self.superview!.frame.size.height
        debugPrint(point)
        var originalFrame = self.frame
        if originalFrame.origin.y <= 0 {
            originalFrame.origin.y = 0
        }else{
            if originalFrame.size.height <= 70 {
                
            }else{
                originalFrame.origin.y = originalFrame.origin.y + point.y
            }
            
        }
        if originalFrame.size.height < 70 {
            originalFrame.size.height = 70
        }else{
            if originalFrame.origin.y <= 0 {
                
            }else{
                originalFrame.size.height = originalFrame.size.height - point.y
            }
        }
        if originalFrame.size.width < 180 {
            originalFrame.size.width = 180
        }else if originalFrame.size.width + originalFrame.origin.x > superviewMaxX {
            originalFrame.size.width = superviewMaxX - originalFrame.origin.x
        }else{
            originalFrame.size.width = originalFrame.size.width + point.x
        }
        
        self.frame = originalFrame
        pan.setTranslation(CGPoint.zero, in: self)
    }
上一篇 下一篇

猜你喜欢

热点阅读