コード例 #1
0
        public static CABasicAnimation TranslateZ(nfloat translation, double?duration = null)
        {
            var animation = CABasicAnimation.FromKeyPath("transform.translation.z");

            animation.To = NSNumber.FromNFloat(translation);

            animation.FillMode            = Convert.MaterialAnimationFillModeToValue(MaterialAnimationFillMode.Forwards);
            animation.RemovedOnCompletion = false;
            animation.TimingFunction      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);
            if (duration != null)
            {
                animation.Duration = duration.Value;
            }
            return(animation);
        }
コード例 #2
0
        private CAAnimation AppearAnimation(double delay = 0)
        {
            var appear = new CABasicAnimation
            {
                KeyPath        = AppearDisappearKeyPathString,
                From           = FromObject(_indicatorLayer.Value.PresentationLayer.Opacity),
                To             = FromObject(1),
                Duration       = 0.15,
                TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut),
                BeginTime      = delay,
                FillMode       = CAFillMode.Forwards
            };

            return(appear);
        }
コード例 #3
0
        public static CABasicAnimation Position(CGPoint point, double?duration = null)
        {
            var animation = CABasicAnimation.FromKeyPath("position");

            animation.To = NSValue.FromCGPoint(point);

            animation.FillMode            = Convert.MaterialAnimationFillModeToValue(MaterialAnimationFillMode.Forwards);
            animation.RemovedOnCompletion = false;
            animation.TimingFunction      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);
            if (duration != null)
            {
                animation.Duration = duration.Value;
            }
            return(animation);
        }
コード例 #4
0
        public override void AnimateTransition(IUIViewControllerContextTransitioning transitionContext)
        {
            //1
            _transitionContext = transitionContext;

            //2
            var containerView      = _transitionContext.ContainerView;
            var fromViewController = _transitionContext.GetViewControllerForKey(UITransitionContext.FromViewControllerKey) as OnboardingController;
            var toViewController   = _transitionContext.GetViewControllerForKey(UITransitionContext.ToViewControllerKey) as ContainerController;
            var fromRect           = fromViewController.NavigationRect;
            var toRect             = new CGRect(-toViewController.View.Bounds.Width / 2, -toViewController.View.Bounds.Height / 2, toViewController.View.Bounds.Width * 2, toViewController.View.Bounds.Height * 2);

            //3
            containerView.AddSubview(toViewController.View);

            //4
            var circleMaskPathInitial = UIBezierPath.FromRoundedRect(fromRect, fromRect.Height / 2);

            var circleMaskPathFinal = UIBezierPath.FromRoundedRect(toRect, toRect.Height / 2);

            //5
            var maskLayer = new CAShapeLayer();

            maskLayer.Path = circleMaskPathFinal.CGPath;
            toViewController.View.Layer.Mask = maskLayer;

            //6
            var maskLayerAnimation = CABasicAnimation.FromKeyPath("path");

            maskLayerAnimation.SetFrom(circleMaskPathInitial.CGPath);
            maskLayerAnimation.SetTo(circleMaskPathFinal.CGPath);
            maskLayerAnimation.Duration       = TransitionDuration(_transitionContext);
            maskLayerAnimation.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseIn);

            maskLayerAnimation.AnimationStopped += (object sender, CAAnimationStateEventArgs e) => {
                if (_transitionContext != null)
                {
                    _transitionContext.CompleteTransition(!_transitionContext.TransitionWasCancelled);
                    var controller = _transitionContext.GetViewControllerForKey(UITransitionContext.FromViewControllerKey);
                    if (controller != null)
                    {
                        controller.View.Layer.Mask = null;
                    }
                }
            };

            maskLayer.AddAnimation(maskLayerAnimation, "path");
        }
