swift 第十四课 可视化view: @IBDesignable 、@IBInspectable
以前应objctiew-c 写项目的时候,就知道有这两个关键字,现在用swift了。用法稍作改变,基本用法还是一致的
虽然使用这个之后,有时候会报错的非常的莫名其妙----(其实还是自己技术不够牛……)
先把可能的报错,解决方法链接附上:
http://stackoverflow.com/questions/27374330/ibdesignable-error-ib-designables-failed-to-update-auto-layout-status-interf
http://www.jianshu.com/p/a5351d270ac1
这样咱们就开始啦啦……
先附上demo 的运行效果:::::

这两个视图,都是xib 创建的,绿色的是代码 init frame ,黄色边框的是 init coder……

既然demo 都做出来了,现在开始记录步骤:::::::::::::
显示 demo view 的步骤:
1.newfile 一个 继承于UIView 的class ---- DemoView
2.newfile 一个 xib view 名字改为 ---- DemoView
3.这一步很重要 贴个图给解释 ,这样应该会更直观

顺便贴上 demoview 的代码 和 viewcontroller的调用代码,好了 T T
import UIKit
class DemoView: UIView {
@IBOutlet var contentView: UIView!
var borderWidth :CGFloat = {
didSet{
self.layer.borderWidth = borderWidth
}
}
var borderColor :UIColor?{
didSet{
self.layer.borderColor = borderColor?.cgColor
}
}
var cornerRadius :CGFloat = {
didSet{
self.layer.cornerRadius = cornerRadius
}
}
override init(frame: CGRect) {
super.init(frame: frame)
initialFromXib()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func initialFromXib(){
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "DemoView", bundle: bundle)
contentView = nib.instantiate(withOwner: self, options: nil)[] as! UIView
contentView.frame = bounds
addSubview(contentView)
}
}
调用方法的代码::::::
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
addDemoView()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
/*
init frame 方式加载xib view
*/
func addDemoView() {
let demoview = DemoView.init(frame: CGRect(x:,y:,width:,height:))
self.view.addSubview(demoview)
demoview.borderColor = UIColor.green
demoview.borderWidth =
demoview.cornerRadius =
}
}
如果做到这里,那么这个基础的xib view 就已经可以使用了,
当然,现在还没有进入这个博客的主题,现在公布,可在storyboard 实时更新的xib view(这个xib view 必须继承UIView)
xib view 的实现步骤::::
1.newfile 一个 继承于UIView 的class ----XibView
2.newfile 一个 xib view 名字改为 ---- XibView
3.同样给张图

途中都可以看到,我使用了@IBDesignable 、@IBInspectable 这两个关键字,
那么 在storyboard 中怎么看@IBInspectable修饰的属性呢

