感谢:http://nshipster.cn/ibinspectable-ibdesignable/
无论陈词滥调多少次,比起一个需要我们记住并且输入什么的界面来说,如果替换成我们能够看见并可控制的界面的话将会是巨大的进步。 Xcode 6 提供了这样一个替代,在旧技术上建立新的互动。在设计项目的时候建立一个自定义的界面使你可以配置自定义控制并将它们实时显示出来,用 IBInspectable 和 IBDesignable,这将成为可能。
IBInspectable
IBInspectable 属性提供了访问旧功能的新方式:用户自定义的运行时属性。从目前的身份检查器(identity inspector)中访问,这些属性在 Interface Builder 被整合到 Xcode 之前就可用了。他们提供了一个强有力的机制来配置一个 NIB,XIB,或者 storyboard 实例中的任何键值编码(key-value coded)属性:
虽然功能强大,运行时属性可能会使工作很繁琐。一个属性的关键字路径,类型和属性值需要在每个实例设置,没有任何自动完成或输入提示,这就需要前往文档或自定义子类的源代码仔细检查设置。 IBInspectable 属性彻底的解决了这个问题:在 Xcode 6,你现在可以指定任何属性作为可检查项并为你的自定义类建立了一个用户界面。
例如,在一个 UIView 子类里,这些属性用它们的值来更新背景层:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@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
}
} |
@interface RESideMenu : UIViewController <UIGestureRecognizerDelegate> #if __IPHONE_8_0 @property (strong, readwrite, nonatomic) IBInspectable NSString *contentViewStoryboardID; @property (strong, readwrite, nonatomic) IBInspectable NSString *leftMenuViewStoryboardID; @property (strong, readwrite, nonatomic) IBInspectable NSString *rightMenuViewStoryboardID; #endif @end
标有 @IBInspectable(或是 Objective-C 中的 IBInspectable),他们就可以很容易在 Interface Builder 的观察面板(inspector panel)里编辑。需要注意的是 Xcode 在这里做了更多的事,属性名称是从 camel- 转换为 title- 模式 并且相关的名称组合在一起:
因为可检查属性仅仅是用户定义的运行时属性顶部的接口,所以支持相同的类型列表:布尔,字符串和数字(即,NSNumber 或任何数值类型),以及 CGPoint、CGSize、CGRect、UIColor 和 NSRange,额外增加了 UIImage。
那些已经熟悉运行时属性的人将注意到在上面的例子中有一些问题。UIColor 是里面唯一支持色彩的类型,而不是原生支持视图 CALayer 的 CGColor。borderColor 会计算 UIColor 属性(通过运行时属性设置)并映射到该层需要的 CGColor。
让现有的类型可观察
内置的 Cocoa 类型如果在 Interface Builder 中的属性检查器中没有列出也可以通过扩展来使属性可视。如果你喜欢圆角,你一定会喜欢这个 UIView 扩展:
1
2
3
4
5
6
7
8
9
10
11
|
extension UIView { @IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
} |
变!你创建的任何 UIView 都将有一个可配置的边界半径。
IBDesignable
如果这还不够,IBDesignable 自定义视图也在 Xcode 6 中亮相了。当应用到 UIView 或 NSView 子类中的时候,@ IBDesignable 让 Interface Builder 知道它应该在画布上直接渲染视图。你会看到你的自定义视图在每次更改后不必编译并运行你的应用程序就会显示。
标记一个自定义视图为 IBDesignable,只需在类名前加上 @IBDesignable 的前缀(或是 Objective-C 里的 IB_DESIGNABLE 宏)。你的初始化、布置和绘制方法将被用来在画布上渲染你的自定义视图:
IB_DESIGNABLE @interface BackgroundColorView : NSView @property (nonatomic) IBInspectable NSColor *backgroundColor; @end
1
2
3
4
|
@IBDesignable class MyCustomView: UIView { ...
} |
从这个功能上节约的时间是不能被低估的。加上 IBInspectable 属性,一个设计师或开发人员可以轻松地调整自定义控件的呈现,以得到她想要的确切的结果。任何改变,无论是从代码或属性检查器中,都将立即呈现在画布上。
此外,任何问题都是可避开编译和运行整个程序来调试的。调试的方法很简单,只需在你的代码中设置一个断点,在 Interface Builder 中选择视图,并选择 Editor ? Debug Selected Views。
由于在 Interface Builder 中呈现自定义视图不会有应用程序的完整上下文,你可能需要生成模拟数据以便显示,例如一个默认用户头像图片或仿制的天气数据。有两种方法可以为这个特殊的上下文添加代码:
-
prepareForInterfaceBuilder():此方法与你代码的其余部分一起编译,但只有当视图正在准备在 Interface Builder 显示时执行。
-
TARGET_INTERFACE_BUILDER:#if TARGET_INTERFACE_BUILDER 预处理宏在 Objective-C 或 Swift 下都是工作的,它会视情况编译正确代码:
1
2
3
4
5
|
#if !TARGET_INTERFACE_BUILDER // this code will run in the app itself
#else // this code will execute only in IB
#endif |
IBCalculatorConstructorSet
把自定义 IBDesignable 视图和视图里的 IBInspectable 属性结合在一起,你能干点啥?作为一个例子,让我们更新老式经典 Apple folklore:在“Steve Jobs Roll Your Own Calculator Construction Set”,Xcode 6 的风格:
现在你差不多已经眼见为实了,那让我们来看看更多的图片吧。你用这些强大的新工具创造了什么?把你的 IBInspectable 或 IBDesignable 创作加上话题 #IBInspectable po 成一张图片,我们都可以看看还可以学到些什么。
测试代码:
https://github.com/WeHeartSwift/IBDesignable-Demo
相关推荐
IBInspectable 和 IBDesignable 的示例。 使用 XCode 6,无需重新启动应用程序即可构建自定义界面和设计。 CustomTextField(自定义 UITextField) clearButtonImage - 夹板按钮的设置图像 allCornersRadius - ...
3. **IBInspectable和IBDesignable**:为了增强实时渲染的功能,苹果引入了IBInspectable和IBDesignable这两个关键字。IBInspectable使得自定义的UI控件的属性可以在Storyboard中直接查看和编辑,而IBDesignable则...
当我们标记一个视图类为`@IBDesignable`,Xcode会在编译时尝试渲染该视图,展示在Storyboard或.xib中,这样我们就能在设计时看到实际的视图效果。这对于快速迭代设计和调试非常有帮助。 结合这两个特性,可以创建出...
UICheckbox 是一个控件,其设计看... 该控件使用 Xcode 6 的 IBInspectable 和 IBDesignable 属性,以便可以在设计时设置运行时属性,并且可以在界面构建器中绘制控件的实时预览,以便您在实际编译和运行您的应用程序。
**IBDesignable与IBInspectable深度解析** 在iOS开发中,我们常常追求更高的界面设计效率和灵活性,Apple为此引入了`IBDesignable`和`IBInspectable`特性,它们为Interface Builder(IB)带来了强大的自定义视图...
在iOS开发中,`IBInspectable` 和 `IBDesignable` 是两种非常强大的特性,它们能够极大地提高开发效率,使得开发者可以在Interface Builder(IB)中直接调整视图的属性和预览界面效果,而无需运行应用。`...
在 storyboard 中,只需将视图类型改为`TargetView`,然后通过IBInspectable或IBDesignable属性在Interface Builder中调整颜色。在代码中,你可以这样设置: ```objc TargetView *targetView = [[TargetView alloc]...
在iOS开发中,`IBDesignable`和`IBInspectable`是两种强大的工具,它们极大地提升了Xcode Interface Builder的效率和灵活性。这篇文档将详细介绍这两个特性,以及如何将Nib文件加载到Storyboard中,以便在设计阶段就...
然后,通过IBInspectable和IBDesignable属性,可以在 Interface Builder 中方便地调整单选按钮的外观和行为。 在"Radio Button With UIKit"这个压缩包中,可能包含了实现上述步骤的代码示例。你可以通过查看这些...
这些属性可以通过IBInspectable和IBDesignable进行标注,使得在Interface Builder中就能实时预览和调整。 学习和使用这个项目,开发者不仅可以掌握自定义UI组件的设计和实现,还能了解到如何利用UIKit进行高级的...
这通常通过公开相应的setter方法或者使用IBInspectable和IBDesignable属性来实现,使得开发者在Interface Builder中就能直观地调整视图的外观。 总的来说,"ios-YHMessageView.zip" 提供了一个方便的UI组件,帮助...
在Swift中,我们可以使用IBInspectable和IBDesignable属性来增强界面构建工具(如Storyboard或Interface Builder)的功能。这些属性允许我们在设计阶段就预览和调整自定义控件的属性,而无需编写额外的代码。在...
这可能通过设置可调整的属性或使用IBInspectable、IBDesignable实现,以方便在Interface Builder中预览。 5. **数值处理**:滑动控件通常需要处理数值范围和步进值,确保滑动过程中的数值变化符合预期。这涉及到`...
- 绑定主题属性:使用IBInspectable和IBDesignable,使得在Storyboard或Xib中可以直接绑定主题属性,实现界面的动态更新。 - 动态加载图片:根据当前主题加载相应的图片资源,可以使用imageNamed函数传入主题标识...
随着iOS 8的发布,Apple引入了IBInspectable和IBDesignable这两个新特性,极大地提升了开发者在Interface Builder中的设计效率。这篇内容将深入探讨如何结合DesignableMasonry,利用这些新特性在Xcode的Interface ...
`IBInspectable` 和 `IBDesignable` 是苹果在Xcode中引入的两个重要特性,它们大大增强了Interface Builder的功能,允许我们在故事板(Storyboard)中实时预览和调整自定义视图的属性,而无需运行应用。本Demo ...
支持UIView,NSView,IBDesignable,IBInspectable,多重嵌套和进一步的子类化。 目的 故事板和笔尖很棒。 但是它们倾向于以非常以视图控制器为中心的方式使用。 自定义视图子类的视图UI始终存在于其自己的笔尖中,...
Swift支持使用UIImage、UIColor以及Storyboard中的IBInspectable和IBDesignable特性来方便地在Interface Builder中预览和配置控件。 以上就是关于"swift-自定义色盘选择控件"的主要知识点。在实际项目中,开发者...
这些属性可以通过IBInspectable和IBDesignable在Interface Builder中直接配置,提升设计效率。 5. **布局管理**:为了适应不同屏幕尺寸和设备,我们可以使用Auto Layout来设置星星视图的约束,确保其在不同设备上都...