IOS 圆球沿着椭圆轨迹做动画_IOS

前言:最近公司项目有个需求,需要实现让一个view沿着椭圆轨迹做动画,效果实现后,就自己封装做了一个小demo,使用更方便。先看效果:

椭圆.gif

效果图中的白色椭圆轨迹线其实是用贝塞尔曲线画出来的,为了清晰的看出来运动的轨迹。其实项目中是不显示轨迹线的,也就是小球是悬空运动的。若不需要删除掉即可。

实现步骤:

1.首先设定关键帧动画CAKeyframeAnimation的一些属性,比如运动时间和重复次数和calculationMode模式,我们选择kCAAnimationPaced 使得动画均匀进行。

  CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
  pathAnimation.calculationMode = kCAAnimationPaced;
  pathAnimation.fillMode = kCAFillModeForwards;
  pathAnimation.removedOnCompletion = NO;
  pathAnimation.duration = 5.0;
  pathAnimation.repeatCount = 2;

2.设定好关键帧动画的path,即一个椭圆形的路径。需要使用CGPathAddArc,CGPathAddArc经常用于画正圆,比如下面就是一个正圆,各个参数的意义:

 //160,200为圆心,100为半径 (startAngle,endAngle)为起始角度和结束角度,1为顺时针,0 为逆时针
 CGPathAddArc(curvedPath, NULL, 160,200, 100, startAngle, endAngle, 0);

需要注意的是由于iOS中的坐标体系是和Quartz坐标体系中Y轴相反的,所以iOS UIView在做Quartz绘图时,Y轴已经做了Scale为-1的转换,因此造成CGPathAddArc函数最后一个是否是顺时针的参数结果正好是相反的,也就是说如果设置最后的参数为YES,根据参数定义应该是顺时针的,但实际绘图结果会是逆时针的!

我们需要画的是椭圆啊,别急,接下来稍作更改即可。正圆第二个参数默认为NULL,我们要改成椭圆,

//短半轴和长半轴的比例
  float radiuscale = 0.5;
  //椭圆顶点的坐标值
  CGFloat origin_x = self.frame.size.width/2;
  CGFloat origin_y = self.frame.size.height/2;
  //长半轴的长
  CGFloat radiusX = 100;

  CGMutablePathRef curvedPath = CGPathCreateMutable();
  CGAffineTransform t2 = CGAffineTransformConcat(CGAffineTransformConcat(
                                      CGAffineTransformMakeTranslation(-origin_x, -origin_y),
                                      CGAffineTransformMakeScale(1, radiuscale)),
                          CGAffineTransformMakeTranslation(origin_x, origin_y));
  CGPathAddArc(curvedPath, &t2, origin_x, origin_y, radiusX,startAngle,endAngle, 1);
  pathAnimation.path = curvedPath;
  CGPathRelease(curvedPath);

好了,至此,动画的轨迹和属性都写好了。添加到view上就ok了。

3.贝塞尔画椭圆

如果是整个椭圆的话,只需要设定好理想中的椭圆的外切圆即可。

  //整个椭圆
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSaveGState(context);
  UIBezierPath *arc = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(origin_x-100, origin_y-50, 200, 100)];
  [[UIColor whiteColor] setStroke];
  [arc stroke];
  CGContextRestoreGState(context);

总结: 希望本文能对你有帮助。如果你有更好的想法,欢迎和我交流!
demo地址:https://github.com/xiaochenyi/CircleAnimateDemo

文/秋雨W(简书作者)
原文链接:http://www.jianshu.com/p/d8cc02e7efa7
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ios
椭圆轨迹做动画
css3 椭圆轨迹动画、ios 动画按轨迹移动、ios轨迹动画、ios 运动轨迹 动画、ios 流星轨迹动画,以便于您获取更多的相关知识。

时间: 2024-11-27 04:42:53

IOS 圆球沿着椭圆轨迹做动画_IOS的相关文章

iOS动画——啥?AutoLayout还能做动画?

  是的,很明确的告诉各位看官,AutoLayout的确能做动画.AutoLayout是用来做各种约束,是用来适配不同屏幕的,那么当我们改变其中某些约束并讲这个改变的过程以缓慢的速度显示,那么是不是就实现了动画- 先来看一个酷炫的动画,这个动画由书籍iOS Animations by tutorials提供: 由书籍iOS Animations by tutorials提供 接下来我们将围绕这个动画的实现过程来进行叙述. 首先给我们最上方的这个类似Navigation的menu做动画,很明显我们

