关于ios开发quartz的信息

ios应用程序开发怎么进行单元测试

本文对比两个iOS开发中常见的单元测试框架:OCUnit,被官方集成进XCode 4.x版本中;GHUnit,被推荐最多的测试框架,带GUI界面。初窥两款测试框架非常相似,而上手使用就会发现其中的区别。细节上的区别使两款框架在不同角度各有优劣。

昌宁ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

OCUnit

OCUnit是XCode 4.x集成的单元测试框架,OCUnit中的测试分为两类,一类称为Logic Tests,另一类称为Application Tests。Logic Tests更倾向于所谓的白盒测试,用于测试工程中较细节的逻辑;Application Tests更倾向于黑盒测试,或接口测试,用于测试直接与用户交互的接口。

• 添加单元测试

OCUnit是XCode集成的,所以其与工程的结合理应是最好的,添加到工程中的成本也理应最低。使用XCode创建新工程的流程中就有一个“Include Unit Tests”的选项(如图1),新的工程就会自动生成一个Logic Tests。

向已存在的工程中添加OCUnit Logic Tests也不复杂,只需要添加一个类型为:“Cocoa Touch Unit Testing Bundle”的Target即可(如图2)。

向已有工程中添加一个测试Target时,XCode会自动生成一个Scheme,运行单元测试用例和Build原工程需要切换不同的Scheme。如果认为切换Scheme非常麻烦,也可以在添加Target之前,在“Manage Scheme”菜单中取消“Autocreate schemes”(如图3)。

Application Tests要基于Logic Tests做一些修改。一般来说一个工程既需要Logic Tests也需要Application Tests,所以建议按照上述方法添加一个单独的Target,然后执行以下操作(如图4):

1. 在Build Settings中搜索“bundle loader”,设置为:$(BUILT_PRODUCTS_DIR)/APP_NAME.app/APP_NAME(APP_NAME是应用名)

2. 再搜索“test host”,设置为:$(BUNDLE_LOADER)

3. 在Build Phases-Target Dependencies中添加依赖,选择主程序Target

创建测试用例

OCUnit的测试用例最常用的方法有三个

1. - (void)setUp:每个test方法执行前调用

2. - (void)tearDown:每个test方法执行后调用

3. - (void)testXXX:命名为XXX的测试方法

添加Target之时XCode已经自动创建了一个测试用例类:UnitTestDemoTests,其中UnitTestDemo是工程的名字,该类中已经包含了setUp,tearDown和testExample三个方法。

通过command+n,选择“Objective-C test case class”创建一个新的测试用例类(如图5)。通过XCode创建的测试用例类是一个继承自SenTestCase(OCUnit由SEN:TE公司开发,因此基类命名为SenTestCase)的空类,需要模仿UnitTestDemoTests编写测试方法。

开发者可以自己实现无返回值,且命名规则为testXXX的实例方法,并使用框架提供的大量断言方法。

Logic Tests与Application Tests的区别主要在setUp方法,Logic Tests只需在setUp方法中初始化一些测试数据,而Application Tests需要在setUp方法中获取主应用的AppDelegate,供test方法调用。

值得注意的是,OCUnit的test bundle是侵入主应用的,因此在使用过程中要十分注意,不要让单元测试的资源覆盖主应用资源,造成诡异的Bug。

• 运行测试

由于OCUnit是集成在XCode中的框架,因此在XCode中运行也比较方便。切换到单元测试的scheme(如果与工程共用scheme则无需切换),Product-Test(或直接使用快捷键command+u),框架会自动查找所有工程中SenTestCase的子类,运行其中全部命名类似testXXX的无返回值方法。

• 测试反馈

OCUnit的失败方法会通过Console和XCode Issues两个位置反馈,通过XCode Issues可以直接定位到出现错误的单元测试代码行。Issue的提示信息就是在单元测试断言方法中定义的description。

GHUnit

GHUnit是一款Objective-C的测试框架,除了支持iOS工程还支持OSX的工程,但OSX不在本文的讨论范围。GHUnit不同于OCUnit,它提供了GUI界面来操作测试用例,而且也不区分Logic Tests和Application Tests。

• 添加单元测试

与集成进XCode的OCUnit相比,GHUnit的添加过程略显复杂。首先在上下载GHUnit的框架包,当前的For iOS的最新版本是0.5.6,解压后是一个GHUnitIOS.framework的文件夹。

打开已经存在的工程,添加一个EmptyApplication Target,并在新Target中添加刚刚下载的GHUnitIOS.framework

