`
janedoneway
  • 浏览: 582040 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

iPhone 封装自己的控件库:静态库的应用

 
阅读更多

From: http://www.erpgear.com/2011/0411/1016.html

 

由于iPhone 控件的极度匮乏和自定义组件在重用上的限制,在过去的项目中我们积累了大量的“纯代码”组件——因为IB本身的限制,我们无法把这些组件封装为IB组件库 (本来我们想通过分发xib文件的方式重用这些组件,但最终发现这根本不可能,苹果的Plug-in编程不支持iPhone)。

最终我们想到了静态库。虽然这仍然还是一种比较原始的复用方式,但起码我们可以隐藏组件的源代码。

下面, 我们使用iPhone静态库把自定义组件CheckButton 进行进一步的封装。(组件的实现参考前一篇博文《自定义控件复选框和单选框的实现》)

一、实现静态库

新建工程, 选择 Library 下的  Cocoa Touch Static Library  。给工程命名,例如:yhyLibrary。                 

复制CheckButton 组件的4个源文件:CheckButton.h、CheckButton.m、RadioGroup.h、RadioGroup.m到Classes目录 下,同时把CheckButton的4个资源文件:check.png、uncheck.png、radio.png、unradio.png,复制到工 程文件夹。

按下  +b编译,在Products目录下即产生一个 .a文件。

二、 新建资源束

静态库中并不能包含资源文件,虽然我们已经把4个资源文件(.png文件)拷贝到静态库工程中,但实际上这些.png是不会添加到target的,也就是说编译结果中并不包含这些资源,因此如果此时调用静态库,所有的资源(字符串、图片)都是缺失的。

我们可以把资源建立成单独的束(Bundle)。

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

然后把上面4个.png文件拷进Resouces中去。编译,生成yhyLibraryBundle.bundle文件。

返回静态库工程,新建一个类:Utils 。

编辑Utils.h:

#define MYBUNDLE_NAME @ "yhyLibraryBundle.bundle"

#define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME]

#define MYBUNDLE [NSBundle bundleWithPath: MYBUNDLE_PATH]

NSString * getMyBundlePath( NSString * filename);

编辑Utils.m:

#import "Utils.h"

NSString* getMyBundlePath( NSString * filename)

{

 

NSBundle * libBundle = MYBUNDLE ;

if ( libBundle && filename ){

NSString * s=[[libBundle resourcePath stringByAppendingPathComponent : filename];

NSLog ( @"%@" ,s);

return s;

}

return nil ;

}

函数getMyBundlePath可以取得束yhyLibraryBundle中具体资源的绝对文件路径,如:

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

同时,修改CheckButton.m中的代码,导入Utils.h头文件,把其中获取图片的代码由imageNamed修改为imageWithContentsOfFile,如:

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

即通过绝对路径读取图片资源。

除了这种方法,我们还可以有一个简单办法,就是把4个资源文件直接拷贝到你调用静态库的应用工程中(不需要修改静态库代码)。

 

三、静态库调用

1、添加静态库

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

右键点 Frameworks->Add->Existing Files.. ,把静态库工程的yhyLibrary.xcodeproj文件 添加到当前工程(不要选择 Copy items  

选中添加进来的yhyLibrary.xcodeproj文件,勾选“include to target”选项,如下图,打上最后一个小勾:

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

类似于Visual Studio中的引用工程,目的是便于在本工程中直接编辑所引用的静态库工程,以便对静态库进行修改。

在“ Targets ”目录下选择“ FirstLibraryTest ”,点击“info”按钮,调出目标的属性窗口,切换到“General”栏,点击“ Direct Dependencies ”下方的“ + ”按钮,将工程静态库libyhyLibrary添加到Direct Dependencies中,结果如下图:

3、添加头文件搜索路径

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

4、 引用资源束

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

5、调用静态库中的类

编辑 application:( UIApplication *)application didFinishLaunchingWithOptions: 方法中的代码:

// 单选按钮组

RadioGroup rg =[[ RadioGroup alloc ] init ];

//  1 个单选按钮

CheckButton * cb=[[ CheckButton alloc ] initWithFrame : CGRectMake ( 20 60 260 32 )];

// 把单选按钮加入按钮组

[ rg add :cb];

cb. label . text = @"★" ;

cb. value =[[ NSNumber alloc ] initWithInt : 1 ];

// 把按钮设置为单选按钮样式

cb. style = CheckButtonStyleRadio ;

// 加入视图

[ self . window addSubview :cb];

[cb release ]; //add 后,会自动持有,可以释放

//  2 个单选按钮

cb=[[ CheckButton alloc ] initWithFrame : CGRectMake ( 20 100 260 32 )];

[ rg add :cb];

cb. label . text = @"★★" ;

cb. value =[[ NSNumber alloc ] initWithInt : 2 ];

cb. style = CheckButtonStyleRadio ;

[ self . window addSubview :cb];

[cb release ];

//  3 个单选按钮

cb=[[ CheckButton alloc ] initWithFrame : CGRectMake ( 20 140 260 32 )];

[ rg add :cb];

 

cb. label . text = @"★★★" ;

cb. value =[[ NSNumber alloc ] initWithInt : 3 ];

cb. style = CheckButtonStyleRadio ;

[ self . window addSubview :cb];

[cb release ];

运行结果如下:

 

6、分发静态库

将生成的.a文件和.bundle文件打包分发给其他人。

分享到:
评论

相关推荐

    IPHONE-UI控件库

    直接COPY至\My Documents\My Axure RP Libraries即可使用

    IOS 封装静态库Demo

    静态库在编译时会被直接链接到目标应用程序中,成为应用程序的一部分,因此在运行时不需要单独的动态库支持。 创建和封装一个静态库的过程主要包括以下几个步骤: 1. **设置Xcode工程**:首先,你需要创建一个新的...

    axure iphone手机元件库原型库

    iPhone手机元件库是Axure中一个重要的资源集合,它包含了一系列预设的、与苹果iPhone设备相关的组件和控件,使得设计师可以快速构建出符合iOS界面规范的原型。 在"axure iphone手机元件库原型库"中,我们可以找到...

    iphone添加静态库编译教程

    由于苹果官方禁止在iPhone应用中使用外部框架或动态链接库,因此静态库成为了代码复用的最佳选择之一。本文将详细介绍如何在iPhone项目中添加并使用静态库。 #### 二、静态库的优势 1. **代码重用**:通过将通用的...

    iPhone与iPad开发实战:iOS经典应用剖析

    图书描述《iPhone与iPad开发实战:iOS经典应用剖析》收录了6个iOS项目,这些项目是在iOS开源网站下载的。涵盖了工具类应用、体育类应用、效率类应用、娱乐类应用和游戏类应用等几个方面。从第3章开始,每章都是一个...

    移动应用Android 模仿iphone时间滚轮控件源码.rar

    在Android平台上开发移动应用时,有时我们希望实现与iOS设备类似的用户体验,比如iPhone的时间滚轮控件(通常称为Picker)。这个资源包“移动应用Android 模仿iphone时间滚轮控件源码.rar”提供了一个解决方案,它...

    iphone 时间控件

    在这个主题中,我们将深入探讨iPhone时间控件的使用、设计特点以及如何在应用中实现它。 1. **时间控件的设计** iPhone的时间控件呈现出经典的圆形设计,通常被称为“时钟轮”。用户可以通过旋转两个独立的环形...

    iPhone中部分控件的应用

    ### iPhone中部分控件的应用及关键技术点解析 #### 一、项目搭建与基本控件使用 **1. 创建第一个程序** - **项目创建**: 在Xcode中新建一个iOS项目,并选择“Single View App”模板。这将自动生成一个包含`.h`、`...

    iPhone与iPad开发实战:iOS经典应用剖析

    本书《iPhone与iPad开发实战:iOS经典应用剖析》是一本专注于iOS平台开发的教程书籍。它详细地剖析了iOS项目开发的实战过程,并且在理论知识的教授上也有所涉猎,目的是帮助读者能够亲自动手开发iOS项目,并且在实战...

    iphone开发控件大全

    iphone开发控件大全,介绍常用控件的属性,方法,可以在开发过程中查阅

    应用源码仿Iphone风格翻页控件,源码及Jar包.zip

    这个“应用源码仿Iphone风格翻页控件,源码及Jar包.zip”压缩文件提供了一个实现类似Iphone翻页效果的Android控件,非常适合对Android界面设计和自定义控件感兴趣的开发者进行学习和研究。 首先,我们来深入理解...

    iphone开发控件的demo

    在iOS应用开发中,iPhone平台提供了丰富的用户界面控件,使得开发者可以构建出美观且功能齐全的应用。"iphone开发控件的demo"是专为初学者设计的学习资源,包含了多种常用控件的示例代码,帮助开发者快速掌握控件的...

    【应用】iPhone日历控件.zipIOS应用例子源码下载

    这个压缩包文件“【应用】iPhone日历控件.zip”包含了一个iOS应用示例,主要关注的是iPhone上的日历控件。这个源码实例对于学习和研究iOS开发,特别是日历功能的实现,是非常有价值的。无论是学生、个人开发者还是...

    Android-仿Iphone的日期控件

    这个控件的亮点在于其自定义性,开发者可以根据自己的需求定制界面和功能,使得应用程序在视觉上更加接近iOS风格。 Android系统原生提供了DatePicker控件,但它的设计风格和交互方式与iOS的日期选择器有所不同。在...

    Iphone控件Demo大全

    "Iphone控件Demo大全"提供了一系列实用的示例,旨在帮助新手快速熟悉并掌握iPhone应用开发中的常见控件。以下是对这些控件及其用法的详细讲解: 1. UIButton:按钮是iOS应用中最基础的交互元素,用于触发某些事件或...

    iPhone时间转轮控件

    下面将详细探讨iPhone时间转轮控件的相关知识点。 ### 1. UIPickerView介绍 `UIPickerView`是Apple iOS SDK中的一个组件,它允许用户通过滚动选择列表中的一个或多个值。这种控件通常用于日期和时间选择,但也常...

    模仿iphone 时间滚轮控件

    在Android开发中,为了使应用界面更具吸引力和用户体验,开发者经常需要模仿iOS的某些特性,例如iPhone的时间滚轮控件。这种控件以其流畅的滚动和直观的操作深受用户喜爱。本教程将详细介绍如何在Android中实现类似...

    Android 模仿iphone时间滚轮控件源码

    在这个场景下,"Android 模仿iphone时间滚轮控件源码"是一个很好的解决方案,它允许Android开发者在他们的应用中实现类似于iPhone的时间滚轮效果。这个小Demo不仅展示了如何创建这样的自定义控件,而且也证明了其在...

    iOS-Xcode制作静态库

    在iOS开发中,Xcode制作静态库是一种常见的技术实践,它可以帮助开发者封装代码,提高代码重用性,减少项目体积,提升应用性能。本篇将详细介绍如何使用Xcode创建和使用静态库。 首先,理解静态库的概念至关重要。...

    iPhone开发-控件的使用源代码

    总的来说,"iPhone开发-控件的使用源代码"是一个非常实用的学习资源,它涵盖了iOS开发中控件的基础用法和实际应用,对于初学者和有经验的开发者来说都是很好的参考资料。通过深入研究和实践,我们可以提升对iPhone...

Global site tag (gtag.js) - Google Analytics