UIScrollView 的基本用法

iPhone/iPad 中 UIScrollView 还是经常要用到的,这里作了一个使用它最简单的例子,一个 ScrollView 中放了三个 UIView。这三个 UIView 分别设置了不同的背景色,它们在 ScrollView 中可以一页一页的滚动。

这段代码放在 UIViewController 的 viewDidLoad 方法中执行的,请注意每个 Frame 和 ScrollView 的关键属性,如 contentSize。ScrollView 中按页滚动时每次走动一个 ScrollView 的宽度(横向时) 或高度(纵向时)。看下面两张图:

   

第一张图是 阅读全文 >>

iOS开发 frame 与 bounds 的区别与关系

frame和bounds是UIView中的两个属性(property)。

frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)

bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)

阅读全文 >>

Objective-C 设计模式之单例

作为设计模式中最简单的一个,单例模式还是在很多系统中都会用到,总有那么一些实例,从始至终只需要它的一个实例,而且任何时候都要总方便的得到,像 Application 对象啦,环境对像啊。

要保持你设计的类别人只会初始出一个实例来,像 Java/C++/C# 中的做法一般希望能保证以下那些:

1. 构造方法藏起来,private 修饰,这样只能通过统一的工厂方法获得实例,因为 new 出来的总是新对象
2. 克隆方法出来的对象仍然是原来的对象
3. 反序列化出的对象也仍然是原来那个唯一的对象(这好像有点难)
4. 一般程序运行期间,该单实例不被释放
5. 一般要求工厂方法是原子性的,也是避免返回了不同的实例
6. 等等................. 是否还有些补充?

不一定每一点都真正考虑到,因为不是每个使用都都那么变态或不存在某些使用场景。

而我们这里的 Objective-C 有其语言的较大特殊性,是通过 alloc 来创建实例的,无法把构造方法 alloc 隐藏起来,但我们总是有办法的,可以做到:

1. 工厂方法返回唯一的实例
2. 多次调用 alloc 构造出的实例与 工厂方法得到的是同一个
3. 让你释放不掉这个实例,引用计数不让归零 阅读全文 >>

Objective-C 的方法原型及重载和覆盖

前一篇是:Objective-C 的方法原型及重载,本篇呢在上面的话题稍进一步延伸,方法原型中方法的覆盖关系就较为密切的,所以再说下方法覆盖的话题。

由前面,我们知道,在 Objective-C 中方法原型的得来是这样的,假如方法声明是:

-/+ (返回类型) 方法名: (参数1类型) 形参1  参数2描述: (参数2类型) 形参2 参数3描述: (参数3类型) 形参3 .......

那么它的方法原型则是:

方法名: 参数2描述:参数3描述: .......

关键的是它与参数类型无关。

重载的时候我们应避免方法原型相同,而子父类间进行方法覆盖的时候我们又应该要保持一样的方法原型。

我们可以再一次感性认识一下 Objective-C 的方法原型,从 Xcode 中,当 Command + 鼠标悬停 在调用方法上时: 阅读全文 >>

Objective-C 的方法原型及重载

毫无疑问,Objective-C 也是一种面向对象语言,那么面向对象有三个基本特征(封装、继承、多态)。重载似乎与这三大特征没多大关系,方法覆盖才预示着多态。但重载还是与覆盖有一定的关联,它们都要求你能识别出方法的原型,这就引出方法原型与重载的关系。

Objective-C 与最常见的语言如,C++、C#、Java 在这方面是不同的,我们知道,Java、C++ 和 C# 识别方法原型是依据于方法名、参数个数、与参数类型这三要素决定,比如下面出自于一个类中的四个计算面积的方法,对于 Java、C++ 或 C#,它们是合法的:

float calculateArea()
float calculateArea(int width)
float calculateArea(float width)
float calculateArea(int width, int height)

因为它们的方法原型是不同的,分别是: 阅读全文 >>

如何使用 Core Plot 的 API 帮助文档

Core Plot 可是 iOS 下绝好的图表组件,虽说它的相关资料不甚丰富,特别是中文的,英文的还是有几篇不错的文章,不过 Core Plot 自身提供的 API 帮助文档,以及代码示例其实很有用的,不妨且在英文的(注意是英文的) Google 中输入 core plot, 即时搜索出的第一页里的链接很有价值的。

对于 Core Plot 中文资料的缺乏相信很快就会有改观的,譬如说不还有不少像敝人那样的工作者正努力着吗!

