使用IBInspectable和IBDesignable实现实时预览

简介:

Xcode6提供了这样一个激动人心的feature,在设计项目的时候建立一个自定义的界面来使你可以配置自定义的属性并控制它们实时显示出来,用IBInspectable和IBDesignable来完成。

IBInspectable

IBInspectable 属性提供了访问旧功能的新方式:用户自定义的运行时属性。从目前的身份检查器(identity inspector)中访问,这些属性在 Interface Builder 被整合到 Xcode 之前就可用了。他们提供了一个强有力的机制来配置一个 NIB,XIB,或者 storyboard 实例中的任何键值编码(key-value coded)属性

keyPath.png

虽然功能强大,运行时属性可能会使工作很繁琐。一个属性的关键字路径,类型和属性值需要在每个实例设置,没有任何自动完成或输入提示,这就需要前往文档或自定义子类的源代码仔细检查设置。 IBInspectable 属性彻底的解决了这个问题:在 Xcode 6,你现在可以指定任何属性作为可检查项并为你的自定义类建立了一个用户界面。

如果我们想要单纯的让项目中的view都改变某个样式,并且可以在inspect中显示出来,但是storyboard并不会实时更新的话,扩展UIView,重写属性即可。

1
2
3
4
5
6
7
8
9
10
11
12
MARK: - 扩展UIView,能出现在inspect栏里
extension UIView {
@IBInspectable var cornalRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
}

可检查属性仅仅是用户定义的运行时属性顶部的接口,所以支持相同的类型列表:布尔,字符串和数字(即,NSNumber 或任何数值类型),以及 CGPoint、CGSize、CGRect、UIColor 和 NSRange,额外增加了 UIImage。

这样所有view都可以改变圆角半径了。

但是我们想实时预览,并且可以指定某个view改变,就要用到IBDesignable

IBDesignable

如果这还不够,IBDesignable 自定义视图也在 Xcode 6 中亮相了。当应用到 UIView 或 NSView 子类中的时候,@ IBDesignable 让 Interface Builder 知道它应该在画布上直接渲染视图。你会看到你的自定义视图在每次更改后不必编译并运行你的应用程序就会显示。

标记一个自定义视图为 IBDesignable,只需在类名前加上 @IBDesignable 的前缀(或是 Objective-C 里的 IB_DESIGNABLE 宏)。你的初始化、布置和绘制方法将被用来在画布上渲染你的自定义视图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import UIKit

/// 实时渲染自定义类
@IBDesignable
class RoundImageView: UIImageView {

/// 自定义圆角半径
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet{
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}

/// 自定义边框宽度
@IBInspectable var borderWidth: CGFloat = 0 {
didSet{
layer.borderWidth = borderWidth
}
}

/// 自定义边框颜色
@IBInspectable var borderColor: UIColor? {
didSet{
layer.borderColor = borderColor?.CGColor
}
}
}

写完后,切回storyboard,点击show the identity inspector,选中要改变属性的view,指定它的Class为自定义的Class,接着会看到designables updating

update.png

最后的效果如下图所示:

roundImage.png

IBCalculatorConstructorSet

把自定义 IBDesignable 视图和视图里的 IBInspectable 属性结合在一起,你能干点啥?作为一个例子,让我们更新老式经典 Apple folklore:在“Steve Jobs Roll Your Own Calculator Construction Set”,Xcode 6 的风格:

calculator.gif

目录
相关文章
|
3月前
uniapp点击图片预览功能?
uniapp点击图片预览功能?
|
7月前
|
存储
uniapp全选功能制作
uniapp全选功能制作
47 0
|
1月前
|
API
uniapp点击图片放大预览
uniapp点击图片放大预览
16 0
|
7月前
|
小程序
uniapp悬浮图标支持拖动支持微信小程序
uniapp悬浮图标支持拖动支持微信小程序
|
7月前
|
小程序
【uniapp】视频分享预览小程序
【uniapp】视频分享预览小程序
|
9月前
|
索引
markdown 编辑器实现双屏同步滚动
markdown 编辑器实现双屏同步滚动
113 0
|
10月前
|
小程序
微信小程序实用工具——渐变色按钮(一)
微信小程序实用工具——渐变色按钮(一)
|
10月前
|
小程序
微信小程序实用工具——渐变色按钮(二)
微信小程序实用工具——渐变色按钮(二)
|
前端开发 JavaScript IDE
HBuilderX|前端编辑器
HBuilderX|前端编辑器
487 0
|
存储 移动开发 JSON
如何实现H5可视化编辑器的实时预览和真机扫码预览功能
所见即所得的设计理念在WEB IDE领域里一直是备受瞩目的功能亮点, 也能极大的提高** web coder的编程体验和编程效率. 笔者接下来就将对H5可视化编辑器的实时预览和真机扫码预览**功能做一次方案剖析, 为大家在设计类似产品的时候提供一些思路. 我们还是基于笔者开发的 H5-Dooring可视化编辑器作为案例来分析上述功能实现.
322 0

热门文章

最新文章