void Initialize(bool isCurrentScope = false) { OnceInitializeAction = null; OverlayView.BackgroundColor = _loadingView.OverlayColor.ToUIColor(); OverlayView.Alpha = 0f; OverlayView.TranslatesAutoresizingMaskIntoConstraints = false; SetOverlayConstrants(isCurrentScope); _loadingView.Parent = Application.Current.MainPage; _renderer = Dialogs.CreateNativeView(_loadingView); if (_loadingView.CornerRadius > 0) { _renderer.NativeView.Layer.CornerRadius = _loadingView.CornerRadius; _renderer.NativeView.Layer.MasksToBounds = true; } var measure = Dialogs.Measure(_loadingView); _renderer.SetElementSize(measure); var nativeView = _renderer.NativeView; nativeView.TranslatesAutoresizingMaskIntoConstraints = false; OverlayView.AddSubview(nativeView); nativeView.WidthAnchor.ConstraintEqualTo((System.nfloat)_loadingView.Bounds.Width).Active = true; nativeView.HeightAnchor.ConstraintEqualTo((System.nfloat)_loadingView.Bounds.Height).Active = true; Dialogs.SetLayoutAlignment(nativeView, OverlayView, _loadingView); }
void Initialize(bool isCurrentScope = false) { OnceInitializeAction = null; OverlayView.BackgroundColor = _config.OverlayColor.ToUIColor(); OverlayView.Alpha = 0f; OverlayView.TranslatesAutoresizingMaskIntoConstraints = false; SetOverlayConstrants(isCurrentScope); _activitySpinner = new UIActivityIndicatorView(UIActivityIndicatorViewStyle.WhiteLarge); _activitySpinner.Color = _config.IndicatorColor.ToUIColor(); _activitySpinner.TranslatesAutoresizingMaskIntoConstraints = false; OverlayView.AddSubview(_activitySpinner); _activitySpinner.CenterXAnchor.ConstraintEqualTo(OverlayView.CenterXAnchor, _config.OffsetX).Active = true; _activitySpinner.CenterYAnchor.ConstraintEqualTo(OverlayView.CenterYAnchor, _config.OffsetY).Active = true; _messageLabel = new UILabel(); _messageLabel.BackgroundColor = UIColor.Clear; _messageLabel.TextColor = _config.FontColor.ToUIColor(); _messageLabel.Font = _messageLabel.Font.WithSize((System.nfloat)_config.FontSize); _messageLabel.TextAlignment = UITextAlignment.Center; _messageLabel.Lines = 0; _messageLabel.LineBreakMode = UILineBreakMode.WordWrap; _messageLabel.TranslatesAutoresizingMaskIntoConstraints = false; _messageLabel.Text = _message; OverlayView.AddSubview(_messageLabel); _messageLabel.TopAnchor.ConstraintEqualTo(_activitySpinner.BottomAnchor, 20).Active = true; _messageLabel.CenterXAnchor.ConstraintEqualTo(OverlayView.CenterXAnchor, _config.OffsetX).Active = true; }
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.Hidden && window.IsKeyWindow) { 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(); } }
/* * void ShowProgressWorker(string cancelCaption, Delegate cancelCallback, float progress = -1, string status = null, MaskType maskType = MaskType.None){ * CancelHudButton.SetTitle(cancelCaption, UIControlState.Normal); * CancelHudButton.TouchUpInside += delegate { * BTProgressHUD.Dismiss(); * if(cancelCallback != null){ * cancelCallback.DynamicInvoke(null); * } * }; * UpdatePosition(); * ShowProgressWorker(progress, status, maskType); * } */ void ShowProgressWorker(float progress = -1, string status = null, MaskType maskType = MaskType.None, bool textOnly = false, bool showToastCentered = true, string cancelCaption = null, Action cancelCallback = null, double timeoutMs = 1000) { if (OverlayView.Superview == null) { UIApplication.SharedApplication.KeyWindow.AddSubview(OverlayView); } 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 { BTProgressHUD.Dismiss(); if (cancelCallback != null) { obj.InvokeOnMainThread(() => cancelCallback.DynamicInvoke(null)); //cancelCallback.DynamicInvoke(null); } }; } UpdatePosition(textOnly); if (progress >= 0) { ImageView.Image = null; ImageView.Hidden = false; SpinnerView.StopAnimating(); RingLayer.StrokeEnd = progress; } else if (textOnly) { CancelRingLayerAnimation(); SpinnerView.StopAnimating(); } else { CancelRingLayerAnimation(); SpinnerView.StartAnimating(); } if (maskType != MaskType.None) { OverlayView.UserInteractionEnabled = true; //AccessibilityLabel = status; //IsAccessibilityElement = true; } else { OverlayView.UserInteractionEnabled = true; //hudView.IsAccessibilityElement = true; } OverlayView.Hidden = false; this.showToastCentered = showToastCentered; PositionHUD(null); if (Alpha != 1) { RegisterNotifications(); HudView.Transform.Scale(1.3f, 1.3f); UIView.Animate(0.15f, 0, UIViewAnimationOptions.AllowUserInteraction | UIViewAnimationOptions.CurveEaseOut | UIViewAnimationOptions.BeginFromCurrentState, delegate { HudView.Transform.Scale((float)1 / 1.3f, (float)1f / 1.3f); Alpha = 1; }, delegate { //UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, string); if (textOnly) { StartDismissTimer(TimeSpan.FromMilliseconds(timeoutMs)); } }); SetNeedsDisplay(); } }
private void UpdateOverlay() { if (OverlayView == null) { return; } foreach (var subview in this.OverlayView.Subviews) { subview.RemoveFromSuperview(); } if (_borderVisible) { UIView borderView = new UIView(ScrollView.Frame.Inset(-1.0f, -1.0f)); borderView.Layer.BorderColor = UIColor.White.ColorWithAlpha(0.5f).CGColor; borderView.Layer.BorderWidth = 1.0f; borderView.BackgroundColor = UIColor.Clear; borderView.AutoresizingMask = ScrollView.AutoresizingMask; if (_cropHoleType == CropHoleType.Circle) { borderView.Layer.CornerRadius = borderView.Frame.Height / 2; } OverlayView.AddSubview(borderView); } CAShapeLayer maskWithHole = new CAShapeLayer(); CGRect biggerRect = OverlayView.Bounds; CGRect smallerRect = ScrollView.Frame; UIBezierPath maskPath = new UIBezierPath(); maskPath.MoveTo(new CGPoint(biggerRect.GetMinX(), biggerRect.GetMinY())); maskPath.AddLineTo(new CGPoint(biggerRect.GetMinX(), biggerRect.GetMaxY())); maskPath.AddLineTo(new CGPoint(biggerRect.GetMaxX(), biggerRect.GetMaxY())); maskPath.AddLineTo(new CGPoint(biggerRect.GetMaxX(), biggerRect.GetMinY())); maskPath.AddLineTo(new CGPoint(biggerRect.GetMinX(), biggerRect.GetMinY())); switch (_cropHoleType) { case CropHoleType.Square: { maskPath.MoveTo(new CGPoint(smallerRect.GetMinX(), smallerRect.GetMinY())); maskPath.AddLineTo(new CGPoint(smallerRect.GetMinX(), smallerRect.GetMaxY())); maskPath.AddLineTo(new CGPoint(smallerRect.GetMaxX(), smallerRect.GetMaxY())); maskPath.AddLineTo(new CGPoint(smallerRect.GetMaxX(), smallerRect.GetMinY())); maskPath.AddLineTo(new CGPoint(smallerRect.GetMinX(), smallerRect.GetMinY())); } break; case CropHoleType.Circle: { maskPath.MoveTo(new CGPoint(smallerRect.GetMaxX(), smallerRect.GetMidY())); maskPath.AddArc( center: ScrollView.Center, radius: smallerRect.Height / 2, startAngle: DegreesToRadians(0), endAngle: DegreesToRadians(360), clockWise: true); } break; } maskWithHole.Frame = this.Bounds; maskWithHole.Path = maskPath.CGPath; maskWithHole.FillRule = CAShapeLayer.FillRuleEvenOdd; OverlayView.Layer.Mask = maskWithHole; }