關(guān)于ios開發(fā)quartz的信息

ios應(yīng)用程序開發(fā)怎么進(jìn)行單元測試

本文對比兩個iOS開發(fā)中常見的單元測試框架:OCUnit,被官方集成進(jìn)XCode 4.x版本中;GHUnit,被推薦最多的測試框架,帶GUI界面。初窺兩款測試框架非常相似,而上手使用就會發(fā)現(xiàn)其中的區(qū)別。細(xì)節(jié)上的區(qū)別使兩款框架在不同角度各有優(yōu)劣。

昌寧ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

OCUnit

OCUnit是XCode 4.x集成的單元測試框架,OCUnit中的測試分為兩類,一類稱為Logic Tests,另一類稱為Application Tests。Logic Tests更傾向于所謂的白盒測試,用于測試工程中較細(xì)節(jié)的邏輯;Application Tests更傾向于黑盒測試,或接口測試,用于測試直接與用戶交互的接口。

? 添加單元測試

OCUnit是XCode集成的,所以其與工程的結(jié)合理應(yīng)是最好的,添加到工程中的成本也理應(yīng)最低。使用XCode創(chuàng)建新工程的流程中就有一個“Include Unit Tests”的選項(如圖1),新的工程就會自動生成一個Logic Tests。

向已存在的工程中添加OCUnit Logic Tests也不復(fù)雜,只需要添加一個類型為:“Cocoa Touch Unit Testing Bundle”的Target即可(如圖2)。

向已有工程中添加一個測試Target時,XCode會自動生成一個Scheme,運(yùn)行單元測試用例和Build原工程需要切換不同的Scheme。如果認(rèn)為切換Scheme非常麻煩,也可以在添加Target之前,在“Manage Scheme”菜單中取消“Autocreate schemes”(如圖3)。

Application Tests要基于Logic Tests做一些修改。一般來說一個工程既需要Logic Tests也需要Application Tests,所以建議按照上述方法添加一個單獨的Target,然后執(zhí)行以下操作(如圖4):

1. 在Build Settings中搜索“bundle loader”,設(shè)置為:$(BUILT_PRODUCTS_DIR)/APP_NAME.app/APP_NAME(APP_NAME是應(yīng)用名)

2. 再搜索“test host”,設(shè)置為:$(BUNDLE_LOADER)

3. 在Build Phases-Target Dependencies中添加依賴,選擇主程序Target

創(chuàng)建測試用例

OCUnit的測試用例最常用的方法有三個

1. - (void)setUp:每個test方法執(zhí)行前調(diào)用

2. - (void)tearDown:每個test方法執(zhí)行后調(diào)用

3. - (void)testXXX:命名為XXX的測試方法

添加Target之時XCode已經(jīng)自動創(chuàng)建了一個測試用例類:UnitTestDemoTests,其中UnitTestDemo是工程的名字,該類中已經(jīng)包含了setUp,tearDown和testExample三個方法。

通過command+n,選擇“Objective-C test case class”創(chuàng)建一個新的測試用例類(如圖5)。通過XCode創(chuàng)建的測試用例類是一個繼承自SenTestCase(OCUnit由SEN:TE公司開發(fā),因此基類命名為SenTestCase)的空類,需要模仿UnitTestDemoTests編寫測試方法。

開發(fā)者可以自己實現(xiàn)無返回值,且命名規(guī)則為testXXX的實例方法,并使用框架提供的大量斷言方法。

Logic Tests與Application Tests的區(qū)別主要在setUp方法,Logic Tests只需在setUp方法中初始化一些測試數(shù)據(jù),而Application Tests需要在setUp方法中獲取主應(yīng)用的AppDelegate,供test方法調(diào)用。

值得注意的是,OCUnit的test bundle是侵入主應(yīng)用的,因此在使用過程中要十分注意,不要讓單元測試的資源覆蓋主應(yīng)用資源,造成詭異的Bug。

? 運(yùn)行測試

由于OCUnit是集成在XCode中的框架,因此在XCode中運(yùn)行也比較方便。切換到單元測試的scheme(如果與工程共用scheme則無需切換),Product-Test(或直接使用快捷鍵command+u),框架會自動查找所有工程中SenTestCase的子類,運(yùn)行其中全部命名類似testXXX的無返回值方法。

? 測試反饋

OCUnit的失敗方法會通過Console和XCode Issues兩個位置反饋,通過XCode Issues可以直接定位到出現(xiàn)錯誤的單元測試代碼行。Issue的提示信息就是在單元測試斷言方法中定義的description。

GHUnit

GHUnit是一款Objective-C的測試框架,除了支持iOS工程還支持OSX的工程,但OSX不在本文的討論范圍。GHUnit不同于OCUnit,它提供了GUI界面來操作測試用例,而且也不區(qū)分Logic Tests和Application Tests。

? 添加單元測試

與集成進(jìn)XCode的OCUnit相比,GHUnit的添加過程略顯復(fù)雜。首先在上下載GHUnit的框架包,當(dāng)前的For iOS的最新版本是0.5.6,解壓后是一個GHUnitIOS.framework的文件夾。

打開已經(jīng)存在的工程,添加一個EmptyApplication Target,并在新Target中添加剛剛下載的GHUnitIOS.framework

