自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iPhone靜態(tài)庫應(yīng)用之封裝控件庫教程

移動(dòng)開發(fā) iOS
本文介紹的是iPhone靜態(tài)庫應(yīng)用之封裝控件庫教程,我們使用iPhone靜態(tài)庫把自定義組件CheckButton 進(jìn)行進(jìn)一步的封裝,來看內(nèi)容。

iPhone靜態(tài)庫應(yīng)用之封裝控件庫教程是本文要介紹的內(nèi)容,由于iPhone控件的極度匱乏和自定義組件在重用上的限制,在過去的項(xiàng)目中我們積累了大量的“純代碼”組件——因?yàn)镮B本身的限制,我們無法把這些組件封裝為IB組件庫(本來我們想通過分發(fā)xib文件的方式重用這些組件,但最終發(fā)現(xiàn)這根本不可能,蘋果的Plug-in編程不支持iPhone)。

最終我們想到了靜態(tài)庫。雖然這仍然還是一種比較原始的復(fù)用方式,但起碼我們可以隱藏組件的源代碼。下面, 我們使用iPhone靜態(tài)庫把自定義組件CheckButton 進(jìn)行進(jìn)一步的封裝。(組件的實(shí)現(xiàn)參考前一篇博文《自定義控件復(fù)選框和單選框的實(shí)現(xiàn)》)

一、實(shí)現(xiàn)靜態(tài)庫

新建工程, 選擇 Library 下的 “ Cocoa Touch Static Library ” 。給工程命名,例如:yhyLibrary。                 

復(fù)制CheckButton組件的4個(gè)源文件:CheckButton.h、CheckButton.m、RadioGroup.h、RadioGroup.m到Classes目錄下,同時(shí)把CheckButton的4個(gè)資源文件:check.png、uncheck.png、radio.png、unradio.png,復(fù)制到工程文件夾。

按下 ⌘ +b編譯,在Products目錄下即產(chǎn)生一個(gè) .a文件。

二、 新建資源束

靜態(tài)庫中并不能包含資源文件,雖然我們已經(jīng)把4個(gè)資源文件(.png文件)拷貝到靜態(tài)庫工程中,但實(shí)際上這些.png是不會(huì)添加到target的,也就是說編譯結(jié)果中并不包含這些資源,因此如果此時(shí)調(diào)用靜態(tài)庫,所有的資源(字符串、圖片)都是缺失的。

我們可以把資源建立成單獨(dú)的束(Bundle)。

新建工程“ Mac OS X  -> Framework & Library -> Bundle ”,命名為:yhyLibraryBundle。

然后把上面4個(gè).png文件拷進(jìn)Resouces中去。編譯,生成yhyLibraryBundle.bundle文件。

返回靜態(tài)庫工程,新建一個(gè)類:Utils 。

編輯Utils.h:

  1. #define MYBUNDLE_NAME @ "yhyLibraryBundle.bundle"   
  2. #define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME]   
  3. #define MYBUNDLE [NSBundle bundleWithPath: MYBUNDLE_PATH]   
  4. NSString * getMyBundlePath( NSString * filename);  

編輯Utils.m:

  1. #import "Utils.h"   
  2. NSString* getMyBundlePath( NSString * filename)   
  3. {   
  4. NSBundle * libBundle = MYBUNDLE ;   
  5. if ( libBundle && filename ){   
  6. NSString * s=[[libBundle resourcePath ] stringByAppendingPathComponent : filename];   
  7. NSLog ( @"%@" ,s);   
  8. return s;   
  9. }   
  10. return nil ;   
  11. }  

函數(shù)getMyBundlePath可以取得束yhyLibraryBundle中具體資源的絕對(duì)文件路徑,如:

  1. /Users/kmyhy/Library/Application Support/iPhone Simulator/4.2/Applications/8213652F-A47E-456A-A7BB-4CD40892B66D/yhyLibTest.app/
  2. yhyLibraryBundle.bundle/Contents/Resources/radio.png  

同時(shí),修改CheckButton.m中的代碼,導(dǎo)入U(xiǎn)tils.h頭文件,把其中獲取圖片的代碼由imageNamed修改為imageWithContentsOfFile,如:

  1. [ icon setImage :[ UIImage imageWithContentsOfFile : getMyBundlePath ( checkname )]];  

即通過絕對(duì)路徑讀取圖片資源。

除了這種方法,我們還可以有一個(gè)簡(jiǎn)單辦法,就是把4個(gè)資源文件直接拷貝到你調(diào)用靜態(tài)庫的應(yīng)用工程中(不需要修改靜態(tài)庫代碼)。

三、靜態(tài)庫調(diào)用

1、添加靜態(tài)庫

新建Window-based Application工程,給工程命名,如yhyLibraryTest。

右鍵點(diǎn) Frameworks->Add->Existing Files.. ,把靜態(tài)庫工程的yhyLibrary.xcodeproj文件 添加到當(dāng)前工程(不要選擇 Copy items ) 。