既然 Core Plot 为我们提供了文档,那我们就该好好利用好它内在的东西。都是在下载的 CorePlot_0.4.zip 解压后的 CorePlot_0.4 目录中的,Source/examples 下有周到的示例代码,Source/framework  中源代码; Documentation  中便是我们可以查阅的 Core Plot 的 API 帮助文档,有两种使用方式,导入到 Xcode 和浏览器阅读。 阅读全文 >>

iOS 使用 Core Plot 绘制统计图表入门

iOS(iPhone/iPad) 下图形组件有两个有名的,s7graphviewCore Plot,它们都是在 Google 上托管的代码,听说 Core Plot 比较强,因为前者仅支持曲线图,后者呢曲线图、饼图、柱状图等通吃,且较活跃。那就专注下 Core Plot 的使用。它提供了 Mac OS X 和 iOS 下的组件库,我只用到它的 iOS 图表库。

Core Plot 能画出来图表的效果应该多看看:http://code.google.com/p/core-plot/wiki/PlotExamples,相信看过之后绝大多数的 iOS 下的图表可以用它来满足你了。

配置其实很简单的,先从 http://code.google.com/p/core-plot/downloads/list 下载最新版的 Core Plot,比如当前是:CorePlot_0.4.zip,解压开,然后就两步:

1. 把目录 CorePlot_0.4/Binaries/iOS 中的 libCorePlotCocoaTouch.a 和整个子目录 CorePlotHeaders 从 Finder 中一并拖入到当前项目中,选择 Copy item into destination group's folder (if needed),Add to targets 里选上相应的 target。此时你可以在项目的 target 中 Build Phases 页里 Link Binary With Libraries 中看到有了 libCorePlot-CocoaTouch.a.

2. 再到相应 Target 的 Build Settings 页里,Other Linker Flags 项中加上 -ObjC -all_load 阅读全文 >>

TextMate 通用快捷键

对于 Unix 族下的文本编辑器,VI 功能稍弱,Emacs 的能力是没得说,但学习曲线太陡峭了,于是簇拥到 TextMate 旗下。快捷键能让你大大的提 升使用的效率,它可以让你的手尽量少在键盘与鼠标之间飘来飘去。相比于 Windows 平台,Mac 更推崇使用快捷键来操作,搭配着大大的触摸板后,鼠标真的就有点多余了。

这里列出的所谓通用快捷键是不怎么涉及那些 Bundle 中的特定的快捷键而言的,还有些是系统通用的快捷方式也会提到

1. mate 命令:

mate .      以当前目录启动一个项目
mate a.txt b.txt *.csv  afolder afolder/bfolder  指定文件、通配符的方式,或目录来启动一下项目

阅读全文 >>

TextMate 编辑 HTML 使用的快捷键记录

本篇是介绍来自于 HTML Bundle 的快捷键

1. 产生 HTML 注释 <!-- -->,用 command+/,这与多数 IDE    产生注释的方式是一样的。而要产生多行的注释就用 option+command+/,如:

<!--
    
-->

如果选择文本后按 command+/ 或 option+command+/ 的效果分别是:

<!-- should get
multi-line comments -->

<!--
should get
multi-line comments
-->

⇥ 表示 tab 键,例如应用代码片断的时候,如输入 head,后 tab 键,有多个同名片断时,数字选择就得到完整的代码版断。

2. 插入 html 标签, ctrl+shift+<, 即 Insert Open/Close Tag

输入 html,然后按 ctrl+shift+<,  变为 <html></html>
输入 a id="abc",选择上 a id="abc",就变为 <a id="abc"></a>

3. 包裹上标签,ctol+shift+w,即 Wrap Selection in Open/Close Tag,效果是:

直接按 ctrl+shift+< 和 ctrl+shift+w,的效果是一样的,得到 <p></p>,改前面 p 为 head,就变成 <head></head>
输入 hello 并选择上 hello,然后 ctrl+shift+w 就得到 <p>hello</p>,改前面的  p 为 div,就变成 <div>hello</div> 阅读全文 >>

Objective-C 中一些代码记录

1. 初始化一个空的数组

    NSMutableArray *array = [NSMutableArray arrayWithObjects:nil];
    
    //或者,这里的 Capacity 像 java 的 ArrayList 中的 Capacity
    //NSMutableArray ×array = [NSMutableArray arrayWithCapacity:5];
   
    MSLog(@"%i", [array count]);

如果用到了 alloc 的话,就必须自己处理好相应的 release 操作了,像:

    NSMutableArray *array = [[NSMutableArray alloc] init];
    NSMutableArray *array1 = [[NSMutableArray alloc] initWithCapacity:5];
    NSMutableArray *array2 = [[NSMutableArray alloc]initWithObjects:nil];

阅读全文 >>