예제 #1
0
        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);
        }
예제 #2
0
        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;
        }
예제 #3
0
        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();
            }
        }
예제 #4
0
        /*
         * 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();
            }
        }
예제 #5
0
        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;
        }