func prepareView() {
        view.backgroundColor = UIColor.white
        view.layer.cornerRadius = 10
        view.layer.masksToBounds = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(self.didTapTransitioningBackgroundView))
        transitioningBackgroundView.addGestureRecognizer(tap)
        transitioningBackgroundView.isUserInteractionEnabled = true
    }

    @objc func didTapTransitioningBackgroundView() {
        didTapCancel()
    }

    func prepareLayout() {
        guard let navBar = navBar,
            let collectionView = collectionView else {
            return
        }
        navBar.autoPinEdge(toSuperviewEdge: .top)
        navBar.autoPinEdge(toSuperviewEdge: .leading)
        navBar.autoPinEdge(toSuperviewEdge: .trailing)
        navBar.autoSetDimension(.height, toSize: 44)

        collectionView.autoPinEdge(.top, to: .bottom, of: navBar)
        collectionView.autoPinEdge(toSuperviewEdge: .leading)
        collectionView.autoPinEdge(toSuperviewEdge: .trailing)
        collectionView.autoPinEdge(toSuperviewEdge: .bottom)
    }

    func prepareNavBar() {
        let navBar = UINavigationBar(frame: CGRect.zero)
        view.addSubview(navBar)
        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
        let color = UIColor.white
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
        color.setFill()
        UIRectFill(rect)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        navBar.setBackgroundImage(image, for: .default)
        navBar.tintColor = UIColor.black
        navBar.isTranslucent = false
        self.navigationItem.title = "Category"
        navBar.setItems([self.navigationItem], animated: false)
        self.navBar = navBar
    }
class DropDownPresentTransitionController: NSObject, UIViewControllerAnimatedTransitioning {

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 1.0
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        guard let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) else {
            return
        }
        guard let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) as? SUIViewController else {
            return
        }
        let bounds = UIScreen.main.bounds
        toViewController.transitioningBackgroundView.backgroundColor = UIColor.darkGray
        toViewController.transitioningBackgroundView.alpha = 0.6
        toViewController.transitioningBackgroundView.frame = bounds

        let containerView = transitionContext.containerView
        containerView.addSubview(toViewController.transitioningBackgroundView)
        containerView.addSubview(toViewController.view)
        //let finalFrameForVC = transitionContext.finalFrame(for: toViewController)

        let x = floor(bounds.width*0.1)
        let y = floor(bounds.height*0.2)
        let width = floor(bounds.width*0.8)
        let height = floor(bounds.height*0.5) > 400 ? floor(bounds.height*0.5) : 400
        let finalFrameForVC = CGRect(x: x, y: y, width: width, height: height)

        let xOffset: CGFloat = 0
        let yOffset = -bounds.size.height
        toViewController.view.frame = finalFrameForVC.offsetBy(dx: xOffset, dy: yOffset)
        //containerView.addSubview(fromViewController.view)


        let options = UIViewAnimationOptions.curveEaseIn
        UIView.animate(withDuration: transitionDuration(using: transitionContext), delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.2, options: options, animations: {
            fromViewController.view.alpha = 0.8
            toViewController.view.frame = finalFrameForVC
        }, completion: {
            finished in
            transitionContext.completeTransition(true)

        })
    }
}
class DropDownDismissTransitionController: NSObject, UIViewControllerAnimatedTransitioning {

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 1
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        guard let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) as? SUIViewController else {
            return
        }
        guard let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) else {
            return
        }
        let bounds = UIScreen.main.bounds
        let x = fromViewController.view.center.x
        let y = bounds.height + fromViewController.view.frame.height / 2
        let finalCenter = CGPoint(x: x, y: y)

        let options = UIViewAnimationOptions.curveEaseIn
        UIView.animate(withDuration: transitionDuration(using: transitionContext), delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.2, options: options, animations: {
            fromViewController.view.center = finalCenter
            fromViewController.transitioningBackgroundView.alpha = 0
            toViewController.view.alpha = 1
        }, completion: {
            finished in
            fromViewController.view.removeFromSuperview()
            transitionContext.completeTransition(true)
        })
    }
}
class PopoverTransitionController: NSObject, UIViewControllerAnimatedTransitioning {

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 1.0
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        guard let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) else {
            return
        }
        guard let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) as? SUIViewController else {
            return
        }
        let bounds = UIScreen.main.bounds
        toViewController.transitioningBackgroundView.backgroundColor = UIColor.darkGray
        toViewController.transitioningBackgroundView.alpha = 0.6
        toViewController.transitioningBackgroundView.frame = bounds

        let containerView = transitionContext.containerView
        containerView.addSubview(toViewController.transitioningBackgroundView)
        containerView.addSubview(toViewController.view)
        //let finalFrameForVC = transitionContext.finalFrame(for: toViewController)

        let x = floor(bounds.width*0.1)
        let y = floor(bounds.height*0.2)
        let width = floor(bounds.width*0.8)
        let height = floor(bounds.height*0.5) > 400 ? floor(bounds.height*0.5) : 400
        let finalFrameForVC = CGRect(x: x, y: y, width: width, height: height)

        toViewController.view.frame = finalFrameForVC.offsetBy(dx: 0, dy: bounds.size.height)
        //containerView.addSubview(fromViewController.view)


        let options = UIViewAnimationOptions.curveEaseIn
        UIView.animate(withDuration: transitionDuration(using: transitionContext), delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.2, options: options, animations: {
            fromViewController.view.alpha = 0.8
            toViewController.view.frame = finalFrameForVC
        }, completion: {
            finished in
            transitionContext.completeTransition(true)

        })
    }
}
class PopoverDisMissTransitionController: NSObject, UIViewControllerAnimatedTransitioning {

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 1
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        guard let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) as? SUIViewController else {
            return
        }
        guard let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) else {
            return
        }
        let bounds = UIScreen.main.bounds
        let x = fromViewController.view.center.x
        let y = bounds.height + fromViewController.view.frame.height / 2
        let finalCenter = CGPoint(x: x, y: y)

        let options = UIViewAnimationOptions.curveEaseIn
        UIView.animate(withDuration: transitionDuration(using: transitionContext), delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.2, options: options, animations: {
            fromViewController.view.center = finalCenter
            fromViewController.transitioningBackgroundView.alpha = 0
            toViewController.view.alpha = 1
        }, completion: {
            finished in
            fromViewController.view.removeFromSuperview()
            //toViewController.view.alpha = 1
            transitionContext.completeTransition(true)
        })
    }
}

results matching ""

    No results matching ""