コード例 #5
0
ファイル: Menu.cs プロジェクト: tilemapjp/MonoKit
        private void Expand()
        {
            if (flag == this.MenuItems.Count)
            {
                this.isAnimating = false;
                this.timer.Invalidate();
                this.timer = null;
                return;
            }

            int tag = 1000 + this.flag;

            MenuItem item = this.GetByTag(tag);

            item.Selected -= this.ItemSelected;
            item.Selected += this.ItemSelected;

            var rotateAnimation = (CAKeyFrameAnimation)CAKeyFrameAnimation.FromKeyPath("transform.rotation.z");

            rotateAnimation.Values   = new NSNumber[] { this.ExpandRotation, 0.0f };
            rotateAnimation.Duration = 0.5f;
            rotateAnimation.KeyTimes = new NSNumber[] { 0.3f, 0.4f };

            var positionAnimation = (CAKeyFrameAnimation)CAKeyFrameAnimation.FromKeyPath("position");

            positionAnimation.Duration = 0.5f;

            var path = new CGPath();

            path.MoveToPoint(item.StartPoint.X, item.StartPoint.Y);
            path.AddLineToPoint(item.FarPoint.X, item.FarPoint.Y);
            path.AddLineToPoint(item.NearPoint.X, item.NearPoint.Y);
            path.AddLineToPoint(item.EndPoint.X, item.EndPoint.Y);
            positionAnimation.Path = path;

            var animationGroup = new CAAnimationGroup();

            animationGroup.Animations     = new[] { positionAnimation, rotateAnimation };
            animationGroup.Duration       = 0.5f;
            animationGroup.FillMode       = CAFillMode.Forwards;
            animationGroup.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseIn);

            item.Layer.AddAnimation(animationGroup, "Expand");

            item.Alpha  = 1f;
            item.Center = item.EndPoint;
            this.flag++;
        }
コード例 #6
0
        CABasicAnimation animateFromTo(UIView v, float dur, string path, float fromx, float fromy, float tox, float toy)
        {
            var l_animation = CABasicAnimation.FromKeyPath(path);             //position

            l_animation.TimingFunction      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseIn);
            l_animation.From                = NSValue.FromPointF(new PointF(fromx, fromy));
            l_animation.To                  = NSValue.FromPointF(new PointF(tox, toy));
            l_animation.Duration            = 0.6;
            l_animation.RemovedOnCompletion = false;

            //l_animation.AnimationStopped += faction;
            v.Layer.AddAnimation(l_animation, "position");
            v.Layer.Position = new PointF(tox, toy);

            return(l_animation);
        }
コード例 #7
0
        public void Animation()
        {
            Hidden = false;

            var rotate = CABasicAnimation.FromKeyPath("transform.rotation.z");

            rotate.From                = (NSNumber)0.0f;
            rotate.To                  = new NSNumber(fPI * 2.0f);
            rotate.Duration            = 0.4f;
            rotate.TimingFunction      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.Linear);
            rotate.RepeatCount         = float.MaxValue;
            rotate.FillMode            = CAFillMode.Forwards;
            rotate.RemovedOnCompletion = false;

            AddAnimation(rotate, rotate.KeyPath);
        }
コード例 #8
0
        private static CAMediaTimingFunction GetCubicTimingFunction(EasingMode easingMode)
        {
            switch (easingMode)
            {
            case EasingMode.EaseIn:
                return(CAMediaTimingFunction.FromControlPoints(0.55f, 0.055f, 0.675f, 0.19f));

            case EasingMode.EaseOut:
                return(CAMediaTimingFunction.FromControlPoints(0.215f, 0.61f, 0.355f, 1.0f));

            case EasingMode.EaseInOut:
                return(CAMediaTimingFunction.FromControlPoints(0.645f, 0.045f, 0.355f, 1.0f));
            }

            return(GetDefaultTimingFunction());
        }
コード例 #9
0
        public void Animation()
        {
            Hidden = false;
            var rotate = CABasicAnimation.FromKeyPath("transform.rotation.z");

            rotate.From                = NSNumber.FromDouble(0.0);
            rotate.To                  = NSNumber.FromDouble(Helpers.fPI * 2);
            rotate.Duration            = 1.0;
            rotate.TimingFunction      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.Linear);
            rotate.RepeatCount         = float.MaxValue;
            rotate.FillMode            = CAFillMode.Forwards;
            rotate.RemovedOnCompletion = false;
            AddAnimation(rotate, rotate.KeyPath);

            StrokeEndAnimation();
        }
コード例 #10
0
 // if ivar _shouldAnimate) is YES then return an animation
 // otherwise return NSNull (no animation)
 public override NSObject ActionForLayer(CALayer layer, string eventKey)
 {
     if (shouldAnimate)
     {
         var anim = CABasicAnimation.FromKeyPath(eventKey);
         anim.BeginTime      = CAAnimation.CurrentMediaTime();
         anim.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);
         anim.From           = layer.PresentationLayer.ValueForKey(new NSString(eventKey));
         anim.Duration       = animDuration;
         return(anim);
     }
     else
     {
         return(NSNull.Null);
     }
 }
