Skip to content

Instantly share code, notes, and snippets.

View tylerlantern's full-sized avatar

Nattapong Unaregul tylerlantern

View GitHub Profile
func interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
return interactionTransition.transitionInProgress ? interactionTransition : nil
}
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
presentationAnimator = BHMenuPresentation(presentedViewController: presented, presenting: presenting)
interactionTransition.attachViewController(presentedViewController : presented)
interactionTransition.setUpGestureOnView(view: presentationAnimator?.dimmingView)
interactionTransition.setUpGestureOnView(view: presented.view)
fileprivate let threshold : CGFloat = 300
@objc func handlePanGesture(sender: UIPanGestureRecognizer) {
let view = sender.view!
let viewTranslation = sender.translation(in: view)
switch sender.state {
case .began:
transitionInProgress = true
presentedViewController.dismiss(animated: true, completion: nil)
break
case .changed:
class BHMenuInteraction: UIPercentDrivenInteractiveTransition {
var transitionInProgress = false
var shouldCompleteTransition = false
var const : CGFloat = 0
var presentedViewController : UIViewController!
func attachViewController(presentedViewController vc : UIViewController) {
presentedViewController = vc
}
func setUpGestureOnView(view : UIView?){
guard let view = view else {return}
class BHMenuInteraction: UIPercentDrivenInteractiveTransition {
var transitionInProgress = false
var shouldCompleteTransition = false
var const : CGFloat = 0
var presentedViewController : UIViewController!
func attachViewController(presentedViewController vc : UIViewController) {
presentedViewController = vc
}
func setUpGestureOnView(view : UIView?){
guard let view = view else {return}
extension BHMenuTransitionManager : UIViewControllerTransitioningDelegate {
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
presentationAnimator = BHMenuPresentation(presentedViewController: presented, presenting: presenting)
return presentationAnimator
}
}
override public func presentationTransitionWillBegin() {
super.presentationTransitionWillBegin()
dimmingView.frame = presentingViewController.view.bounds
containerView?.addSubview(dimmingView)
guard let coordinator = presentedViewController.transitionCoordinator else {
return
}
coordinator.animate(alongsideTransition: { (context) in
self.dimmingView.alpha = 0.5
}, completion: nil)
public class BHMenuPresentation: UIPresentationController {
var bhDelegate : BHMenuPresentationDelegate?
public var dimmingView: UIView!
override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) {
super.init(presentedViewController: presentedViewController, presenting: presentingViewController)
setupDimmingView()
}
class MenuViewController : UIViewController {
@IBAction func action_dismiss(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
class FirstViewController: UIViewController {
lazy var transitionManager = BHMenuTransitionManager(instance: self, fromViewController: self.navigationController!)
@IBAction func action_openSideMenu(_ sender: Any) {
self.performSegue(withIdentifier: "segueMenu", sender: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
extension BHMenuTransitionManager : UIViewControllerTransitioningDelegate {
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return transitionAnimator
}
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return transitionAnimator
}