当我在swift中向上滑动时,如何减小比例

当我在swift中向上滑动时,如何减小比例,swift,uikit,uipangesturerecognizer,Swift,Uikit,Uipangesturerecognizer,我想在向上滑动时减小uiview的比例,我想在ios 12或13中关闭应用程序时使用相同的动画 class ViewController: UIViewController { @IBOutlet weak var myView: UIView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view.

我想在向上滑动时减小uiview的比例,我想在ios 12或13中关闭应用程序时使用相同的动画

class ViewController: UIViewController {
    @IBOutlet weak var myView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
       let panGesture = UIPanGestureRecognizer(target: self, action: #selector(didPanningFromBottom))
        
        myView.addGestureRecognizer(panGesture)
        panGesture.delegate = self
    }
    @objc func didPanningFromBottom(recognizer: UIPanGestureRecognizer){
        if recognizer.state == .began {
            print("began")
        }
        else if recognizer.state == .changed {
            UIView.animate(withDuration: 0.1, delay: 0.25, options: .curveEaseOut) {
                self.myView.transform = CGAffineTransform(scaleX: 0.25, y: 0.25 )
            }

        }
    }
}

你可以这样做

假设代码的其余部分完好无损,只需交换
didPanningFromBottom

基本上你需要做两件事。首先跟踪拖动操作,然后用手指沿着视图移动,如果需要,可以稍微缩放一下。第二,在发布时,确定是应该为视图设置动画,还是让它反弹回来。在我的代码中,我检查了释放点的速度和距离。您可能需要修改确切的值

您可能还需要检查
。取消
案例以始终移回起始位置

@objc func didPanningFromBottom(recognizer: UIPanGestureRecognizer){
    let yPosition = recognizer.translation(in: view).y
    let yVelocity = recognizer.velocity(in: view).y

    if recognizer.state == .began {

    } else if recognizer.state == .changed {

        // Scale down a small amount
        let scale: CGFloat = 1.0 - abs(yPosition / 2000)
        
        myView.transform = CGAffineTransform.identity
            .translatedBy(x: 0, y: yPosition)
            .scaledBy(x: scale, y: scale)

    } else if recognizer.state == .ended {

        // If either have a minimum velocity or release beyond a fixed point
        if yVelocity < -200 || (yVelocity <= 0 && yPosition < 400) {

            UIView.animate(withDuration: 0.25) {
                self.myView.transform = CGAffineTransform.identity.translatedBy(x: 0, y: -self.view.bounds.size.height / 2 - self.myView.bounds.size.height / 2)
                self.myView.alpha = 0
            }
        } else {
            // Move it back to start
            UIView.animate(withDuration: 0.25) {
                self.myView.transform = CGAffineTransform.identity
            }
        }
    }
}
@objc func didpanningfromtombottom(识别器:UIPangestureReceignizer){
让yPosition=recognizer.translation(在:视图中).y
让yVelocity=recognizer.velocity(在:视图中).y
如果识别器.state==.已开始{
}否则,如果识别器.state==.changed{
//缩小一小部分
让刻度:CGFloat=1.0-abs(位置/2000)
myView.transform=CGAffineTransform.identity
.translatedBy(x:0,y:y位置)
.scaledBy(x:比例,y:比例)
}如果recognizer.state==。结束,则为else{
//如果有一个最小速度或释放超过一个固定点

如果yVelocity<-200 | |(yVelocity您当前的代码有什么问题?您需要回答您的问题,并清楚地解释您的预期行为以及您当前的代码与之不匹配的原因。@DávidPásztor我想向上拖动以增加uiview的比例,同时我的手指向上移动uiview以减小其比例我非常需要您that@ArbazChughtai别忘了做标记请接受我的回答。