コード例 #11
0
        private static CAMediaTimingFunction GetSineTimingFunction(EasingMode easingMode)
        {
            switch (easingMode)
            {
            case EasingMode.EaseIn:
                return(CAMediaTimingFunction.FromControlPoints(0.47f, 0.0f, 0.745f, 0.715f));

            case EasingMode.EaseOut:
                return(CAMediaTimingFunction.FromControlPoints(0.39f, 0.575f, 0.565f, 1.0f));

            case EasingMode.EaseInOut:
                return(CAMediaTimingFunction.FromControlPoints(0.445f, 0.05f, 0.55f, 0.95f));
            }

            return(GetDefaultTimingFunction());
        }
コード例 #12
0
        private static CAMediaTimingFunction GetBackTimingFunction(EasingMode easingMode)
        {
            switch (easingMode)
            {
            case EasingMode.EaseIn:
                return(CAMediaTimingFunction.FromControlPoints(0.6f, -0.28f, 0.735f, 0.045f));

            case EasingMode.EaseOut:
                return(CAMediaTimingFunction.FromControlPoints(0.175f, 0.885f, 0.320f, 1.275f));

            case EasingMode.EaseInOut:
                return(CAMediaTimingFunction.FromControlPoints(0.68f, -0.55f, 0.265f, 1.55f));
            }

            return(GetDefaultTimingFunction());
        }
コード例 #13
0
        private static CAMediaTimingFunction GetQuarticTimingFunction(EasingMode easingMode)
        {
            switch (easingMode)
            {
            case EasingMode.EaseIn:
                return(CAMediaTimingFunction.FromControlPoints(0.895f, 0.03f, 0.685f, 0.22f));

            case EasingMode.EaseOut:
                return(CAMediaTimingFunction.FromControlPoints(0.165f, 0.84f, 0.44f, 1.0f));

            case EasingMode.EaseInOut:
                return(CAMediaTimingFunction.FromControlPoints(0.77f, 0.0f, 0.175f, 1.0f));
            }

            return(GetDefaultTimingFunction());
        }
コード例 #14
0
        private static CAMediaTimingFunction GetQuinticTimingFunction(EasingMode easingMode)
        {
            switch (easingMode)
            {
            case EasingMode.EaseIn:
                return(CAMediaTimingFunction.FromControlPoints(0.755f, 0.05f, 0.855f, 0.06f));

            case EasingMode.EaseOut:
                return(CAMediaTimingFunction.FromControlPoints(0.23f, 1.0f, 0.320f, 1.0f));

            case EasingMode.EaseInOut:
                return(CAMediaTimingFunction.FromControlPoints(0.86f, 0.0f, 0.07f, 1.0f));
            }

            return(GetDefaultTimingFunction());
        }
コード例 #15
0
        public static void Rotate(this UIView view, float duration, float rotations = 1.0f, bool repeat = false, bool bounce = false)
        {
            var animation = CABasicAnimation.FromKeyPath("transform.rotation.z");

            animation.To          = NSNumber.FromFloat((float)Math.PI * 2.0f * rotations * duration);
            animation.Duration    = duration;
            animation.Cumulative  = true;
            animation.RepeatCount = rotations;

            if (bounce)
            {
                animation.TimingFunction = CAMediaTimingFunction.FromControlPoints(0.5f, 1.8f, 0.5f, 0.8f);
            }

            view.Layer.AddAnimation(animation, "rotationAnimation");
        }
コード例 #16
0
        private static CAMediaTimingFunction GetQuadraticTimingFunction(EasingMode easingMode)
        {
            switch (easingMode)
            {
            case EasingMode.EaseIn:
                return(CAMediaTimingFunction.FromControlPoints(0.55f, 0.085f, 0.68f, 0.53f));

            case EasingMode.EaseOut:
                return(CAMediaTimingFunction.FromControlPoints(0.25f, 0.46f, 0.45f, 0.94f));

            case EasingMode.EaseInOut:
                return(CAMediaTimingFunction.FromControlPoints(0.455f, 0.03f, 0.515f, 0.955f));
            }

            return(GetDefaultTimingFunction());
        }
