使用贝塞尔曲线实现关键帧动画
贝塞尔曲线,可以通过三个点,来确定一条平滑的曲线。在计算机图形学应该有讲。是图形开发中的重要工具。 实现的是一个图形做圆周运动。不过不是简单的关键帧动画那样,是计算出了很多点,当然还是用的关键帧动画,即使用CAKeyframeAnimation。有了贝塞尔曲线的支持,可以赋值给CAKeyframeAnimation 贝塞尔曲线的Path引用。 发送文章为PDF
贝塞尔曲线,可以通过三个点,来确定一条平滑的曲线。在计算机图形学应该有讲。是图形开发中的重要工具。 实现的是一个图形做圆周运动。不过不是简单的关键帧动画那样,是计算出了很多点,当然还是用的关键帧动画,即使用CAKeyframeAnimation。有了贝塞尔曲线的支持,可以赋值给CAKeyframeAnimation 贝塞尔曲线的Path引用。 发送文章为PDF
iOS有时候需要判断是否touch到某个图的区域中。这里做了个小示例,通过CGPath创建一个区域,区域是由路径做两点间线段并闭合成的区域,比如这里创建了一个简单的矩形。然后就可以用CGPath相关函数判断点是否在区域里了。 – (void)viewDidLoad { [super viewDidLoad]; CGMutablePathRef pathRef=CGPathCreateMutable(); CGPathMoveToPoint(pathRef, NULL, 4, 4); CGPathAddLineToPoint(pathRef, NULL, 4, 8); CGPathAddLineToPoint(pathRef, NULL, 10, 4); CGPathAddLineToPoint(pathRef, NULL, 4, 4); CGPathCloseSubpath(pathRef); CGPoint point=CGPointMake(5,7); CGPoint outPoint=CGPointMake(5,10); if (CGPathContainsPoint(pathRef, NULL, point, NO)) { NSLog(@"point in path!"); } [...]
参考了:http://iphonedevelopertips.com/xcode/how-to-fix-subversion-in-xcode-3.html 需要在~/.subversion/config文件中设置一下。 找到: # global-ignores 在下面添加: global-ignores = build *~.nib *.so *.pbxuser *.mode* *.perspective* 因为build目录是不需要提交的,是构建出来的文件。另外,还有后缀是mode1v3和pbxuser等文件,这是Xcode用户文件。另外一些也是临时文件或者构建出来的文件。 发送文章为PDF
Xcode的SVN功能,和Eclipse中的subclipse或者windows下的tortoiseSVN比较起来功能还差很多。 我是索性不用的,直接用命令行。我看有的朋友是用subclipse,其实也挺好,不过,为了使用SVN功能要单独开一个耗费资源的Eclipse。 但是,不论使用什么SVN工具,都会遇到Xcode固有的问题,即project.pbxproj文件的提交冲突问题。 project.pbxproj文件里面包含了构建过程所需的所有文件,如果你在项目目录下增加了新文件,比如没有通过Xcode,该文件就不在project.pbxproj文件中,就不会生成到app中。同理,如果你从SVN中更新到其他项目成员增加的文件,而没有更新project.pbxproj文件(或者该成员根本就没有提交这个文件),则也会出现相同的现象。 发送文章为PDF
翻译学习了一下Apple官方的《Getting started with Graphics and Animation》,原文见这里。 概述 iOS包括一些框架用于图形和动画: UIKit包括一个objc的库,用于用户界面和2D绘图,也可以通过UIKit做用户界面动画。 Core Graphics是基于C的API,用于绘制矢量图形、位图和PDF内容。(注意,Quartz 2D是指2D画图引擎的术语,Core Graphics是框架的名称。这两个术语是同义词。 Core Animation是基于objc的API,用于增加用户图形界面的平滑效果和动态的反馈 OpenGL ES是OpenGL的移动版本,用于在移动设备上高性能的2D和3D绘图。苹果的OpenGL ES框架包括EAGL,这是一种基于objc的API,它在Core Animation层和UIKit视图上集成了OpenGL ES的渲染功能。 可使用UIKit实现典型的用户界面图形操作,比如绘制图片,设置颜色,填充矩形。另外,图形的转换(Transaction),比如移动、缩放和反转等,平滑的从一个视图或者屏幕过渡(Transition)到另外一个,以及在一个视图或者层中的动画内容。 当需要更强大的2D绘图能力,需要使用Core Graphics框架。它是绘制矢量图、线、形状、模式、渐变、图形,甚至PDF文档的主力。更高层的框架,比如UIKit,使用Core Graphics。 Core Animation是UIKit框架用于层以及过渡的编程接口。大多数时候,开发者不需要直接使用Core Animation。除非当应用中需要细粒度的动画控制。 当开发游戏或者其他需要依赖GPU的高级图形能力时,需要用到OpenGL ES。 发送文章为PDF
在下面的示例中,用手势拖动Layer转动,当手势结束时,会播放动画继续让Layer沿着圆的轨道转动一会儿。 发送文章为PDF
在java中,向方法中传递复杂参数,一般使用对象来传递。因为这样便于扩展。不需要改变方法的声明部分。 在objc中,开始是发送多个参数。这样很麻烦。那么可以用到c里面的方式来做,通过struct传递参数。把相关的参数写在一个struct里面。 声明struct需要在头文件中: #define MIN_VELOCITY 10 #define LOOP_COUNT 100 @interface AnimationView : UIView <UIGestureRecognizerDelegate>{ CALayer *startLayer; CALayer *startLayer2; } struct PanLocationData{ CGPoint currentLocation; CGPoint currentVelocity; CGPoint panLocation; }; 发送文章为PDF
objc不像java,有静态常量。比如: public static final RADIAS=180; 目前我的做法是,使用c的预处理#define。比如,在头文件中: #define MIN_VELOCITY 10 #define LOOP_COUNT 100 @interface AnimationView : UIView <UIGestureRecognizerDelegate>{ 在代码中使用: if (data.panLocation.x<MIN_X) { data.panLocation.x=MIN_X; } 这些预定义常量,会在编译器编译的时候用define中定义的字符串替代。 日志引用在objc项目中使用常量的最佳实践 发送文章为PDF
在如何通过手势捕获CALayer基础上做了个示例,两个CALayer的联动,当拖动左侧的Layer的时候,右侧的Layer随动。因为右侧的动画没有关闭,有延迟,产生随动的效果。如果不想延迟,可参考拖动动画的问题及解决。 发送文章为PDF
在排列和拖动视图知道如何通过手势捕获视图,在如何通过手势选择到子视图知道如何捕获视图的子视图。现在有个问题,如何通过手势捕获视图内部的层(Layer),如果能,怎么捕获。 捕获到Layer是很重要的,这样才能针对具体的Layer做操作,比如拖动,比如反转等。 答案是肯定的,下面写个例子说明一下。 示例中的图,是在视图默认Layer下的子Layer。当touch(手指拖动)该Layer以外的部分,则只打印pan …,当在该Layer上拖动时,除了打印pan..以外,还会打印catch it! 日志引用多个CALayer的联动 发送文章为PDF
Patagonia Theme designed by Wp Themes Planet and proudly powered by WordPress