選中添加進(jìn)來的yhyLibrary.xcodeproj文件,勾選“include to target”選項(xiàng),如下圖,打上***一個(gè)小勾:

iPhone靜態(tài)庫應(yīng)用之封裝控件庫教程

2、添加Direct Dependencies(即引用工程)

類似于Visual Studio中的引用工程,目的是便于在本工程中直接編輯所引用的靜態(tài)庫工程,以便對(duì)靜態(tài)庫進(jìn)行修改。

在“ Targets ”目錄下選擇“ FirstLibraryTest ”,點(diǎn)擊“info”按鈕,調(diào)出目標(biāo)的屬性窗口,切換到“General”欄,點(diǎn)擊“ Direct Dependencies ”下方的“ + ”按鈕,將工程靜態(tài)庫libyhyLibrary添加到Direct Dependencies中,結(jié)果如下圖:

iPhone靜態(tài)庫應(yīng)用之封裝控件庫教程

3、添加頭文件搜索路徑

打開工程的info窗口,在Build欄中找到Header Search Paths,添加字符串“../yhyLibrary”。

4、 引用資源束

在target的Copy Bundle Resources上右鍵,選擇“Add->Existing File…”,把前面生成的yhyLibraryBundle.bundle束添加到工程。

5、調(diào)用靜態(tài)庫中的類

編輯 application:( UIApplication *)application didFinishLaunchingWithOptions: 方法中的代碼:

  1. // 單選按鈕組   
  2. RadioGroup * rg =[[ RadioGroup alloc ] init ];   
  3. // 第 1 個(gè)單選按鈕   
  4. CheckButton * cb=[[ CheckButton alloc ] initWithFrame : CGRectMake ( 20 , 60 , 260 , 32 )];   
  5. // 把單選按鈕加入按鈕組   
  6. [ rg add :cb];   
  7. cb. label . text = @"★" ;   
  8. cb. value =[[ NSNumber alloc ] initWithInt : 1 ];   
  9. // 把按鈕設(shè)置為單選按鈕樣式   
  10. cb. style = CheckButtonStyleRadio ;   
  11. // 加入視圖   
  12. [ self . window addSubview :cb];   
  13. [cb release ]; //add 后,會(huì)自動(dòng)持有,可以釋放   
  14. // 第 2 個(gè)單選按鈕   
  15. cb=[[ CheckButton alloc ] initWithFrame : CGRectMake ( 20 , 100 , 260 , 32 )];   
  16. [ rg add :cb];   
  17. cb. label . text = @"★★" ;   
  18. cb. value =[[ NSNumber alloc ] initWithInt : 2 ];   
  19. cb. style = CheckButtonStyleRadio ;   
  20. [ self . window addSubview :cb];   
  21. [cb release ];   
  22. // 第 3 個(gè)單選按鈕   
  23. cb=[[ CheckButton alloc ] initWithFrame : CGRectMake ( 20 , 140 , 260 , 32 )];   
  24. [ rg add :cb];   
  25. cb. label . text = @"★★★" ;   
  26. cb. value =[[ NSNumber alloc ] initWithInt : 3 ];   
  27. cb. style = CheckButtonStyleRadio ;   
  28. [ self . window addSubview :cb];   
  29. [cb release ];  

運(yùn)行結(jié)果如下:

iPhone靜態(tài)庫應(yīng)用之封裝控件庫教程

6、分發(fā)靜態(tài)庫

將生成的.a文件和.bundle文件打包分發(fā)給其他人。

小結(jié):iPhone靜態(tài)庫應(yīng)用之封裝控件庫教程的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來源: CSDN博客
相關(guān)推薦

2011-08-10 10:23:20

iPhoneArchivingNSCoder

2011-07-18 15:52:50

iPhone 靜態(tài)庫

2011-08-18 13:37:57

iPhone項(xiàng)目靜態(tài)庫

2021-07-11 06:45:18

Linux內(nèi)核靜態(tài)

2011-08-16 19:02:23

iPhone開發(fā)繪圖

2011-08-11 10:16:23

iPhoneUIView視圖

2011-08-11 10:27:37

iPhoneUIView視圖

2011-08-15 18:02:32

iPhone開發(fā)表視圖

2011-08-05 16:31:47

iPhone 數(shù)據(jù)庫

2011-08-02 14:15:05

XCode 靜態(tài) 鏈接庫

2011-08-12 11:31:46

iPhoneUIView動(dòng)畫

2011-08-15 10:15:00

iPhone開發(fā)警告框

2011-08-11 11:51:07

iPhone鍵盤

2011-07-25 14:14:49

iPhone SQLITE Pldatabase

2011-07-08 14:58:16

iPhone Xcode iOS

2011-08-19 14:27:29

iPhone開發(fā)

2011-07-27 10:16:41

iPhone SQLite 數(shù)據(jù)庫

2011-06-09 11:11:35

QT 靜態(tài)庫 動(dòng)態(tài)庫

2011-08-09 13:10:32

iPhone地圖開發(fā)

2011-06-01 14:20:37

Android
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)