コード例 #17
0
        public override void PresentStep(int index, PresentationViewController presentationViewController)
        {
            SCNTransaction.Begin();

            switch (index)
            {
            case 0:
                // Set the slide's title and subtitle and add some text
                TextManager.SetTitle("More Animations");
                TextManager.SetSubtitle("Watch SceneKit 2013 Presentation");

                TextManager.AddBulletAtLevel("Skinning", 0);
                TextManager.AddBulletAtLevel("Morphing", 0);

                // Animate the character
                CharacterNode.AddAnimation(IdleAnimationGroup, new NSString("idleAnimation"));

                // The character is hidden. Wait a little longer before showing it
                // otherwise it may slow down the transition from the previous slide
                var delayInSeconds = 1.5;
                var popTime        = new DispatchTime(DispatchTime.Now, (long)(delayInSeconds * Utils.NSEC_PER_SEC));
                DispatchQueue.MainQueue.DispatchAfter(popTime, () => {
                    SCNTransaction.Begin();
                    SCNTransaction.AnimationDuration = 0;
                    CharacterNode.Hidden             = false;
                    CharacterNode.Opacity            = 0;
                    SCNTransaction.Commit();

                    SCNTransaction.Begin();
                    SCNTransaction.AnimationDuration       = 1.5;
                    SCNTransaction.AnimationTimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseIn);
                    CharacterNode.Opacity = 1;
                    SCNTransaction.Commit();
                });
                break;

            case 1:
                CharacterNode.AddAnimation(AnimationGroup1, new NSString("animation"));
                break;

            case 2:
                SCNTransaction.AnimationDuration = 1.5f;
                //TODO SetShowsBones (true);
                break;
            }
            SCNTransaction.Commit();
        }
コード例 #18
0
        private void EndInkAtPoint(CGPoint point, bool animated)
        {
            if (StartAnimationActive)
            {
                EndAnimationDelay = MDCInkLayerStartFadeHalfBeginTimeFadeOutDuration;
            }

            nfloat opacity           = 1.0f;
            bool   viewContainsPoint = Bounds.Contains(point);

            if (!viewContainsPoint)
            {
                opacity = 0;
            }

            if (!animated)
            {
                Opacity = 0;
                AnimationDelegate?.InkLayerAnimationDidEnd(this);

                RemoveFromSuperLayer();
            }
            else
            {
                CATransaction.Begin();
                CABasicAnimation fadeOutAnim = new CABasicAnimation();
                fadeOutAnim.KeyPath   = MDCInkLayerOpacityString;
                fadeOutAnim.From      = new NSNumber(opacity);
                fadeOutAnim.To        = new NSNumber(0);
                fadeOutAnim.Duration  = MDCInkLayerEndFadeOutDuration;
                fadeOutAnim.BeginTime = ConvertTimeFromLayer(CACurrentMediaTime() + EndAnimationDelay, null);

                fadeOutAnim.TimingFunction      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.Linear);
                fadeOutAnim.FillMode            = CAFillMode.Forwards;
                fadeOutAnim.RemovedOnCompletion = false;
                //CATransaction.CompletionBlock = new Action(() => {
                //    if ([self.animationDelegate respondsToSelector: @selector(inkLayerAnimationDidEnd:)])
                //    {
                //        AnimationDelegate inkLayerAnimationDidEnd: self];
                //    }
                //  RemoveFromSuperlayer();
                //});

                AddAnimation(fadeOutAnim, null);
                CATransaction.Commit();
            }
        }
コード例 #19
0
ファイル: RunningDots.cs プロジェクト: PaulBol/mac-playground
        void SetupLayers()
        {
            if (view == null || view.Bounds.Size.IsEmpty)
            {
                return;
            }

            RemoveLayers();

            var width    = view.Bounds.Width;
            var distance = width / 5.0f / (float)shapeCount;

            // replicator layer
            replicatorLayer                   = new CAReplicatorLayer();
            replicatorLayer.Frame             = new CGRect(0, 0, view.Bounds.Width * 2, view.Bounds.Height);
            replicatorLayer.PreservesDepth    = false;
            replicatorLayer.InstanceCount     = (nint)shapeCount;
            replicatorLayer.InstanceTransform = CATransform3D.MakeTranslation(distance, 0, 0);
            replicatorLayer.InstanceDelay     = -0.06f;
            if (view.Layer == null)
            {
                view.Layer = new CALayer();
            }

            view.Layer.AddSublayer(replicatorLayer);
            view.WantsLayer = true;

            // instance layer
            var dotSize       = view.Bounds.Height;
            var instanceLayer = new CALayer();

            instanceLayer.Frame           = new CGRect(-(shapeCount * distance / 2.0f) - dotSize, 0, dotSize, dotSize);
            instanceLayer.BackgroundColor = shapeColor.CGColor;
            instanceLayer.Bounds          = new CGRect(0, 0, dotSize, dotSize);
            instanceLayer.CornerRadius    = dotSize / 2.0f;
            replicatorLayer.AddSublayer(instanceLayer);

            var runAnimation = CABasicAnimation.FromKeyPath("transform.translation.x");

            runAnimation.From           = NSNumber.FromDouble(-2f * width);
            runAnimation.To             = NSNumber.FromDouble(3f * width);
            runAnimation.Duration       = duration;
            runAnimation.RepeatCount    = float.PositiveInfinity;
            runAnimation.TimingFunction = CAMediaTimingFunction.FromControlPoints(0, 1.0f - easeFactor, 1, easeFactor);

            instanceLayer.AddAnimation(runAnimation, "RunAnimation");
        }
