如何让自定义 UIView 支持 XIB

当我们拖拽一个 view 到 XIB 上,然后设置 view 属性的时候有没有想到让自己定义的 view 也支持通过 XIB 设置属性,甚至还能实时渲染。

过去相关接口是不开放的,但是从 XCode6 开始,我们也可以定义像系统控件一样支持在 XIB 视图下设置属性并能实时渲染的控件了。

Read More

通过 XIB 加载 UIView

在项目中有些 view 需要独立做成一个组件,供多个 VC 使用,而且本人项目中习惯使用 XIB,所以这个 view 的组件也希望使用 XIB 来实现。但是当我们创建 UIView 的时候默认是不包含 XIB 文件的,这就需要再创建一个同名的 XIB 文件。但是如何把 XIB 和 UIview 关联起来呢。

通常我们通过代码加载 XIB 的方法是:

+(id)viewFromNibNamed:(NSString*)nibName owner:(id)owner{
NSArray* nibView = [[NSBundle mainBundle] loadNibNamed:nibName owner:owner options:nil];
return [nibView firstObject];
}

Read More

使用xib加载View的小技巧

本人在开发中比较喜欢用 xib 来作布局,通常情况下,我们需要把一些常用的 view 封装成组件来供大伙儿使用。但是这个组件一般只是负责 view 层的展示任务,事件相关的业务逻辑需要转发到相应的 controller 里面去。这里介绍一下本人使用的一种方法。

直接上代码

Read More

浅析frame与bounds

UIView 有两个属性,frame 与 bounds。我们所熟知的是 bounds 其实就是 x,y 均为0的 frame。但是你是否有过这样的疑问:

  • 既然 bounds 就是 x,y 均为0的 frame,那为什么还要有 bounds 这个属性的存在,直接使用 frame 不就好了么。
  • 既然 bounds 的 x,y,均为0,那为什么 bounds 还是 CGRect 类型,直接是 CGSize 类型不就好了么。

针对问题一,我们给出的答案是,frame 是描述当前 view 相对于父 view 的坐标系的位置关系,而 bounds 是描述当前 view 相对于自己的坐标系的位置关系。这两个属性所描述的东西不同所以都有存在的意义,而且这也很好的解释了为什么 bounds 的 x,y 值始终为0。

那么对于为题二,既然 bounds 是 CGRect 类型的,那么就表示其 x,y 属性都是有意义的。那么我们就来看一下 bounds 的 x,y 属性的意义究竟是什么

Read More