iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新
来源:互联网 发布:翻唱好听的网络女歌手 编辑:程序博客网 时间:2024/06/12 12:06
前言:
在做应用的UI设计的时候,如果属性能够在Interface Builder的图形化界面进行设置,并且动态的预览到效果,那样无疑会大大提高应用的开发效率。而XCode为我们提供了这样的一种方式,就是使用IBInspectable和IB_DESIGNABLE
如图
User Defined Rumtime Attributes
通过User Defined Rumtime Attributes可以在Interface Builder中,设置一些KVC属性的值。例如
设置圆角为50
这样,在运行模拟器,会有如下效果
不过,这样做有明显的弊端
不容易调试和后期维护
IB_DESIGNABLE
IB_DESIGNABLE的宏的功能就是让XCode动态渲染出该类图形化界面。
使用方式,把该宏加在自定义类的前面
<code
class
=
"hljs"
objectivec=
""
>#
import
<uikit uikit.h=
""
>
IB_DESIGNABLE
@interface
IBDesigbableImageview : UIImageView
@end
</uikit></code>
然后,再设置imageview为继承类,并且设置圆角
可以看到,storyboard上的imageview动态刷新了
IBInspectable
让支持KVC的属性能够在Attribute Inspector中配置。
不熟悉KVC的童鞋可以看看我这篇文章
ios SDK详解之KVC
添加属性以及Set方法即可,如果是现有类,使用Category
例如为imageView的继承类设置cornerRadius
头文件添加属性
<code
class
=
"hljs"
objectivec=
""
>
@property
(nonatomic) IBInspectable CGFloat cornerRadius;
</code>
.m文件实现对应set的方法
<code
class
=
"hljs"
objectivec=
""
>-(
void
)setCornerRadius:(CGFloat)cornerRadius{
_cornerRadius = cornerRadius;
self.layer.cornerRadius = cornerRadius;
self.layer.masksToBounds = cornerRadius >
0
?
true
:
false
;
}</code>
这样,在Attribute Inspector就会多出一个配置选项
通过设置这个选项,就可以设置layer的圆角了。
每次设置圆角,都会在Identity Inspector中改变一个rumtime的KVC变量
不过,现在仍然不能动态刷新
通过IB_DESIGNABLE配合IBInspectable可以实现动态刷新
实现方式很简单,就是在自定义类的头文件处加上这个宏定义即可。然后把对应的类设置为自定义的类。
.h文件
<code
class
=
"hljs"
objectivec=
""
>#
import
<uikit uikit.h=
""
>
IB_DESIGNABLE
@interface
IBDesigbableImageview : UIImageView
@property
(nonatomic) IBInspectable CGFloat cornerRadius;
@end
</uikit></code>
.m文件
<code
class
=
"hljs"
objectivec=
""
>#
import
IBDesigbableImageview.h
@implementation
IBDesigbableImageview
-(
void
)setCornerRadius:(CGFloat)cornerRadius{
_cornerRadius = cornerRadius;
self.layer.cornerRadius = cornerRadius;
self.layer.masksToBounds = cornerRadius >
0
?
true
:
false
;
}
@end
</code>
效果就是最开始的Demo
如果不能动态刷新,重启XCode,如果还不能刷新,如下图RefreshingAllViews,建议开启Automatically Refresh Views
- iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新
- iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新
- iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新
- iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新(自定义控件)
- IBInspectable 和IB_DESIGNABLE动态刷新IB
- iOS IBInspectable和IB_DESIGNABLE
- iOS-Storyboad动态刷新
- iOS-Storyboad动态刷新
- iOS_利用IBInspectable与IB_DESIGNABLE实现自定义类在Storyboad并动态展示设置效果
- iOS 神奇的IB_DESIGNABLE和IBInspectable
- IB_DESIGNABLE和IBInspectable
- IB_DESIGNABLE和IBInspectable应用
- IBInspectable和IB_DESIGNABLE
- IB_DESIGNABLE 和 IBInspectable
- iOS进阶之巧用IBInspectable属性和IB_DESIGNABLE宏定义
- iOS学习笔记:神奇的IB_DESIGNABLE和IBInspectable
- 神奇的IB_DESIGNABLE和IBInspectable
- 神奇的IB_DESIGNABLE和IBInspectable
- ARM体系结构与编程 阅读笔记P207
- linux进程的用户ID
- Dynamics CRM 2015 Update 1 系列(3): API的那些事 - Old APIs VS New APIs
- 动态规划之行李打包问题
- window中使用ftp连接linux
- iOS SDK详解之IBInspectable和IB_DESIGNABLE-Storyboad动态刷新
- 转换器的一些性能指标
- sed 指定行范围匹配
- [华为机试练习题]51.数列求和
- uedit学习小结
- 寻找一个图中独立子图的个数
- linux的hostname修改详解
- linux 下使用cobber 批量安装系统
- 《Visual Studio 程序员箴言》读书笔记