コード例 #20
0
        /* Animation engine to create a fill animation.
         * @param bounces The number of bounces for the animation.
         * @param amplitue How far does the animation bounce.
         * @param reserve Flag to track if the animation should fill or empty the layer.
         * @return Returns the CAKeyframeAnimation object.
         */
        public CAKeyFrameAnimation FillAnimationWithBounces(int bounces, float amplitude, bool reverse)
        {
            List <NSObject> values   = new List <NSObject>();
            List <NSNumber> keyTimes = new List <NSNumber>();

            if (reverse)
            {
                values.Add(NSValue.FromCATransform3D(CATransform3D.MakeScale(1, 1, 1)));
            }
            else
            {
                values.Add(NSValue.FromCATransform3D(CATransform3D.MakeScale(0, 0, 0)));
            }


            keyTimes.Add(new NSNumber(0));

            for (int i = 1; i <= bounces; i++)
            {
                var scale = (i % 2) > 0 ? (1 + amplitude / i) : (1 - amplitude / i);
                var time  = (float)(i * (1.0 / (bounces + 1)));
                values.Add(NSValue.FromCATransform3D(CATransform3D.MakeScale(scale, scale, scale)));
                keyTimes.Add(new NSNumber(time));
            }

            if (reverse)
            {
                values.Add(NSValue.FromCATransform3D(CATransform3D.MakeScale(new nfloat(0.0001), new nfloat(0.0001), new nfloat(0.0001))));
            }
            else
            {
                values.Add(NSValue.FromCATransform3D(CATransform3D.MakeScale(1, 1, 1)));
            }

            keyTimes.Add(new NSNumber(1));

            CAKeyFrameAnimation animation = CAKeyFrameAnimation.FromKeyPath("transform");

            animation.Values              = values.ToArray();
            animation.KeyTimes            = keyTimes.ToArray();
            animation.RemovedOnCompletion = false;
            animation.FillMode            = CAFillMode.Forwards;
            animation.Duration            = AnimationDuration;
            animation.TimingFunction      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);

            return(animation);
        }
コード例 #21
0
        partial void repositionImages(NSObject sender)
        {
            foreach (CALayer layer in View.Layer.Sublayers)
            {
                if (layer == textContainer || layer == repositionButton.Layer || layer == durationTextField.Layer)
                {
                    continue;
                }

                CGRect imageBounds = layer.Bounds;

                nfloat X, Y = 0;
                if (windowIsResizing)
                {
                    X = layer.Position.X + ((layer.Position.X - imageBounds.Size.Width / 2) / (lastWindowSize.Width - imageBounds.Size.Width) * (Window.Frame.Width - lastWindowSize.Width));
                    Y = layer.Position.Y + ((layer.Position.Y - imageBounds.Size.Height / 2) / (lastWindowSize.Height - imageBounds.Size.Height) * (Window.Frame.Height - lastWindowSize.Height));
                }
                else
                {
                    X = (nfloat)random.Next((int)Math.Floor(imageBounds.Width / 2), (int)Math.Floor(layer.SuperLayer.Bounds.GetMaxX() - imageBounds.Width / 2));
                    Y = (nfloat)random.Next((int)Math.Floor(imageBounds.Height / 2), (int)Math.Floor(layer.SuperLayer.Bounds.GetMaxY() - imageBounds.Height / 2));
                }
                CGPoint newPoint = new CGPoint(X, Y);

                CAMediaTimingFunction tr      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.Linear);
                CAMediaTimingFunction tf      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);
                CABasicAnimation      posAnim = CABasicAnimation.FromKeyPath("position");
                posAnim.From           = NSValue.FromCGPoint(layer.Position);
                posAnim.Duration       = windowIsResizing ? 0 : durationTextField.FloatValue;
                posAnim.TimingFunction = windowIsResizing ? tr : tf;

                CABasicAnimation zPosAnim = CABasicAnimation.FromKeyPath("zPosition");
                zPosAnim.From           = NSNumber.FromDouble(layer.ZPosition);
                zPosAnim.Duration       = durationTextField.FloatValue;
                zPosAnim.TimingFunction = tf;

                layer.Actions = NSDictionary.FromObjectsAndKeys(new NSObject[] { posAnim, zPosAnim }, new NSObject[] { new NSString("position"), new NSString("zPosition") });

                CATransaction.Begin();
                layer.Position = newPoint;
                if (!windowIsResizing)
                {
                    layer.ZPosition = random.Next(-100, 99);
                }
                CATransaction.Commit();
            }
        }
