英雄动画开始推迟

时间:2018-06-14 10:35:49

标签: ios swift animation

我正在尝试在导航控制器内部使用Hero的两个控制器之间实现转换。 我有这种方法来处理平移手势:

@objc func pannedCell(gesture: UIPanGestureRecognizer) {
    guard let animatedView = gesture.view as? HotelListingCollectionViewCell else {
        return
    }
    let translation = gesture.translation(in: nil)
    let screenHeight = self.rootView.bounds.height
    let progress = ((-1 * translation.y) / screenHeight) * 2
    print(progress)

    switch gesture.state {
    case .began:
        self.initialViewPostion = animatedView.center
        Hero.shared.defaultAnimation = .fade
            let vc = ListingSearchViewController()
            vc.viewModel.hotels.value = self.viewModel.hotels.value
            self.navigationController?.pushViewController(vc, animated: true)
    case .changed:
        Hero.shared.update(progress)
        let pos = CGPoint(
                x: animatedView.center.x + translation.x,
                y: self.rootView.hotelResultsCollectionView.center.y + translation.y
        )
            Hero.shared.apply(modifiers: [
                .position(pos),
                .useGlobalCoordinateSpace,
                .useOptimizedSnapshot
            ], to: animatedView)
    default:
        if progress > 0.8 {
                Hero.shared.finish()
        } else {
                Hero.shared.cancel()
        }
    }
}

这里的问题是pushViewController方法需要大约1秒才能执行,因此当我开始拖动视图时,它会在我的手指下移动。我开始在屏幕上移动手指后1秒钟。

我做错了吗?

由于

1 个答案:

答案 0 :(得分:0)

好的,我想我找到了一些东西!

这个问题似乎与我在手势处理程序的情况下所做的操作有关。

我将新视图控制器的实例化移出此调用以避免在动画期间重载UI线程,并且一切似乎都按预期工作。