在Build Phases中添加非官方框架并不会把框架文件拷贝到工程目录,而是只做一个链接,所以建议在添加之前先把框架拷贝到工程目录下。

接下来用相同的方法添加框架依赖的其他库:“QuartzCore.framework”。

在Build Settings中搜索“linker flags”,设置Other Linker Flags - Debug - 添加一个支持全架构和全版本SDK的标示“-ObjC -all_load”(如图8)。

删除Tests Target中的AppDelegate(.h和.m一起删除)。修改main函数,支持GHUnitIOS,导入GHUnitIOSAppDelegate代替原来的AppDelegate,修改UIApplicationMain的参数(如图9)。

至此已经完成了GHUnit的添加,选择新建Target同时创建的scheme,直接Build and Run即可在设备或Simulator中启动一个新的App(如图10),即该单元测试的App。

iOS开发如何使用Quartz2D实现自定义的不规则按钮图形

//

2 // YYViewController.m

3 // 06-绘制基本图形

4 //

5 // Created by apple on 14-6-22.

6 // Copyright (c) 2014年 itcase. All rights reserved.

7 //

8

9 #import "YYViewController.h"

10

11 @interface YYViewController ()

12 @property (weak, nonatomic) IBOutlet UIImageView *iv;

13 @end

14

15 @implementation YYViewController

16

17 - (void)viewDidLoad

18 {

19 [super viewDidLoad];

20

21 //加载图片

22 //0.创建一个Bitmap上下文

23 //c语言的方法

24 // CGBitmapContextCreate(#void *data#, #size_t width#, #size_t height#, #size_t bitsPerComponent#, #size_t bytesPerRow#, #CGColorSpaceRef space#, #CGBitmapInfo bitmapInfo#)

25 //oc中封装的方法

26 //方法1

27 // UIGraphicsBeginImageContext(#CGSize size#);

28 //方法2

29 UIGraphicsBeginImageContextWithOptions( CGSizeMake(200, 200), NO, 0);

30 //1.获取bitmap上下文

31 CGContextRef ctx = UIGraphicsGetCurrentContext();

32 //2.绘图(画一个圆)

33 CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));

34 //3.渲染

35 CGContextStrokePath(ctx);

36 //4.获取生成的图片

37 UIImage *image=UIGraphicsGetImageFromCurrentImageContext();

38 //5.显示生成的图片到imageview

39 self.iv.image=image;

40 //6.保存绘制好的图片到文件中

41 //先将图片转换为二进制数据,然后再将图片写到文件中

42 // UIImageJPEGRepresentation(image, 1); //第二个参数为保存的图片的效果

43 NSData *data=UIImagePNGRepresentation(image);

44 [data writeToFile:@"/Users/apple/Desktop/abc.png" atomically:YES];

45 }

46

47 - (void)didReceiveMemoryWarning

48 {

49 [super didReceiveMemoryWarning];

50 // Dispose of any resources that can be recreated.

51 }

52

53 @end

iOS--玩玩苹果的绘制(Quartz)

对于日常的开发我们一般用不到Quzrtz,不过当我们需要设计的一些奇葩的图像图形的的时候,这时候Core Graphics 就有很大的作用了。

举个????:imageView layer圆角,离屏渲染影响性能,好嘛,不用了!直接用CG设置图片圆角。妈妈在也不不怕爱啪啪帧数低了。

经理又觉得你的提示框方方正正太丑了,要来点个性的。没办法只能改嘛,怎么改?找CG啊!

现在,我们一点一点来看这个Quzrtz是个什么鬼。

上面的3步,是必不可少的。当然绘制的内容,我们一点一点说。

上面 2种线条的效果图

对于线条还可以设置一些属性

1.宽度(必须的0.0)

2.设置line cap 就是线条棱角的样式(3种样式)

3.设置line join 线衔接的样式(线的宽度 达到一定的程度,才会看得出来)

要讲content保存到堆栈中

还有一点上面的path 路径。完全可以用贝塞尔代替,写出一些比较奇葩的弧度0。o

不断绘制的话,就会有这个效果

是不是很帅!

只要phase变化,不停的重绘就可以了

由于坐标系统设定的不一样,这张图片绘制完,其实是倒着的。

还有一个平铺图片的方法

毕竟倒着看,难受的要死。

苹果也给了方法解决他,就是旋转

其实 都是差不多意思

是时候解决上面的问题了

裁剪图片圆角

上面的path 我使用贝塞尔做的,感觉这样简单

之后调用 contentClip 去裁剪。

恩,下班了,暂时写到这。。0.0


分享文章:关于ios开发quartz的信息
链接URL:http://csdahua.cn/article/dseeghc.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流