コード例 #22
0
        //Private methods
        private void Expand()
        {
            if (Flag == MenusArray.Count)
            {
                IsAnimating = flase;
                Timer.Invalidate();
                Timer = null;
                return;
            }

            var          Tag             = 1000 + Flag;
            ApexMenuItem item            = this.ViewWithTag(Tag);
            var          rotateAnimation = (CAKeyFrameAnimation)CAKeyFrameAnimation.FromKeyPath("transform.rotation.z");

            rotateAnimation.Values   = new NSNumber[] { this.ExpandRotation, 0.0f };
            rotateAnimation.Duration = AnimationDuration;
            rotateAnimation.KeyTimes = new NSNumber[] { 0.3f, 0.4f };

            var positionAnimation = (CAKeyFrameAnimation)CAKeyFrameAnimation.FromKeyPath("position");

            positionAnimation.Duration = AnimationDuration;

            var path = new CGPath();

            path.MoveToPoint(item.StartPoint.X, item.StartPoint.Y);
            path.AddLineToPoint(item.FarPoint.X, item.FarPoint.Y);
            path.AddLineToPoint(item.NearPoint.X, item.NearPoint.Y);
            path.AddLineToPoint(item.EndPoint.X, item.EndPoint.Y);
            positionAnimation.Path = path;

            var animationGroup = new CAAnimationGroup();

            animationGroup.Animations     = new CAAnimation[] { positionAnimation, rotateAnimation };
            animationGroup.Duration       = AnimationDuration;
            animationGroup.FillMode       = CAFillMode.Forwards;
            animationGroup.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseIn);
            //animationgroup.delegate = self;

            if (Flag == MenusArray.Count - 1)
            {
                animationGroup.SetValueForKey("firstAnimation", "id");
            }
            item.Layer.AddAnimation(animationGroup, "Expand");
            item.Center = item.EndPoint;
            Flag++;
        }
コード例 #23
0
        private UnoCoreAnimation CreateCoreAnimation(
            UIView view,
            string property,
            Func <float, NSValue> nsValueConversion,
            Action prepareAnimation = null,
            Action endAnimation     = null)
        {
            var timingFunction = _easingFunction == null?
                                 CAMediaTimingFunction.FromName(CAMediaTimingFunction.Linear) :
                                     _easingFunction.GetTimingFunction();

            var isDiscrete = _easingFunction is DiscreteDoubleKeyFrame.DiscreteDoubleKeyFrameEasingFunction;

            return(prepareAnimation == null || endAnimation == null
                                ? new UnoCoreAnimation(view.Layer, property, _from, _to, StartDelay, _duration, timingFunction, nsValueConversion, FinalizeAnimation, isDiscrete)
                                : new UnoCoreAnimation(view.Layer, property, _from, _to, StartDelay, _duration, timingFunction, nsValueConversion, FinalizeAnimation, isDiscrete, prepareAnimation, endAnimation));
        }
