IB_DESIGNABLE 和 IBInspectable 的用法
我们经常会在用一些自定义 UIView 来完成一些特殊的UI效果,但是怎么让我自定义的 UIView 在 Storyboard 中预览和修改一些自定义参数呢。这就需要用到两个吊吊的东西。
- IB_DESIGNABLE让你的自定 UIView 可以在 IB 中预览。
- IBInspectable让你的自定义 UIView 的属性出现在 IB 中 Attributes inspector 。
自定义一个 UIView
我们先来自定义一个简单的 UIView,叫做 CircleView,顾名思义,可以显示一个圆形的 UIView。
我们想一下 CircleView 会有那些属性。
@interface CircleView : UIView
@property (nonatomic, assign) CGFloat lineWidth; // 圆形线条的宽度
@property (nonatomic, assign) CGFloat radius; // 圆形的半径
@property (nonatomic, strong) UIColor *color; // 绘制的颜色
@property (nonatomic, assign) BOOL fill; // 是否填充,是不是实心圆
@end有了这些属性我们开始绘制。
- (void)drawRect:(CGRect)rect {
    // 计算中心点
    CGFloat centerX = (self.bounds.size.width - self.bounds.origin.x) / 2;
    CGFloat centerY = (self.bounds.size.height - self.bounds.origin.y) / 2;
    UIBezierPath *path = [[UIBezierPath alloc] init];
    // 添加一个圆形
    [path addArcWithCenter:CGPointMake(centerX, centerY) radius:_radius startAngle:0 endAngle:360 clockwise:YES];
    // 设置线条宽度
    path.lineWidth = _lineWidth;
    // 设置线条颜色
    [_color setStroke];
    // 绘制线条
    [path stroke];
    if (_fill) {
        // 如果是实心圆,设置填充颜色
        [_color setFill];
        // 填充圆形
        [path fill];
    }
}OK,一个简单的圆形 UIView 就搞定了,现在我们想在 IB 中使用这个 CircleView,打开一个 Storyboard,拖一个 UIView 上去,然后设置 UIView 的 Class 为我们自定义的 CircleView。
 
 
这时候我们是看不到预览效果的。
 
IB_DESIGNABLE
想要在 IB 中预览,只需要在自定义的 UIView 加上 IB_DESIGNABLE 修饰即可。
IB_DESIGNABLE
@interface CircleView : UIView
...
@end之后再回到 Storyboard 中,会重新 building 一下,就可以看到预览效果啦。
 
当然需要设置 CircleView 的几个属性,上面代码中我并有写默认值,所以是什么都看不到的,默认值自己设置一下就好我就不贴代码。能预览了之后,下一步就是怎么在 Storyboard 中直接修改 CircleView 的属性,半径、颜色之类的。
IBInspectable
还记得上面我们定义的 CircleView 的几个属性吧,只要我们能在 Storyboard 中修改这几个属性值,那么 CircleView 就会绘制出我们想要的效果。我们只需要属性声明的时候加上 IBInspectable 修饰,Xcode 会自动添加到 Storyboard 中 Attributes inspector 栏目中。
@property (nonatomic, assign) IBInspectable CGFloat lineWidth;
@property (nonatomic, assign) IBInspectable CGFloat radius;
@property (nonatomic, strong) IBInspectable UIColor *color;
@property (nonatomic, assign) IBInspectable BOOL fill;OK,再回到 Storyboard 中,building 之后,选中我们的 UIView 元素,在右边切换到 Attributes inspector 栏目,就可以在顶部看到我们自定义的属性。
 
Xcode 会根据不同的数据类型提供不同的输入框,我们可以随意修改属性,就可以看到预览效果。
 
 
 
 
原文链接:http://www.jianshu.com/p/64931d040692
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
IB_DESIGNABLE 和 IBInspectable 的用法的更多相关文章
- iOS 内存管理-copy、 retain、 assign 、readonly 、 readwrite、nonatomic、@property、@synthesize、@dynamic、IB_DESIGNABLE 、 IBInspectable、IBOutletCollection
		浅谈iOS内存管理机制 alloc,retain,copy,release,autorelease 1)使用@property配合@synthesize可以让编译器自动实现getter/setter方 ... 
