public void ShowFromViewController(UIViewController viewController, 
            JTSImageViewControllerTransition transition) 
        {

            this.Transition = transition;

            StartingInfo.StatusBarHiddenPriorToPresentation = UIApplication.SharedApplication.StatusBarHidden;
            StartingInfo.StatusBarStylePriorToPresentation = UIApplication.SharedApplication.StatusBarStyle;

            if (Mode == JTSImageViewControllerMode.Image) {
                if (this.Transition == JTSImageViewControllerTransition.FromOffscreen) {
                    ShowImageViewerByScalingDownFromOffscreenPositionWithViewController (viewController);
                } else {
                    ShowImageViewerByExpandingFromOriginalPositionFromViewController (viewController);
                }
            } else if (Mode == JTSImageViewControllerMode.AltText) {
                ShowAltTextFromViewController (viewController);
            }
        }
        // Public Methods

        public async Task DownloadThenShowFromViewController(
            UIViewController viewController, 
            JTSImageViewControllerTransition transition,
            UIView fromView,
            CancellationToken cancel,
            int progressHeight = 0,
            UIActivityIndicatorView spinner = null
        )
        {
            bool newSpinner = false;
            if (spinner == null)
            {
                newSpinner = true;
                spinner = new UIActivityIndicatorView (UIActivityIndicatorViewStyle.WhiteLarge) 
                { BackgroundColor = UIColor.Black.ColorWithAlpha (.5f) };
                spinner.Layer.CornerRadius = 5.0f;

                fromView.AddSubview (spinner);
                spinner.Frame = new RectangleF(
                    fromView.Frame.X,
                    fromView.Frame.Y,
                    fromView.Frame.Width,
                    progressHeight == 0 ? fromView.Frame.Height : progressHeight
                );


            }

            spinner.StartAnimating ();
            spinner.Hidden = false;
            Image = await SetupImageAndDownloadIfNecessary (ImageInfo);
            spinner.StopAnimating ();
            spinner.Hidden = true;

            if (newSpinner)
            {
                spinner.RemoveFromSuperview ();
            }

            if (cancel.IsCancellationRequested)
                return;
            ImageInfo.Image = Image;
            ShowFromViewController (viewController, transition);
            UpdateInterfaceWithImage (Image);
        }