视图和窗口展示了应用的用户界面,同时负责界面的交互。UIKit和其他系统框架提供了很多视图,你可以就地使用而几乎不需要修改。当你需要展示的内容与标准视图允许的有很大的差别时,你也可以定义自己的视图。 阅读全文 >>
Author: Yanbin
几个 CGRect 函数例子
CocoaChina 会员“”分享的几个 CGRect 函数例子,希望对您的苹果开发有所帮助
1.CGRectOffset使用从源CGRect偏移的原点来创建矩形
float offset = 25.0;
CGRect r1 = CGRectMake(100, 100, 100, 100);
CGRect r2 = CGRectOffset(r1, offset, offset);
2.CGRectIntersectsRect允许我们确定两个矩形是否相交
float offset = 25.0;
CGRect r1 = CGRectMake(100, 100, 100, 100);
CGRect r2 = CGRectMake(150, 150, 100, 100);
if (CGRectIntersectsRect(r1, r2)) 阅读全文 >>
WordPress 3.2.1 不能保存 Widget 设置
WordPress 升级到 3.2.1 之后,反正有好长一段时间是不能在 Widgets 中,如左边栏或右边栏中增加 Widget 了。因为现在的工作与 WordPress 本身相去较远些,所以未能修改 Widget 几个月了也没去钻研是怎么回事。现象呢就是:既不能增加新的 Widget,也无法移除原有的 Widget,移动位置也是不行的。界面上是允许操作的,在你操作完后,保存完,页面一刷新又变成原样,就是说服务器无法保存你对 Widget 所做的修改,好像只一点是例如,仅仅可以更改已有 Widget 的标题。
想来 WordPress 3.2.1 肯定不会出现这样的低有错误的,必定是哪理冲突了。Google 后找到一篇类似问题的贴子 Can't edit and save saidebar widgets with WordPress 3.2.1,其中有介绍可能是哪个插件或主题引起的问题,有建议说把所有插件关了又启用,看问题是否依然,或使用默认主题看是否无问题。耐心的去试,总能查到罪魁祸首的。 阅读全文 >>
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在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)
1 2 3 |
-(CGRect)frame{ return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height); } |
1 2 3 |
-(CGRect)bounds{ return CGRectMake(0,0,self.frame.size.width,self.frame.size.height); } |
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) 下图形组件有两个有名的,s7graphview 和 Core 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 阅读全文 >>