void BurstTapCircle() { nfloat tapCircleFinalDiameter = CalculateTapCircleFinalDiameter(); tapCircleFinalDiameter += TapCircleBurstAmount; var endingRectSizerView = new UIView(new CGRect(0, 0, tapCircleFinalDiameter, tapCircleFinalDiameter)); endingRectSizerView.Center = RippleFromTapLocation ? TapPoint : new CGPoint(Bounds.GetMidX(), Bounds.GetMidY()); UIBezierPath endingCirclePath = UIBezierPath.FromRoundedRect(endingRectSizerView.Frame, tapCircleFinalDiameter / 2f); CAShapeLayer tapCircle = (RippleAnimationQueue.Count > 0) ? RippleAnimationQueue.GetItem <CAShapeLayer>(0) : null; if (tapCircle != null) { if (RippleAnimationQueue.Count > 0) { RippleAnimationQueue.RemoveObject(0); } DeathRowForCircleLayers.AddObjects(new NSObject[] { tapCircle }); CGPath startingPath = tapCircle.Path; nfloat startingOpacity = tapCircle.Opacity; if (tapCircle.AnimationKeys != null && tapCircle.AnimationKeys.Length > 0) { startingPath = tapCircle.Path; if (tapCircle.PresentationLayer != null) { startingOpacity = tapCircle.PresentationLayer.Opacity; } } CABasicAnimation tapCircleGrowthAnimation = CABasicAnimation.FromKeyPath("path"); tapCircleGrowthAnimation.Duration = TouchUpAnimationDuration; tapCircleGrowthAnimation.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseOut); tapCircleGrowthAnimation.SetFrom(startingPath); tapCircleGrowthAnimation.SetTo(endingCirclePath.CGPath); tapCircleGrowthAnimation.FillMode = CAFillMode.Forwards; tapCircleGrowthAnimation.RemovedOnCompletion = false; CABasicAnimation fadeOut = CABasicAnimation.FromKeyPath("opacity"); fadeOut.SetValueForKey(new NSString("fadeCircleOut"), new NSString("id")); fadeOut.SetFrom(NSNumber.FromNFloat(startingOpacity)); fadeOut.SetTo(NSNumber.FromNFloat(0f)); fadeOut.Duration = TouchUpAnimationDuration; fadeOut.FillMode = CAFillMode.Forwards; fadeOut.RemovedOnCompletion = false; tapCircle.AddAnimation(tapCircleGrowthAnimation, "animatePath"); tapCircle.AddAnimation(fadeOut, "opacityAnimation"); } }
void AnimationDidStop(CAAnimation theAnimation2, bool flag) { if ((theAnimation2.ValueForKey(new NSString("id")) as NSString).ToString() == "fadeCircleOut") { DeathRowForCircleLayers.GetItem <UIView>(0).RemoveFromSuperview(); if (DeathRowForCircleLayers.Count > 0) { DeathRowForCircleLayers.RemoveObject(0); } } }