代码-求指教 怎么做螺旋轨迹的动画?

问题描述 求指教 怎么做螺旋轨迹的动画? 要做一个动画,类似于转盘游戏的里面小球的运动轨迹, 从外圆切进内圆,并在内圆的随机一个位置停留. 求教怎么实现? 有代码最好,万分感谢,急求,坐等~~~~

IOS轻松几步实现自定义转场动画_IOS

一.系统提供的转场动画 目前,系统给我们提供了push/pops和present/dismiss两种控制器之间跳转方.当然,通过设置UIModalTransitionStyle属性,可以实现下面4种modal效果,相信大家都比较熟悉了,这里就不再展示效果图. UIModalTransitionStyleCoverVertical // 从下往上, UIModalTransitionStyleFlipHorizontal // 水平翻转 UIModalTransitionStyleCrossDis

iOS开发中常用的各种动画、页面切面效果_IOS

今天主要用到的动画类是CALayer下的CATransition至于各种动画类中如何继承的在这也不做赘述,网上的资料是一抓一大把.好废话少说切入今天的正题. 一.封装动画方法 1.用CATransition实现动画的封装方法如下,每句代码是何意思,请看注释之. #pragma CATransition动画实现 - (void) transitionWithType:(NSString *) type WithSubtype:(NSString *) subtype ForView : (UIVi

IOS 实现3D 浮动效果动画_IOS

涉及到的技术点 CATransform3DRotate 转换坐标系 整体视图的层级结构 tvOSCardView cardImageView cardParallaxView 转换坐标系的代码 CGFloat xFactor = MIN(1, MAX(-1, (touchPoint.x - (self.bounds.size.width / 2)) / (self.bounds.size.width / 2))); CGFloat yFactor = MIN(1, MAX(-1, (touchP

IOS UI学习教程之使用UIImageView控件制作动画_IOS

本文实例为大家分享了IOS使用UIImageView控件制作动画的方法,供大家参考,具体内容如下 先添加40张tomcat的图片到资源列表中:名称为cat_eat0000.jpg到cat_eat0039.jpg. 1.定义所需控件 // 定义按钮,图片控件.可变数组对象 UIButton *actionbuttom; UIImageView *imageMove; NSMutableArray *imgsarray; 2.初始化各控件 // image动画 // 初始化UIImageView,大

手把手教你用jQuery做动画插件

CSS样式属性动画 我们现在有很多的动画方法,滑动.淡出淡入.还有其他的显示隐藏动画,但是我们对于精确的控制动画以及动画到底怎么发生的还不太了解.我们这就来介绍一个非常强大的jQuery函数,animate,这个方法可以让你对任何的CSS属性做动画的效果.我们看看代码: $("p").animate({        padding:"20px",        fontSize:"30px"  },2000)  这段代码会动画操作所有的,将他们

用MASK做动画

用MASK做动画(三) 八.按F8键,在符号属性对话框中选择其类型为animation.点击OK按钮.在紧接着跳出来的动画窗口中再进行如下设置.Frames设为10帧.Move选项设为200(随便设置一个数字好啦).Scale to 选项中填入120.点击OK按钮表示确定. 九.看到红色小圆点没?呵呵,用鼠标选择它,并把它拖到黄色文字层的最右边. 十.最后一步啦,打开Layers面板,选择Layer1标签,双击.在跳出的对话框中把Share Across Frames前面的钩选上.使图层1进行共

Fireworks妙用投影做动画

大家先看看下图效果,文字做圆周运动的同时,本身的位置终始是正的,没有象别的圆周运动那样字发生了倾斜,而且字的颜色在发生渐变.不要误会只有FLASH中才能完成这效果,其实用Fireworks同样能完成,而且方法更简单.心痒了吧?跟我来! 1.新建一个文件,Width=300pixels,Height=300pixels,背景色为White白色. 2.在编辑区用文字工具输入文字"网络学院",字号为30pixels象素,字体颜色随意.取中该字,Commands>Document>