コード例 #24
0
        void DidTapMyLocation(object sender, EventArgs e)
        {
            var location = mapView.MyLocation;

            if (location == null || !location.Coordinate.IsValid())
            {
                return;
            }

            // Access the GMSMapLayer directly to modify the following properties with a
            // specified timing function and duration.

            var curve = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);
            CABasicAnimation animation;

            animation                = CABasicAnimation.FromKeyPath(Constants.LayerCameraLatitudeKey);
            animation.Duration       = 2.0;
            animation.TimingFunction = curve;
            animation.To             = NSNumber.FromDouble(location.Coordinate.Latitude);
            mapView.Layer.AddAnimation(animation, Constants.LayerCameraLatitudeKey);

            animation                = CABasicAnimation.FromKeyPath(Constants.LayerCameraLongitudeKey);
            animation.Duration       = 2.0;
            animation.TimingFunction = curve;
            animation.To             = NSNumber.FromDouble(location.Coordinate.Longitude);
            mapView.Layer.AddAnimation(animation, Constants.LayerCameraLongitudeKey);

            animation                = CABasicAnimation.FromKeyPath(Constants.LayerCameraBearingKey);
            animation.Duration       = 2.0;
            animation.TimingFunction = curve;
            animation.To             = NSNumber.FromDouble(0.0);
            mapView.Layer.AddAnimation(animation, Constants.LayerCameraBearingKey);

            // Fly out to the minimum zoom and then zoom back to the current zoom!
            var zoom      = mapView.Camera.Zoom;
            var keyValues = new [] {
                NSNumber.FromFloat(zoom),
                NSNumber.FromFloat(-100),
                NSNumber.FromFloat(zoom)
            };
            var keyFrameAnimation = (CAKeyFrameAnimation)CAKeyFrameAnimation.FromKeyPath(Constants.LayerCameraZoomLevelKey);

            keyFrameAnimation.Duration = 2.0;
            keyFrameAnimation.Values   = keyValues;
            mapView.Layer.AddAnimation(keyFrameAnimation, Constants.LayerCameraZoomLevelKey);
        }
コード例 #25
0
        public void SlideButtonIn()
        {
            CABasicAnimation slide = CABasicAnimation.FromKeyPath("position");

            slide.From     = NSValue.FromCGPoint(new CGPoint(-100.0f, btnShowTime.Layer.Position.Y));
            slide.To       = NSValue.FromCGPoint(btnShowTime.Layer.Position);
            slide.Duration = 1.0f;

            //Set the timing function
            CAMediaTimingFunction tf = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);

            slide.TimingFunction    = tf;
            slide.AnimationStopped += FadeRepeat;

            // Kick off the animation by adding it to the layer
            btnShowTime.Layer.AddAnimation(slide, "slideAnimation");
        }
コード例 #26
0
        void ShowMenuCancelLayerAnimation(double offset)
        {
            var group = new CAAnimationGroup();

            var animationOffset = new CABasicAnimation();

            animationOffset.KeyPath = new NSString("position");
            //Calculate position of shadow layer's X when animation was cancelled
            var offsetX   = UIScreen.MainScreen.Bounds.Width * _targetViewControllerOffset;
            var originalX = _shadowLayer.Frame.GetMidX() - ((offset / TransitionDurationTime) * offsetX);

            //Start animatiom from cancelled X position
            animationOffset.From = NSValue.FromCGPoint(new CGPoint(originalX, _shadowLayer.Frame.GetMidY()));
            //to position when animation began
            animationOffset.To = NSValue.FromCGPoint(new CGPoint(_shadowLayer.Frame.GetMidX(), _shadowLayer.Frame.GetMidY()));

            var scaleDiff = _targetViewControllerInitialScale - _targetViewControllerEndScale;
            //scaling of view when animation was cancelled
            var cancelledScalePosition = _targetViewControllerInitialScale - (scaleDiff - (offset / TransitionDurationTime) * scaleDiff);

            //Animate x/y positions from size when was cancelled
            //To size before interaction begin
            var animationScaleX = new CABasicAnimation();

            animationScaleX.KeyPath = new NSString("transform.scale.x");
            animationScaleX.From    = NSValue.FromObject(cancelledScalePosition);
            animationScaleX.To      = NSValue.FromObject(_targetViewControllerEndScale);

            var animationScaleY = new CABasicAnimation();

            animationScaleY.KeyPath = new NSString("transform.scale.y");
            animationScaleY.From    = NSValue.FromObject(cancelledScalePosition);
            animationScaleY.To      = NSValue.FromObject(_targetViewControllerEndScale);

            group.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.Linear);

            //It's pretty much random
            //with small animation time, it's looks good
            //With long animation time it's not really fit, but still not so bad
            group.Duration            = offset / 6;
            group.FillMode            = CAFillMode.Forwards;
            group.RemovedOnCompletion = false;
            group.Animations          = new[] { animationScaleX, animationScaleY, animationOffset };

            _shadowLayer.AddAnimation(group, "ShowScaleLayerAnimation");
        }
