void DismissWorker() { SetFadeoutTimer(null); SetProgressTimer(null); UIView.Animate(0.3, 0, UIViewAnimationOptions.CurveEaseIn | UIViewAnimationOptions.AllowUserInteraction, delegate { HudView.Transform.Scale(0.8f, 0.8f); if (isClear) { HudView.Alpha = 0f; } else { Alpha = 0f; } }, delegate { if (Alpha == 0f || HudView.Alpha == 0f) { InvokeOnMainThread(delegate { Alpha = 0f; HudView.Alpha = 0f; //Removing observers UnRegisterNotifications(); NSNotificationCenter.DefaultCenter.RemoveObserver(this); Ring.ResetStyle(IsiOS7ForLookAndFeel, (IsiOS7ForLookAndFeel ? TintColor : UIColor.White)); CancelRingLayerAnimation(); StringLabel.RemoveFromSuperview(); SpinnerView.RemoveFromSuperview(); ImageView.RemoveFromSuperview(); if (_cancelHud != null) { _cancelHud.RemoveFromSuperview(); } StringLabel = null; SpinnerView = null; ImageView = null; _cancelHud = null; HudView.RemoveFromSuperview(); HudView = null; OverlayView.RemoveFromSuperview(); OverlayView = null; this.RemoveFromSuperview(); if (IsiOS7ForLookAndFeel) { var rootController = UIApplication.SharedApplication.KeyWindow.RootViewController; if (rootController != null) { rootController.SetNeedsStatusBarAppearanceUpdate(); } } }); } }); }
void ShowProgressWorker(float progress = -1, string status = null, MaskType maskType = MaskType.None, bool textOnly = false, ToastPosition toastPosition = ToastPosition.Center, string cancelCaption = null, Action cancelCallback = null, double timeoutMs = 1000, bool showContinuousProgress = false, UIImage displayContinuousImage = null) { Ring.ResetStyle(IsiOS7ForLookAndFeel, (IsiOS7ForLookAndFeel ? TintColor : UIColor.White)); if (OverlayView.Superview == null) { var windows = UIApplication.SharedApplication.Windows; Array.Reverse(windows); foreach (UIWindow window in windows) { if (window.WindowLevel == UIWindowLevel.Normal && !window.Hidden) { window.AddSubview(OverlayView); break; } } } if (Superview == null) { OverlayView.AddSubview(this); } _fadeoutTimer = null; ImageView.Hidden = true; _maskType = maskType; _progress = progress; StringLabel.Text = status; if (!string.IsNullOrEmpty(cancelCaption)) { CancelHudButton.SetTitle(cancelCaption, UIControlState.Normal); CancelHudButton.TouchUpInside += delegate { Dismiss(); if (cancelCallback != null) { obj.InvokeOnMainThread(() => cancelCallback.DynamicInvoke(null)); //cancelCallback.DynamicInvoke(null); } }; } UpdatePosition(textOnly); if (showContinuousProgress) { if (displayContinuousImage != null) { _displayContinuousImage = true; ImageView.Image = displayContinuousImage; ImageView.Hidden = false; } RingLayer.StrokeEnd = 0.0f; StartProgressTimer(TimeSpan.FromMilliseconds(Ring.ProgressUpdateInterval)); } else { if (progress >= 0) { ImageView.Image = null; ImageView.Hidden = false; SpinnerView.StopAnimating(); RingLayer.StrokeEnd = progress; } else if (textOnly) { CancelRingLayerAnimation(); SpinnerView.StopAnimating(); } else { CancelRingLayerAnimation(); SpinnerView.StartAnimating(); } } bool cancelButtonVisible = _cancelHud != null && _cancelHud.IsDescendantOfView(_hudView); // intercept user interaction with the underlying view if (maskType != MaskType.None || cancelButtonVisible) { OverlayView.UserInteractionEnabled = true; //AccessibilityLabel = status; //IsAccessibilityElement = true; } else { OverlayView.UserInteractionEnabled = false; //hudView.IsAccessibilityElement = true; } OverlayView.Hidden = false; this.toastPosition = toastPosition; PositionHUD(null); if (Alpha != 1) { RegisterNotifications(); HudView.Transform.Scale(1.3f, 1.3f); if (isClear) { Alpha = 1f; HudView.Alpha = 0f; } UIView.Animate(0.15f, 0, UIViewAnimationOptions.AllowUserInteraction | UIViewAnimationOptions.CurveEaseOut | UIViewAnimationOptions.BeginFromCurrentState, delegate { HudView.Transform.Scale((float)1 / 1.3f, (float)1f / 1.3f); if (isClear) { HudView.Alpha = 1f; } else { Alpha = 1f; } }, delegate { //UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, string); if (textOnly) { StartDismissTimer(TimeSpan.FromMilliseconds(timeoutMs)); } }); SetNeedsDisplay(); } }