ios - 立即调用 Pan Gesture 完成处理程序

标签 ios swift uipangesturerecognizer

我正在为一个 View 设置动画,使其随着用户平移屏幕而移动。我保留了一个阈值,在该阈值之后 View 将动画到默认位置。

当前的问题是在持续时间之前调用将 View 重置到某个位置的动画方法的完成处理程序。动画似乎是突然发生的,而不是持续一段时间。

// Pan gesture selector method
@objc func panAction(for panGesture: UIPanGestureRecognizer) {
    switch panGesture.state {
    case .began:
    //Began code
    case changed:
    if (condition) {
       print("IF")
       //Change constraint constant of customView
       animate(view: customView)
    } else if (condition) {
       print("ELSE IF")
       //Change constraint constant of customView
       animate(view: customView)
    } else {
       //Change constraint constant of customView
       print("ELSE")
       view.layoutIfNeeded()
    }
    case .ended:
    //Ended code
    default:
    break
    }
}

动画方法:

func animate(view: UIView) {
    UIView.animate(withDuration: 3, delay: 0, options: .curveEaseOut, animations: {
        view.layoutIfNeeded()
    }, completion: { (finished) in
        if finished {
            flag = false
        }
    })
}

标志立即设置,而不是 3 秒后。

我在平移和越过阈值时获得的 o/p。

其他

其他

其他

其他

如果

编辑:我是个白痴。我没有在 superView 上调用 layoutIfNeeded()

最佳答案

您的手势会在手势发生时发送多个事件,并且当您多次调用 UIView.animate() 代码时,新值会取代前一个值。

尝试添加动画选项 .beginFromCurrentState:

UIView.animate(withDuration: 0.5, delay: 0, options: [.beginFromCurrentState,.allowAnimatedContent,.allowUserInteraction], animations: {
    view.layoutIfNeeded()
}) { (completed) in
    ...
}

并且期望随着手势的进行,您的 completed 会被多次调用,并且 completed == false。


编辑:您的问题也可能与在错误的 View 上调用 layoutIfNeeded() 有关,可能尝试在 viewController.view 上调用它?

关于ios - 立即调用 Pan Gesture 完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51414751/

相关文章:

ios - SwiftUI,iOS : How to access public function inside @main struct from custom internal View?

Java 密码更新与 IOS CommonCrypto 更新

ios - 平移后将 View 返回到其原始位置

ios - 如何使用 UIDragInteraction 立即开始拖动?

iOS - UIPageViewController 大小推断与自由形式

ios - iPad 4.3 模拟器使用 xcode 4.3.3 显示黑屏

ios - 如何在 Parse 中按数组长度查询

swift - 为对象 Swift 定义自定义类

ios - 如何使照片多选与平移手势上的默认 iPhone 照片应用程序相同

ios - 在 Swift 中更改 UITabBarItem 上的 selectedImage