コード例 #27
0
ファイル: ViewController.cs プロジェクト: MIliev11/Samples
        public override void ViewDidAppear(bool animated)
        {
            base.ViewDidAppear(animated);

            var pt = layer.Position;

            layer.Position = new CGPoint(150, 350);

            var basicAnimation = CABasicAnimation.FromKeyPath("position");

            basicAnimation.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);
            basicAnimation.From           = NSValue.FromCGPoint(pt);
            basicAnimation.To             = NSValue.FromCGPoint(new CGPoint(150, 350));
            basicAnimation.Duration       = 2;

            layer.AddAnimation(basicAnimation, "position");
        }
コード例 #28
0
        private void PerformCloseAnimation(bool flash = false)
        {
            if (this.isBorderOpen && !this.isAnimating)
            {
                this.isBorderOpen = false;
                this.isAnimating  = true;

                this.borderNode.RemoveAction("pulse");
                this.borderNode.Opacity = 1f;

                // Close animation
                SCNTransaction.Begin();
                SCNTransaction.AnimationDuration       = GameBoard.AnimationDuration / 2f;
                SCNTransaction.AnimationTimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseOut);

                this.borderNode.Opacity = 0.99f;
                SCNTransaction.SetCompletionBlock(() =>
                {
                    SCNTransaction.Begin();
                    SCNTransaction.AnimationDuration       = GameBoard.AnimationDuration / 2f;
                    SCNTransaction.AnimationTimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseOut);

                    foreach (var segment in this.borderSegments)
                    {
                        segment.Close();
                    }

                    SCNTransaction.SetCompletionBlock(() =>
                    {
                        this.isAnimating = false;
                    });

                    SCNTransaction.Commit();
                });

                SCNTransaction.Commit();

                if (flash)
                {
                    var waitAction    = SCNAction.Wait(GameBoard.AnimationDuration * 0.75f);
                    var fadeInAction  = SCNAction.FadeOpacityTo(0.6f, GameBoard.AnimationDuration * 0.125f);
                    var fadeOutAction = SCNAction.FadeOpacityTo(0f, GameBoard.AnimationDuration * 0.125f);
                    this.FillPlane.RunAction(SCNAction.Sequence(new SCNAction[] { waitAction, fadeOutAction, fadeInAction }));
                }
            }
        }
コード例 #29
0
        protected void PerformEnemyDieWithExplosion(SCNNode enemy, SCNVector3 direction)
        {
            var explositionScene = SCNScene.FromFile("art.scnassets/enemy/enemy_explosion.scn");

            if (explositionScene != null)
            {
                SCNTransaction.Begin();
                SCNTransaction.AnimationDuration       = 0.4f;
                SCNTransaction.AnimationTimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseOut);

                SCNTransaction.SetCompletionBlock(() =>
                {
                    explositionScene.RootNode.EnumerateHierarchy((SCNNode node, out bool stop) =>
                    {
                        stop = false;
                        if (node.ParticleSystems != null)
                        {
                            foreach (var particle in node.ParticleSystems)
                            {
                                enemy.AddParticleSystem(particle);
                            }
                        }
                    });

                    // Hide
                    if (enemy.ChildNodes.Length > 0)
                    {
                        enemy.ChildNodes[0].Opacity = 0f;
                    }
                });

                direction.Y = 0;
                enemy.RemoveAllAnimations();
                enemy.EulerAngles = new SCNVector3(enemy.EulerAngles.X, enemy.EulerAngles.X + (float)Math.PI * 4.0f, enemy.EulerAngles.Z);

                enemy.WorldPosition += SCNVector3.Normalize(direction) * 1.5f;
                this.PositionAgentFromNode();

                SCNTransaction.Commit();
            }
            else
            {
                Console.WriteLine("Missing enemy_explosion.scn");
            }
        }
コード例 #30
0
        void showInactiveBorder()
        {
            CATransaction.Begin();
            CATransaction.CompletionBlock = () => {
                this.activeBorder.Layer.Opacity = 0;
            };
            var anim2         = CABasicAnimation.FromKeyPath("transform");
            var fromTransform = CATransform3D.MakeScale(1, 1, 1);
            var toTransform   = CATransform3D.MakeScale(0.01f, 1, 1);

            anim2.From                = NSValue.FromCATransform3D(fromTransform);
            anim2.To                  = NSValue.FromCATransform3D(toTransform);
            anim2.TimingFunction      = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseOut);
            anim2.FillMode            = CAFillMode.Forwards;
            anim2.RemovedOnCompletion = false;
            this.activeBorder.Layer.AddAnimation(anim2, "_activeBorder");
            CATransaction.Commit();
        }