public void SetAngel(IList <ActionButtonView> Lst, float radius, int Degress, int Duration) { var degrees = Degress / Lst.Count; int i = 0; foreach (var item in Lst) { var hOffset = radius * Math.Cos(i * degrees * 3.14 / 180); var vOffset = radius * Math.Sin(i * degrees * 3.14 / 180); var btn = new CustomFloatingactionbutton(item); btn.TranslatesAutoresizingMaskIntoConstraints = false; btn.Alpha = 0; viewController.InsertSubview(btn, 1); btn.CenterXAnchor.ConstraintGreaterThanOrEqualTo(MainView.CenterXAnchor, 0).Active = true; btn.CenterYAnchor.ConstraintGreaterThanOrEqualTo(MainView.CenterYAnchor, 0).Active = true; nfloat xpos = 0; if (ActionOrientation == StackActionOrientation.Left) { xpos = (nfloat)hOffset; } else { xpos = -(nfloat)hOffset; } UIView.Animate((float)Duration / 1000, 0, UIViewAnimationOptions.TransitionFlipFromBottom, () => { btn.Transform = CGAffineTransform.MakeTranslation(xpos, -1 * (nfloat)vOffset); btn.Alpha = 1; }, () => { }); i++; } }
public async Task <bool> ShowSubView(int Duration = 150) { if (!IsSubShowing && !isProgress && IsShowing) { if (SubViews.Count > 0) { IsSubShowing = true; isProgress = true; lastOpeningType = OpeningType; if (OpeningType != ActionOpeningType.Circle) { foreach (var item in SubViews) { if (OpeningType == ActionOpeningType.HorizontalLeft || OpeningType == ActionOpeningType.HorizontalRight) { if (ActionOrientation == StackActionOrientation.Right) { LeftConstraint.Constant -= MainView.Spacing + (nfloat)MainButtonView.HeightRequest; } else if (ActionOrientation == StackActionOrientation.Center) { LeftConstraint.Constant -= (MainView.Spacing + (nfloat)MainButtonView.HeightRequest) / 2; } } var btn = new CustomFloatingactionbutton(item); if (OpeningType == ActionOpeningType.VerticalTop || OpeningType == ActionOpeningType.HorizontalLeft) { MainView.InsertArrangedSubview(btn, 0); } else { MainView.AddArrangedSubview(btn); } var point = btn.Layer.AnchorPoint; UIView.Animate((float)Duration / 1000, 0, UIViewAnimationOptions.TransitionNone, () => { switch (OpeningType) { case ActionOpeningType.HorizontalLeft: btn.Transform = CGAffineTransform.MakeTranslation(-subViewSpacing, 0); break; case ActionOpeningType.HorizontalRight: btn.Transform = CGAffineTransform.MakeTranslation(+subViewSpacing, 0); break; case ActionOpeningType.VerticalTop: btn.Transform = CGAffineTransform.MakeTranslation(0, -subViewSpacing); break; case ActionOpeningType.VerticalBottom: btn.Transform = CGAffineTransform.MakeTranslation(0, +subViewSpacing); break; default: break; } }, () => { }); await Task.Delay(Duration); UIView.Animate((float)Duration / 1000, 0, UIViewAnimationOptions.TransitionNone, () => { btn.Transform = CGAffineTransform.MakeTranslation(0, 0); }, () => { }); await Task.Delay(Duration); } } else { if (ActionOrientation == StackActionOrientation.Center) { if (SubViews.Count == 5) { SetAngel(SubViews, CircleAngle, 225, Duration); } else if (SubViews.Count == 4) { SetAngel(SubViews, CircleAngle, 240, Duration); } else if (SubViews.Count == 6) { SetAngel(SubViews, CircleAngle, 220, Duration); } else if (SubViews.Count == 3) { SetAngel(SubViews, CircleAngle, 270, Duration); } else if (SubViews.Count == 2) { SetAngel(SubViews, CircleAngle, 360, Duration); } else if (SubViews.Count >= 7) { SetAngel(SubViews, CircleAngle, 215, Duration); } } else { SetAngel(SubViews, CircleAngle, 110, Duration); } } isProgress = false; } } return(true); }