在Build Phases中添加非官方框架并不會把框架文件拷貝到工程目錄,而是只做一個鏈接,所以建議在添加之前先把框架拷貝到工程目錄下。

接下來用相同的方法添加框架依賴的其他庫:“QuartzCore.framework”。

在Build Settings中搜索“l(fā)inker flags”,設(shè)置Other Linker Flags - Debug - 添加一個支持全架構(gòu)和全版本SDK的標(biāo)示“-ObjC -all_load”(如圖8)。

刪除Tests Target中的AppDelegate(.h和.m一起刪除)。修改main函數(shù),支持GHUnitIOS,導(dǎo)入GHUnitIOSAppDelegate代替原來的AppDelegate,修改UIApplicationMain的參數(shù)(如圖9)。

至此已經(jīng)完成了GHUnit的添加,選擇新建Target同時創(chuàng)建的scheme,直接Build and Run即可在設(shè)備或Simulator中啟動一個新的App(如圖10),即該單元測試的App。

iOS開發(fā)如何使用Quartz2D實現(xiàn)自定義的不規(guī)則按鈕圖形

//

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.創(chuàng)建一個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 //先將圖片轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),然后再將圖片寫到文件中

42 // UIImageJPEGRepresentation(image, 1); //第二個參數(shù)為保存的圖片的效果

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)

對于日常的開發(fā)我們一般用不到Quzrtz,不過當(dāng)我們需要設(shè)計的一些奇葩的圖像圖形的的時候,這時候Core Graphics 就有很大的作用了。

舉個????:imageView layer圓角,離屏渲染影響性能,好嘛,不用了!直接用CG設(shè)置圖片圓角。媽媽在也不不怕愛啪啪幀數(shù)低了。

經(jīng)理又覺得你的提示框方方正正太丑了,要來點個性的。沒辦法只能改嘛,怎么改?找CG啊!

現(xiàn)在,我們一點一點來看這個Quzrtz是個什么鬼。

上面的3步,是必不可少的。當(dāng)然繪制的內(nèi)容,我們一點一點說。

上面 2種線條的效果圖

對于線條還可以設(shè)置一些屬性

1.寬度(必須的0.0)

2.設(shè)置line cap 就是線條棱角的樣式(3種樣式)

3.設(shè)置line join 線銜接的樣式(線的寬度 達(dá)到一定的程度,才會看得出來)

要講content保存到堆棧中

還有一點上面的path 路徑。完全可以用貝塞爾代替,寫出一些比較奇葩的弧度0。o

不斷繪制的話,就會有這個效果

是不是很帥!

只要phase變化,不停的重繪就可以了

由于坐標(biāo)系統(tǒng)設(shè)定的不一樣,這張圖片繪制完,其實是倒著的。

還有一個平鋪圖片的方法

畢竟倒著看,難受的要死。

蘋果也給了方法解決他,就是旋轉(zhuǎn)

其實 都是差不多意思

是時候解決上面的問題了

裁剪圖片圓角

上面的path 我使用貝塞爾做的,感覺這樣簡單

之后調(diào)用 contentClip 去裁剪。

恩,下班了,暫時寫到這。。0.0

網(wǎng)站標(biāo)題:關(guān)于ios開發(fā)quartz的信息
本文URL:http://m.kartarina.com/article42/dseeghc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司品牌網(wǎng)站設(shè)計營銷型網(wǎng)站建設(shè)外貿(mào)網(wǎng)站建設(shè)網(wǎng)頁設(shè)計公司ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
主站蜘蛛池模板: 亚洲AV无码一区二区三区性色| 无码丰满熟妇一区二区| 麻豆精品无码国产在线果冻| 少妇极品熟妇人妻无码| 国产精品无码免费专区午夜| 久久亚洲AV成人无码电影| 亚洲成a人无码亚洲成av无码| 国产免费久久久久久无码| 亚洲av无码专区在线| 国内精品久久久久久无码不卡 | 国产亚洲?V无码?V男人的天堂| 三上悠亚ssⅰn939无码播放| 亚洲中文字幕无码av| 中文字幕人妻无码一夲道| 国产莉萝无码AV在线播放| 亚洲中文字幕无码不卡电影| 性色av极品无码专区亚洲| 欧洲Av无码放荡人妇网站| 国产精品va无码一区二区| 人妻无码aⅴ不卡中文字幕| 亚洲看片无码在线视频| 久久亚洲精品无码| 亚洲一区AV无码少妇电影☆| 国产成人无码a区在线视频 | 亚洲国产AV无码一区二区三区| a级毛片无码免费真人久久| 东京热av人妻无码| 人妻av中文字幕无码专区| 精品无码AV无码免费专区| 亚洲成AV人在线观看天堂无码| 黑人无码精品又粗又大又长| 好爽毛片一区二区三区四无码三飞 | 亚洲国产成人精品无码区二本| 亚洲AV无码一区二区乱子伦| 久久久久亚洲AV无码专区网站| 国产成人亚洲精品无码AV大片| 国模无码一区二区三区| 免费无码AV一区二区| 国产精品成人无码免费| 无码色AV一二区在线播放| 精品国产毛片一区二区无码|