- iOS 资源大全
		这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ... 
- 【推荐】iOS带有加载网络图片进度的UIImageView
		UCZProgressView 是一个带有通用的圆形图片进度下载控件.动画效果不错 特性 Customizable indicator (line width, radius, and color) ... 
- IOS中文版资源库
		Swift 语言写成的项目会被标记为 ★ ,AppleWatch 的项目则会被标记为 ▲. [转自]https://github.com/jobbole/awesome-ios-cn#librari ... 
- iOS 资源大全整理
		这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ... 
- iOS-Storyboad动态刷新
		iOS-Storyboad动态刷新 什么叫做Storyboard动态刷新 在项目开发中,如果可以在xib(storyboard)中,动态显示运行效果图,那么实在是太爽了.在Xcode 6之后就为我们提 ... 
- [翻译] UCZProgressView
		UCZProgressView UCZProgressView is a circular progress indicator with cool animations for image load ... 
- iOS - 创建可以在 InterfaceBuilder 中实时预览的自定义控件
		一.需求实现一个前后带图标的输入框 这是一个简单的自定义控件,很容易想到自定义一个视图(UIView),然后前后的图标使用 UIImageView 或者 UIButton 显示,中间放一个 UITex ... 
- 关于IB_DESIGNABLE / IBInspectable的那些事
		前言 IB_DESIGNABLE / IBInspectable 这两个关键字是在WWDC 2014年”What’s New in Interface Builder”这个Session里面,用Swi ... 
随机推荐
- 51nod 1572 宝岛地图
			题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 勇敢的水手们到达了一个小岛,在这个小岛上,曾经有海盗在这里埋下了一些宝藏.然而,我 ... 
- 解决nginx  bind() to 0.0.0.0:80 failed 问题
			nginx的配置文件一开始默认是80端口,出现这个错误多半是80端口已经被占用.这时候只需要把 server { listen 8088; server_name localhost lcsf.com ... 
- js生成指定范围内随机数
			其现方法的核心是JavaScript的Math对象.代码如下: <!DOCTYPE html> <html lang="en"> <head> ... 
- C09 指针
			目录 指针相关概念 指针变量 null指针 指针的算术运算 指针数组 指向指针的指针 传递指针给函数 从函数返回指针 指针相关概念 变量 如果在程序中定义了一个变量,在对程序进行编译时,系统就会为这个 ... 
- 面向对象OO第一单元三次作业总结
			(一)第一单元的作业围绕着多项式的求导,从简单到复杂,主要的要求是 作业一:只有两种格式的因子:带符号整数(+02)和幂函数(x^+02). 作业二:在作业一的基础上添加了:sin(x)和cos(x) ... 
- PAT (Basic Level) Practise (中文)- 1014. 福尔摩斯的约会 (20)
			http://www.patest.cn/contests/pat-b-practise/1014 1014. 福尔摩斯的约会 (20) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 ... 
- VMware9虚拟机安装MAC OS X Mountain Lion 10.8.2详细图文教程
			VMware虚拟机安装Mac OS X Mountain Lion 10.8.2所需文件:1.Vmware 9.01版下载:点击进入2.Vmware 9.01版汉化文件:点击进入3.VMware Wo ... 
- python @staticmethod和@classmethod
			Python其实有3个方法,即 静态方法 (staticmethod), 类方法 (classmethod)和 实例方法. 如下: def foo(x): print "executing ... 
- Java微信公众号开发----定时获取access_token并保存到redis中
			本人原本是想做微信公众号菜单的创建修改删除等操作的,但是发现需要access_token,通过阅读文档,发现文档要求有以下几点: 1.access_token 获取后有效期是2小时 2.access_ ... 
- NOIP模拟赛 经营与开发 小奇挖矿
			[题目描述] 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXplore(探索) eXpand(拓张与发展) eXploit(经营与开发 ... 
