使用UIPanGestureRecognizer-swift-以编程方式获取视图的转换

使用UIPanGestureRecognizer-swift-以编程方式获取视图的转换,swift,uitextfield,translation,uipangesturerecognizer,Swift,Uitextfield,Translation,Uipangesturerecognizer,我正在使用UIPangestureRecognitor方法转换视图: @objc fileprivate func handlePan(_ gestureRecognizer : UIPanGestureRecognizer){ if gestureRecognizer.state == .began || gestureRecognizer.state == .changed { makeDisappearButtons() deletebox.isH

我正在使用UIPangestureRecognitor方法转换视图:

 @objc fileprivate func handlePan(_ gestureRecognizer : UIPanGestureRecognizer){
    if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
        makeDisappearButtons()
        deletebox.isHidden = false
        let translation = gestureRecognizer.translation(in: self.view)
        // note: 'view' is optional and need to be unwrapped
        gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x + translation.x, y: gestureRecognizer.view!.center.y + translation.y)
        gestureRecognizer.setTranslation(CGPoint.zero, in: self.view)
        if gestureRecognizer.view!.frame.intersects(deletebox.frame) {
            UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseInOut, animations: {
                gestureRecognizer.view!.transform = .init(scaleX: 0.6, y: 0.6)
                self.deletebox.transform = .init(scaleX: 1.2, y: 1.2)
            }, completion: nil)
        } else {
            gestureRecognizer.view!.setNeedsDisplay()
            gestureRecognizer.setTranslation(.zero, in: self.view)
            UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseInOut, animations: {
                self.deletebox.transform = .identity
                gestureRecognizer.view!.transform = .identity
            }, completion: nil)
        }
    }
    
    if gestureRecognizer.state == .ended {
        makeButtonsReAppear()
        if gestureRecognizer.view!.frame.intersects(deletebox.frame) {
            gestureRecognizer.view!.isHidden = true
            gestureRecognizer.view?.removeFromSuperview()
        } else {
            gestureRecognizer.view!.setNeedsDisplay()
            gestureRecognizer.setTranslation(.zero, in: self.view)
            gestureRecognizer.view!.transform = .identity
        }
        print(gestureRecognizer.translation(in: self.view))
        deletebox.isHidden = true
    }
}

我想知道gestureRecognizer.state==.ended中视图的翻译,但当我尝试打印它时,它是x:0,y:0。

从哪里调用此方法,可能会将它放在ViewDidDisplay中并尝试。否则,调用setNeedsDisplay和LayoutIfNeeded方法。

每次手势处理程序调用
更改时,将转换设置回
.zero

gestureRecognizer.setTranslation(.zero, in: self.view)
但是,当手指抬起时,状态变为
结束
,此时翻译不再改变。 报告说:

当用户的手指从屏幕上抬起时,手势识别器进入UIgestureRecognitor.State.ended状态


因此,在上次的
changed
调用和
end
调用中,翻译是相同的——并且因为您已经设置了
手势识别器的框架。查看
内部
changed
,您不需要在
end
内部执行任何操作。此方法由手势识别器调用,不是手动的。我认为
setNeedsDisplay
layoutifneedd
也不会有任何效果。该方法由手势识别器调用
gestureRecognizer.setTranslation(.zero, in: self.view)