Skip to content

Can Hero use swipe back gesture animation like UINavigationController default swipe back gesture animation in a presenting controller? #713

@zkfpk6

Description

@zkfpk6

First sorry for my bad English.
Here is my code:
`

@objc func hero_setPushAnimationType() {
    self.hero.modalAnimationType = .selectBy(presenting: .push(direction: .left), dismissing: .push(direction: .right))
    self.hero.isEnabled = true
}

@objc func enableSwipeBackWhenPresent(WithFinishDismissBlock finishDismissBlock: (() -> Void)?) {
    self.heroDismissBlock = finishDismissBlock
    let gesture = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(swipe(_:)))
    gesture.edges = .left
    self.view.addGestureRecognizer(gesture)
}

@objc func swipe(_ gesture:UIScreenEdgePanGestureRecognizer) {
    switch gesture.state {
    case .began:
        self.dismiss(animated: true, completion: nil)
    case .changed:
        let progress = gesture.translation(in: nil).x / self.view.bounds.width
        Hero.shared.update(progress)
    default:
        if (gesture.translation(in: nil).x + gesture.velocity(in: nil).x) / self.view.bounds.width > 0.5 {
            self.dismiss(animated: true, completion: nil)
            Hero.shared.finish()
            if (self.heroDismissBlock != nil) {
                self.heroDismissBlock!()
            }
        } else {
            Hero.shared.cancel()
        }
    }
}

`

Now i can swipe back very similar to UINavigationController, but because of the animation is not linear animation, current controller not tracking while my finger's movement, so how to fix it?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions