@IBDesignable
只要写在自定义的UIView的文件里面就好了!
这个关键字,可以将自定义的UIView绘制在storyBoard上面,也就是说在还没有运行时候,在SB上就显示出来。
@IBInspectable
在自定义UIView的某些属性前面写上这个关键字,那么这些属性就会出现在SB的Inspector面板上,可以随时调整。
viewCOntroller的工作,就是为view解释model
扩展:
1.加入到扩展的必须是以前没有的属性,方法,或者类。因为扩展不能用来覆盖以前的东西。
2. 加入的属性必须是计算属性,不能为存储属性
3. 扩展主要是用来写一些helper的函数,用来将功能进行分类,并增强代码的可读性
协议:
1. 是用来简化API的,因为我们不想直接拿到一个类的所有方法,我只需要你一部分的API
2. 协议是一个数据类型,所以协议可以成为函数的参数,赋值一个变量等
3. 仅用来申明变量和方法,并不实现他们
4.继承协议的类的init()方法前面必须加required关键字
代理:
1.代理用于view和controller之间,代理描述了这个view需要别人(controller)帮它做的事情。
2. 在view中创建一个代理属性,并且这个属性的数据类型 = 你的代理协议
3. 用这个代理属性在view里面去做view不能控制的事情,例如;通过代理属性来获取数据
4.controller实现协议,并成为view的代理
注意:这里的协议后面一定要:class 这样就表示协议只能被class实现,否则下面创建代理属性时,用weak会报错。
下面这句话就是让代理给view数据
cmd+shift+o 通过文件名快速查找文件
这里的happiness是model,它向viewController提供数据,然后当数据发生变化,viewcontroller就让faceview去重绘。
那么当faceview重绘的时候,faceview就问他的代理(controller)要数据,controller就通过smilenessForFaceView方法给view解析model的数据,然后返回view想要的数据。
也就是说:smilenessForFaceView这个方法是faceview来决定什么时候调用的。