




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.Core Data入门本文目录 一、简介 二、模型文件 三、了解NSManagedObject对象 四、CoreData中的核心对象 五、代码实现 六、打开CoreData的SQL语句输出开关 七、创建NSManagedObject的子类回到顶部一、简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的。简单地用下图描述下它的作用:左边是关系模型,即数据库,数据库里面有张person表,person表里面有id、name、age三个字段,而且有2条记录;右边是对象模型,可以看到,有2个OC对象;利用Core Data框架,我们就可以轻松地将数据库里面的2条记录转换成2个OC对象,也可以轻松地将2个OC对象保存到数据库中,变成2条表记录,而且不用写一条SQL语句。回到顶部二、模型文件 在Core Data,需要进行映射的对象称为实体(entity),而且需要使用Core Data的模型文件来描述app中的所有实体和实体属性。这里以Person(人)和Card(身份证)2个实体为例子,先看看实体属性和实体之间的关联关系:Person实体中有:name(姓名)、age(年龄)、card(身份证)三个属性Card实体中有:no(号码)、person(人)两个属性接下来看看创建模型文件的过程:1.选择模板2.添加实体3.添加Person的2个基本属性4.添加Card的1个基本属性5.建立Card和Person的关联关系右图中的表示Card中有个Person类型的person属性,目的就是建立Card跟Person之间的一对一关联关系(建议补上这一项),在Person中加上Inverse属性后,你会发现Card中Inverse属性也自动补上了回到顶部三、了解NSManagedObject对象1.通过Core Data从数据库取出的对象,默认情况下都是NSManagedObject对象2.NSManagedObject的工作模式有点类似于NSDictionary对象,通过键-值对来存取所有的实体属性1setValue:forKey:存储属性值(属性名为key)2valueForKey:获取属性值(属性名为key)回到顶部四、CoreData中的核心对象注:黑色表示类名,红色表示类里面的一个属性开发步骤总结:1.初始化NSManagedObjectModel对象,加载模型文件,读取app中的所有实体信息2.初始化NSPersistentStoreCoordinator对象,添加持久化库(这里采取SQLite数据库)3.初始化NSManagedObjectContext对象,拿到这个上下文对象操作实体,进行CRUD操作回到顶部五、代码实现先添加CoreData.framework和导入主头文件1.搭建上下文环境1. /从应用程序包中加载模型文件2. NSManagedObjectModel*model=NSManagedObjectModelmergedModelFromBundles:nil;3. /传入模型对象,初始化NSPersistentStoreCoordinator4. NSPersistentStoreCoordinator*psc=NSPersistentStoreCoordinatorallocinitWithManagedObjectModel:modelautorelease;5. /构建SQLite数据库文件的路径6. NSString*docs=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject;7. NSURL*url=NSURLfileURLWithPath:docsstringByAppendingPathComponent:person.data;8. /添加持久化存储库,这里使用SQLite作为存储库9. NSError*error=nil;10. NSPersistentStore*store=pscaddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:urloptions:nilerror:&error;11. if(store=nil)/直接抛异常12. NSExceptionraise:添加数据库错误format:%,errorlocalizedDescription;13. 14. /初始化上下文,设置persistentStoreCoordinator属性15. NSManagedObjectContext*context=NSManagedObjectContextallocinit;16. context.persistentStoreCoordinator=psc;17. /用完之后,记得要contextrelease;2.添加数据到数据库1. /传入上下文,创建一个Person实体对象2. NSManagedObject*person=NSEntityDescriptioninsertNewObjectForEntityForName:PersoninManagedObjectContext:context;3. /设置Person的简单属性4. personsetValue:MJforKey:name;5. personsetValue:NSNumbernumberWithInt:27forKey:age;6. /传入上下文,创建一个Card实体对象7. NSManagedObject*card=NSEntityDescriptioninsertNewObjectForEntityForName:CardinManagedObjectContext:context;8. cardsetValue:4414241933432forKey:no;9. /设置Person和Card之间的关联关系10. personsetValue:cardforKey:card;11. /利用上下文对象,将数据同步到持久化存储库12. NSError*error=nil;13. BOOLsuccess=contextsave:&error;14. if(!success)15. NSExceptionraise:访问数据库错误format:%,errorlocalizedDescription;16. 17. /如果是想做更新操作:只要在更改了实体对象的属性后调用contextsave:&error,就能将更改的数据同步到数据库3.从数据库中查询数据1. /初始化一个查询请求2. NSFetchRequest*request=NSFetchRequestallocinitautorelease;3. /设置要查询的实体4. request.entity=NSEntityDescriptionentityForName:PersoninManagedObjectContext:context;5. /设置排序(按照age降序)6. NSSortDescriptor*sort=NSSortDescriptorsortDescriptorWithKey:ageascending:NO;7. request.sortDescriptors=NSArrayarrayWithObject:sort;8. /设置条件过滤(搜索name中包含字符串Itcast-1的记录,注意:设置条件过滤时,数据库SQL语句中的%要用*来代替,所以%Itcast-1%应该写成*Itcast-1*)9. NSPredicate*predicate=NSPredicatepredicateWithFormat:namelike%,*Itcast-1*;10. request.predicate=predicate;11. /执行请求12. NSError*error=nil;13. NSArray*objs=contextexecuteFetchRequest:requesterror:&error;14. if(error)15. NSExceptionraise:查询错误format:%,errorlocalizedDescription;16. 17. /遍历数据18. for(NSManagedObject*objinobjs)19. NSLog(name=%,objvalueForKey:name20. 注:Core Data不会根据实体中的关联关系立即获取相应的关联对象,比如通过Core Data取出Person实体时,并不会立即查询相关联的Card实体;当应用真的需要使用Card时,才会再次查询数据库,加载Card实体的信息。这 个就是Core Data的延迟加载机制4.删除数据库中的数据1. /传入需要删除的实体对象2. contextdeleteObject:managedObject;3. /将结果同步到数据库4. NSError*error=nil;5. contextsave:&error;6. if(error)7. NSExceptionraise:删除错误format:%,errorlocalizedDescription;8. 回到顶部六、打开CoreData的SQL语句输出开关1.打开Product,点击EditScheme.2.点击Arguments,在ArgumentsPassed On Launch中添加2项1 -com.apple.CoreData.SQLDebug2 1回到顶部七、创建NSManagedObject的子类默认情况下,利用Core Data取出的实体都是NSManagedObject类型的,能够利用键-值对来存取数据。但是一般情况下,实体在存取数据的基础上,有时还需要添加一些业务方法来完成一些其他任务,那么就必须创建NSManagedObject的子类选择模型文件选择需要创建子类的实体创建完毕后,多了2个子类文件内容展示:Person.h1. #import2. #import3. 4. classCard;5. 6. interfacePerson:NSManagedObject7. 8. property(nonatomic,retain)NSString*name;9. property(nonatomic,retain)NSNumber*age;10. property(nonatomic,retain)Card*card;11. 12. endPerson.m1. #importPerson.h2. 3. implementationPerson4. 5. dynamicname;6. dynamicage;7. dynamiccard;8. 9. endCard.h1. #import2. #import3. 4. classPerson;5. 6. interfaceCard:NSManagedObject7. 8. property(nonatomic,retain)NSString*no;9. property(nonatomic,retain)Person*person;10. 11. endCard.m1. #importCard.h2. #importPerson.h3. 4. implementationCard5. 6. dynamicno;7. dynamicperson;8. 9. end那么往数据库中添加数据的时候就应该写了:1. Person*person=NSEntityDescriptioninsertNewObjectForEntityForName:PersoninManagedObjectContext:context;2. =MJ;3. person.age=NSNumbernumberWithInt:27;4. 5. Card*card=NSEntityDescriptioninsertNewObjectForEntityForName:”CardinManagedObjectContext:context;6. card.no=”4414245465656;7. person.card=card;8. /最后调用contextsave&error;保存数据说到这里,整个Core Data框架的入门就结束了,其实Core Data还远不止这些功能,它还支持自动撤销机制,一对多关联等,这里就不一一介绍了2.CALayer1-简介本文目录 一、什么是CALayer 二、CALayer的简单使用回到顶部一、什么是CALayer* 在iOS系统中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView。* 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个层。* 在创建UIView对象时,UIView内部会自动创建一个层(即CALayer对象),通过UIView的layer属性可以访问这个层。当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的层上,绘图完毕后,系统会将层拷贝到屏幕上,于是就完成了UIView的显示。* 换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能。回到顶部二、CALayer的简单使用上面已经说过了,UIView之所以能够显示,完全是因为内部的CALayer对象。因此,通过操作这个CALayer对象,可以很方便地调整UIView的一些界面属性,比如:阴影、圆角大小、边框宽度和颜色等。1.CALayer是被定义在QuartzCore框架中的,因此要想使用CALayer,先导入QuartzCore框架1 点击项目名称,然后点击右边TARGETS下面的target2 点击Build Pases后,展开Link Binary.,添加 + 号3 在搜索框中输入Quartz,选中QuartzCore.framework,最后add添加4 添加完毕后,这个框架就会出现在项目文件夹中如果你觉得位置不好看,还可以将它拖到Frameworks文件夹下,跟其他框架放一起2.在项目代码中导入QuartzCore框架的主头文件#import 3.通过CALayer修改UIImageView的界面属性你也可以使用UIButton或者UILabel,这里就以UIImageView为例子1 先创建一个UIImageView,添加到控制器的view中1 UIImage *image = UIImage imageNamed:lufy.png;2 UIImageView *imageView = UIImageView alloc initWithImage:image autorelease;3 imageView.center = CGPointMake(100, 100);4 self.view addSubview:imageView;2 设置阴影1 imageView.layer.shadowColor = UIColor grayColor.CGColor;2 imageView.layer.shadowOffset = CGSizeMake(10, 10);3 imageView.layer.shadowOpacity = 0.5; * 第1行设置阴影的颜色为灰色,注意,这里使用的是UIColor的CGColor属性,是一种CGColorRef类型的数据* 第2行设置阴影的偏移大小,可以看出阴影往原图的右下角偏移* 第3行设置阴影的不透明度为0.5,表示半透明。如果为1,代表完全不透明。3设置圆角大小通过layer属性可以访问视图内部的CALayer对象1 imageView.layer.cornerRadius = 10;2 imageView.layer.masksToBounds = YES;* 第1行设置圆角半径为10* 第2行的maskToBounds=YES:可以看做是强制内部的所有子层支持圆角效果,少了这个设置,UIImageView是不会有圆角效果的* 注意,如果设置了maskToBounds=YES,那将不会有阴影效果4 设置边框宽度和颜色1 imageView.layer.borderWidth = 5;2 imageView.layer.borderColor = UIColor redColor.CGColor;* 第1行设置边框宽度为5* 第2行设置边框颜色为红色5 设置旋转imageView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);* 利用transform属性可以设置旋转、缩放等效果* M_PI_4表示四分之,顺时针旋转45* 后面的(0, 0, 1)表示Z轴这个向量,修改这个向量可以做一些三维旋转效果,你可以随便改个值试一下,比如(1, 1, 1)* 总体的意思是layer会绕着Z轴顺时针旋转45,也就是在x、y平面进行旋转3.CALayer2-创建新的层本文目录 一、添加一个简单的图层 二、添加一个显示图片的图层 三、为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型,而不用UIColor和UIImage? 四、UIView和CALayer的选择 五、UIView和CALayer的其他关系*上一讲已经说过,UIView内部默认有个CALayer对象(层),通过layer属性可以访问这个层。要注意的是,这个默认的层不允许重新创建,但可以往层里面添加子层*UIView可以通过addSubview:方法添加子视图,类似地,CALayer可以通过addSublayer:方法添加子层接下来演示一下如何添加子层:回到顶部一、添加一个简单的图层 1 CALayer *myLayer = CALayer layer; 2 / 设置层的宽度和高度(100x100) 3 myLayer.bounds = CGRectMake(0, 0, 100, 100); 4 / 设置层的位置 5 myLayer.position = CGPointMake(100, 100); 6 / 设置层的背景颜色:红色 7 myLayer.backgroundColor = UIColor redColor.CGColor; 8 / 设置层的圆角半径为10 9 myLayer.cornerRadius = 10;10 11 / 添加myLayer到控制器的view的layer中12 self.view.layer addSublayer:myLayer;* 第1行创建了一个自动释放的CALayer对象,你也可以使用经典的alloc和init方法来创建* 第12行将创建好的层添加到控制器的view的层中回到顶部二、添加一个显示图片的图层 1 CALayer *myLayer = CALayer layer; 2 / 设置层的宽度和高度(100x100) 3 myLayer.bounds = CGRectMake(0, 0, 100, 100); 4 / 设置层的位置 5 myLayer.position = CGPointMake(100, 100); 6 / 设置需要显示的图片 7 myLayer.contents = (id)UIImage imageNamed:lufy.png.CGImage; 8 / 设置层的圆角半径为10 9 myLayer.cornerRadius = 10;10 / 如果设置了图片,需要设置这个属性为YES才有圆角效果11 myLayer.masksToBounds = YES;12 13 / 添加myLayer到控制器的view的layer中14 self.view.layer addSublayer:myLayer;* 在第7行设置需要显示的图片,注意,这里用的是UIImage的CGImage属性,是一种CGImageRef类型的数据回到顶部三、为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型,而不用UIColor和UIImage?* 首先要知道:CALayer是定义在QuartzCore框架中的;CGImageRef、CGColorRef两种数据类型是定义在CoreGraphics框架中的;UIColor、UIImage是定义在UIKit框架中的* 其次,QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用,但是UIKit只能在iOS中使用* 因此,为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef* 不过很多情况下,可以通过UIKit对象的特定方法,得到CoreGraphics对象,比如UIImage的CGImage方法可以返回一个CGImageRef回到顶部四、UIView和CALayer的选择细心的朋友不难发现,其实前面的2个效果不仅可以通过添加层来实现,还可以通过添加UIView来实现。比如,第1个红色的层可以用一个UIView来实现,第2个显示图片的层可以用一个UIImageView来实现。既然CALayer和UIView都能实现相同的显示效果,那究竟该选择谁好呢?* 其实,对比CALayer,UIView多了一个事件处理的功能。也就是说,CALayer不能处理用户的触摸事件,而UIView可以* 所以,如果显示出来的东西需要跟用户进行交互的话,用UIView;如果不需要跟用户进行交互,用UIView或者CALayer都可以* 当然,CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级回到顶部五、UIView和CALayer的其他关系*UIView可以通过subviews属性访问所有的子视图,类似地,CALayer也可以通过sublayers属性访问所有的子层*UIView可以通过superview属性访问父视图,类似地,CALayer也可以通过superlayer属性访问父层* 下面再看一张UIView和CALayer的关系图:如果两个UIView是父子关系,那么它们内部的CALayer也是父子关系。3.CALayer3-层的属性本文目录 一、隐式动画属性 二、position和anchorPoint回到顶部一、隐式动画属性* 在前面几讲中已经提到,每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root Layer(根层)。所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动画。* 当对非Root Layer的部分属性进行相应的修改时,默认会自动产生一些动画效果,这些属性称为Animatable Properties(可动画属性)。* 列举几个常见的Animatable Properties: bounds:用于设置CALayer的宽度和高度。修改这个属性会产生缩放动画 backgroundColor:用于设置CALayer的背景色。修改这个属性会产生背景色的渐变动画 position:用于设置CALayer的位置。修改这个属性会产生平移动画比如:假设一开始CALayer的position为(100, 100),然后在某个时刻修改为(200, 200),那么整个CALayer就会在短时间内从(100, 100)这个位置平移到(200, 200)* 我们也可以从官方文档中查询所有的Animatable Properties1.点击Window - Organizer2.在搜索框输入animatable即可回到顶部二、position和anchorPoint* position和anchorPoint属性都是CGPoint类型的* position可以用来设置CALayer在父层中的位置,它是以父层的左上角为坐标原点(0, 0)* anchorPoint称为定位点,它决定着CALayer身上的哪个点会在position属性所指的位置。它的x、y取值范围都是01,默认值为(0.5, 0.5)1.创建一个CALayer,添加到控制器的view的layer中 1 CALayer *myLayer = CALayer layer; 2 / 设置层的宽度和高度(100x100) 3 myLayer.bounds = CGRectMake(0, 0, 100, 100); 4 / 设置层的位置 5 myLayer.position = CGPointMake(100, 100); 6 / 设置层的背景颜色:红色 7 myLayer.backgroundColor = UIColor redColor.CGColor; 8 9 / 添加myLayer到控制器的view的layer中10 self.view.layer addSublayer:myLayer;第5行设置了myLayer的position为(100, 100),又因为anchorPoint默认是(0.5, 0.5),所以最后的效果是:myLayer的中点会在父层的(100, 100)位置注意,蓝色线是我自己加上去的,方便大家理解,并不是默认的显示效果。两条蓝色线的宽度均为100。2.若将anchorPoint改为(0, 0),myLayer的左上角会在(100, 100)位置1 myLayer.anchorPoint = CGPointMake(0, 0);3.若将anchorPoint改为(1, 1),myLayer的右下角会在(100, 100)位置1 myLayer.anchorPoint = CGPointMake(1, 1);4.将anchorPoint改为(0, 1),myLayer的左下角会在(100, 100)位置1 myLayer.anchorPoint = CGPointMake(0, 1);我想,你应该已经明白anchorPoint的用途了吧,它决定着CALayer身上的哪个点会在position所指定的位置上。它的x、y取值范围都是01,默认值为(0.5, 0.5),因此,默认情况下,CALayer的中点会在position所指定的位置上。当anchorPoint为其他值时,以此类推。4.CALayer4-自定义层本文目录 一、自定义层的方法1 二、自定义层的方法2 三、其他自定义层,其实就是在层上绘图,一共有2种方法,下面详细介绍一下。回到顶部一、自定义层的方法1方法描述:创建一个CALayer的子类,然后覆盖drawInContext:方法,使用Quartz2D API进行绘图1.创建一个CALayer的子类2.在.m文件中覆盖drawInContext:方法,在里面绘图 1 implementation MJLayer 2 3 #pragma mark 绘制一个实心三角形 4 - (void)drawInContext:(CGContextRef)ctx 5 / 设置为蓝色 6 CGContextSetRGBFillColor(ctx, 0, 0, 1, 1); 7 8 9 / 设置起点10 CGContextMoveToPoint(ctx, 50, 0);11 / 从(50, 0)连线到(0, 100)12 CGContextAddLineToPoint(ctx, 0, 100);13 / 从(0, 100)连线到(100, 100)14 CGContextAddLineToPoint(ctx, 100, 100);15 / 合并路径,连接起点和终点16 CGContextClosePath(ctx);17 18 / 绘制路径19 CGContextFillPath(ctx);20 21 22 end3.在控制器中添加图层到屏幕上1 MJLayer *layer = MJLayer layer;2 / 设置层的宽高3 layer.bounds = CGRectMake(0, 0, 100, 100);4 / 设置层的位置5 layer.position = CGPointMake(100, 100);6 / 开始绘制图层7 layer setNeedsDisplay;8 self.view.layer addSublayer:layer;注意第7行,需要调用setNeedsDisplay这个方法,才会触发drawInContext:方法的调用,然后进行绘图回到顶部二、自定义层的方法2方法描述:设置CALayer的delegate,然后让delegate实现drawLayer:inContext:方法,当CALayer需要绘图时,会调用delegate的drawLayer:inContext:方法进行绘图。* 这里要注意的是:不能再将某个UIView设置为CALayer的delegate,因为UIView对象已经是它内部根层的delegate,再次设置为其他层的delegate就会出问题。UIView和它内部CALayer的默认关系图:1.创建新的层,设置delegate,然后添加到控制器的view的layer中 1 CALayer *layer = CALayer layer; 2 / 设置delegate 3 layer.delegate = self; 4 / 设置层的宽高 5 layer.bounds = CGRectMake(0, 0, 100, 100); 6 / 设置层的位置 7 layer.position = CGPointMake(100, 100); 8 / 开始绘制图层 9 layer setNeedsDisplay;10 self.view.layer addSublayer:layer;* 在第3行设置了CALayer的delegate,这里的self是指控制器*注意第9行,需要调用setNeedsDisplay这个方法,才会通知delegate进行绘图2.让CALayer的delegate(前面设置的是控制器)实现drawLayer:inContext:方法 1 #pragma mark 画一个矩形框 2 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 3 / 设置蓝色 4 CGContextSetRGBStrokeColor(ctx, 0, 0, 1, 1); 5 / 设置边框宽度 6 CGContextSetLineWidth(ctx, 10); 7 8 / 添加一个跟层一样大的矩形到路径中 9 CGContextAddRect(ctx, layer.bounds);10 11 / 绘制路径12 CGContextStrokePath(ctx);13 回到顶部三、其他1.总结无论采取哪种方法来自定义层,都必须调用CALayer的setNeedsDisplay方法才能正常绘图。2.UIView的详细显示过程* 当UIView需要显示时,它内部的层会准备好一个CGContextRef(图形上下文),然后调用delegate(这里就是UIView)的drawLayer:inContext:方法,并且传入已经准备好的CGContextRef对象。而UIView在drawLayer:inContext:方法中又会调用自己的drawRect:方法* 平时在drawRect:中通过UIGraphicsGetCurrentContext()获取的就是由层传入的CGContextRef对象,在drawRect:中完成的所有绘图都会填入层的CGContextRef中,然后被拷贝至屏幕Core Animation1-简介本文目录 一、Core Animation简介 二、Core Animation的使用步骤 三、CAAnimation 四、CAPropertyAnimation回到顶部一、Core Animation简介* Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。* Core Animation可以用在Mac OS X和iOS平台。*乔帮主在2007年的WWDC大会上亲自为你演示Core Animation的强大:点击查看视频* Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。* 要注意的是,Core Animation是直接作用在CALayer上的,并非UIView。回到顶部二、Core Animation的使用步骤1.使用它需要先添加QuartzCore.framework框架和引入主头文件2.初始化一个CAAnimation对象,并设置一些动画相关属性3.通过调用CALayer的addAnimation:forKey:方法增加CAAnimation对象到CALayer中,这样就能开始执行动画了4.通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画回到顶部三、CAAnimation* 从前面的叙述可以看出,要想执行动画,就必须初始化一个CAAnimation对象。* 其实,一般情况下,我们使用的比较多的是CAAnimation的子类,因此,先大致看看CAAnimation的继承结构:黑线代表继承,黑色文字代表类名,白色文字代表属性。其中CAMediaTiming是一个协议(protocol)。1.CAAnimation的常用属性* CAAnimation是所有动画类的父类,但是它不能直接使用,应该使用它的子类* 常见属性有:1duration:动画的持续时间2repeatCount:动画的重复次数3timingFunction:控制动画运行的节奏timingFunction可选的值有: kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉 kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开 kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地 kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。4delegate:动画代理,用来监听动画的执行过程代理对象需要实现的方法有:(这几个方法被定义在某个分类中)1 interface NSObject (CAAnimationDelegate)2 / 动画开始执行的时候触发这个方法3 - (void)animationDidStart:(CAAnimation *)anim;4 5 / 动画执行完毕的时候触发这个方法6 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;7 end* 上面介绍的所有属性都是属于CAAnimation的,因此,CAAnimation的所有子类都能使用它们。2.其他* CAPropertyAnimation也是不能直接使用的,也要使用它的子类* 所以,能用的动画类只剩下4个:CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup回到顶部四、CAPropertyAnimation*CAPropertyAnimation是CAAnimation的子类,但是不能直接使用,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation* 它有个NSString类型的keyPath属性,你可以指定CALayer的某个属性名为keyPath,并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定position为keyPath,就会修改CALayer的position属性的值,以达到平移的动画效果* 因此,初始化好CAPropertyAnimation的子类对象后,必须先设置keyPath,搞清楚要修改的是CALayer的哪个属性,执行的是怎样的动画Core Animation2-CABasicAnimation本文目录 一、平移动画 二、缩放动画 三、旋转动画 四、其他CABasicAnimation是CAPropertyAnimation的子类,使用它可以实现一些基本的动画效果,它可以让CALayer的某个属性从某个值渐变到另一个值。下面就用CABasicAnimation实现几个简单的动画。* 先初始化一个UIView添加到控制器的view中,然后在这个UIView的layer上执行动画,下面的self是指控制器1 _myView = UIView alloc init;2 _myView.layer.position = CGPoint
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 核子仪考试题及答案
- 郑州校园探访活动方案
- 贵州转学考试题及答案
- 钢琴乐理考试题及答案
- 农民合作社农业信贷支持协议
- 氟骨病考试题及答案
- 提升生态合作保障承诺书5篇
- 专业人士行业担当承诺书6篇
- 用户反馈信息分类表格
- 方向辨认考试题及答案
- 提升家庭教育指导能力
- 设备借用协议范本
- caprini评分表的发展、应用研究及改进探讨
- 交安工程施工合同
- 高中生物选择性必修一知识点总结
- 肠造口并发症讲稿课件
- GB/T 6403.5-2008砂轮越程槽
- GB/T 15970.2-2000金属和合金的腐蚀应力腐蚀试验第2部分:弯梁试样的制备和应用
- 石灰石石膏湿法脱硫工艺详1系统课件
- 组织行为学核心主题全系列(MBA研修班学生版4日)课件
- 局部解剖学绪论课件
评论
0/150
提交评论