文字都在代码中注释看吧 666
import UIKit /**
@IBDesignable 加入这个关键字说明:这个类(这个类必须是UIView或者NSView的子类)可以被 xib 或者 storybord 检测到
*/
@IBDesignable class XibView: UIView { @IBOutlet var contentView: UIView!
/**
@IBInspectable 加入这个属性说明:这个属性可以 被xib 或者 storybord 检测到
但是要重写这个属性的set 方法
*/
@IBInspectable var borderWidth: CGFloat = {
didSet {
layer.borderWidth = borderWidth
}
} @IBInspectable var cornerRadius :CGFloat = {
didSet{
// layer.cornerRadius = cornerRadius
self.contentView.layer.cornerRadius = cornerRadius
}
} @IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.cgColor
}
} override init(frame: CGRect) {
super.init(frame: frame)
initialFromXib()
} required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialFromXib()
} func initialFromXib(){ let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "XibView", bundle: bundle)
contentView = nib.instantiate(withOwner: self, options: nil)[] as! UIView
contentView.frame = bounds
addSubview(contentView)
}
}
最后 写上自己莫名其妙的一个问题,发泄自己的小抱怨
Failed to update auto layout status: The agent crashed / Failed to render instance of XXXXXXX: The agent crashed
刚刚开始写完的时候出现这个错误,把xcode 关闭,重新打开后,报错神奇般的消失了,没有给了理由--(问谁说理……)
swift 第十四课 可视化view: @IBDesignable 、@IBInspectable的更多相关文章
- Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗、嗅探、dns欺骗、session劫持
Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗.嗅探.dns欺骗.session劫持 文/玄魂 目录 Kali Linux Web 渗透测试—第十四课-arp欺骗.嗅探.dns欺 ...
- NeHe OpenGL教程 第四十四课:3D光晕
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第三十四课:地形
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第二十四课:扩展
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第十四课:图形字体
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- webgl(three.js)实现室内三维定位,3D定位,3D楼宇bim、实时定位三维可视化解决方案——第十四课(定位升级版)
序: 还是要抽出时间看书的,迷上了豆豆的作品,最近在看<天幕红尘>,书中主人公的人生价值观以及修为都是让我惊为叹止.很想成为那样的人,但是再看看自己每天干的事,与时间的支配情况,真是十分的 ...
- 斯坦福第十四课:降维(Dimensionality Reduction)
14.1 动机一:数据压缩 14.2 动机二:数据可视化 14.3 主成分分析问题 14.4 主成分分析算法 14.5 选择主成分的数量 14.6 重建的压缩表示 14.7 主成分分析法 ...
- 第四十四课:jQuery UI和jQuery easy UI
jQuery UI是jQuery官方提供的功能效果和UI样式.作为官方出的东西,它一直没有被人们看重,一是它没有datagrid,tree等UI库必备的东西,二是它修改太过频繁,体积庞大.其实它所有以 ...
- 第三十四课:jQuery Deferred详解2
上一课主要分析了jQuery1.51版本的jQuery Deferred.在jQuery1.6中,jQuery Deferred添加了两个方法,always,pipe. always用来添加回调,无论 ...
随机推荐
- SEO 统计算法
1)简单粗暴型的,这里不用去管浏览器的user-agent,不管cookie等信息,每产生一次PV,就直接计数,优点:简单,缺点:可能不真实,也可能有刷量数据 2) 稍微细腻点的统计,会区分新老用户, ...
- Redis单实例数据迁移到集群
环境说明 单机redis redis集群 192.168.41.101:7000 master 192.168.41.101:7001 master 192.168.41.102:7000 maste ...
- 【安卓基础】使用Guideline与约束辅助布局的平分空间设计
ConstraintLayout布局已经推出了很长一段时间,功能也是比较强大,能有效减少界面的视图层级嵌套,一定程度提升界面绘制效率. 在项目中,我也是最近才选择开始使用ConstraintLayou ...
- 【题解】[Nwerc 2006]escape -C++
Description 给出数字N(1<=N<=10000),X(1<=x<=1000),Y(1<=Y<=1000),代表有N个敌人分布一个X行Y列的矩阵上 矩形的 ...
- Public model for matrix
以下是可以加减乘除(就是乘逆矩阵啦)以及求若干次幂.行列式和逆的矩阵模板. 欢迎大家指正其中可能存在的错误(只验证了求逆的正确性). 顺便提一下这种复杂度低于定义式求逆的方法,来自于我的高等代数书,思 ...
- Bzoj 3631: [JLOI2014]松鼠的新家(树链剖分+线段树)
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MB Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个 ...
- MySQL 跨版本主从复制时报错:ERROR 1794 (HY000): Slave is not configured or failed to initialize properly.
背景: zabbix 数据库迁移,搭建主从,主是5.6.25,从是5.7.15,流式备份应用 redo.log 之后,change master 和reset slave 时报出如下错误 mysql& ...
- MySQL数据分析-(6)数据库设计之规范化
大家好,我是jacky,很高兴继续跟大家学习MySQL数据分析这门课,上次课我们介绍了E-R图,我们要给手机销售公司设计数据库,那么同一个项目,10个设计人员可能设计出10种不同的E-R图:因为不同的 ...
- 初次接触webpack
1.学习地址 中文文档 https://www.webpackjs.com/concepts/ webpack-dev-server配置说明 https://www.webpackjs.com/con ...
- CF1208A
CF1208A 题意: 就是把斐波那契数列的+改成异或,求第n项的值. 解法: 又是一个人类智慧题,打表找规律. 可以发现答案在 $ a,b,a⊕b $ 三个数中循环 CODE: #include&l ...