首页 > 解决方案 > 平移手势视图上/下滑动动画不流畅

问题描述

我已经用 pangesture 实现了动画并且面临一些问题,因为动画看起来不流畅并且视图的位置没有设置为其实际的起始位置。

请看下图以了解动画。

在此处输入图像描述

以下是我处理平移手势并根据动画移动视图的代码。

@objc func wasDragged(gestureRecognizer: UIPanGestureRecognizer) {
    //return
    print(gestureRecognizer.state.rawValue)
    let direction = gestureRecognizer.direction(in: gestureRecognizer.view!)

    if gestureRecognizer.state == UIGestureRecognizerState.began || gestureRecognizer.state == UIGestureRecognizerState.changed {

        let translation = gestureRecognizer.translation(in: self.view)
        print(gestureRecognizer.view!.center.y)

        if((gestureRecognizer.view!.center.y) < minY){

            gestureRecognizer.view!.center = CGPoint(x:gestureRecognizer.view!.center.x, y:(minY - 1))
        }

        if(gestureRecognizer.view!.center.y < (self.pagingView.frame.size.height - 100) && gestureRecognizer.view!.center.y > (minY - 1)) {

            gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x, y: gestureRecognizer.view!.center.y + translation.y)

        }else {

            if(direction == .Up){
                print("UP")
                if(gestureRecognizer.view!.center.y  > (minY - 1 )){
                    gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x, y: gestureRecognizer.view!.center.y + translation.y)
                }else{
                    gestureRecognizer.view!.center = CGPoint(x:gestureRecognizer.view!.center.x, y:CGFloat(minY))
                }
            }else if(direction == .Down){
                print("Down")
                if((gestureRecognizer.view!.center.y - (minY-1)) > 100){
                    gestureRecognizer.view!.center = CGPoint(x:gestureRecognizer.view!.center.x, y:(self.pagingView.frame.size.height - 100))
                }else{
                    gestureRecognizer.view!.center = CGPoint(x:gestureRecognizer.view!.center.x, y:minY)
                }
            }
        }
        gestureRecognizer.setTranslation(CGPoint(x: 0, y: 0), in: self.view)
    }
}

上面代码我面临的问题是视图转换不平滑。如何实现如果用户将手指从屏幕的一半离开的逻辑,那么它应该自动将视图设置为初始部分?

标签: iosswiftuipangesturerecognizer

解决方案


推荐阅读