原文:How to make awesome UI components in iOS 8 using Swift and XCode 6 (原文作者Andrei Puni )   
苹果在Xcode 6中加入了两个新的Interface Builder(下文用IB简称)属性声明:IBInspectable和IBDesignable。IBInspectable在IB的Attribute Inspector(属性检查器)中查看类的属性,而IBDesignable能实时更新视图,很厉害吧!
这里用一个简短的[视频教程](得爬墙哦!)说明下怎样使用IBInspectable和IBDesignable。10分钟就能看完所有的步骤。代码在[github]
IBInspectable
以下是我发现的适用于IBInspectable的类型:
下面这些数据都对IBInspectable有效:
Int
CGFloat
Double
String
Bool
CGPoint
CGSize
CGRect
UIColor
UIImage
举个小栗子

  1. class OverCustomizableView : UIView {
  2. @IBInspectable var integer: Int = 0
  3. @IBInspectable var float: CGFloat = 0
  4. @IBInspectable var double: Double = 0
  5. @IBInspectable var point: CGPoint = CGPointZero
  6. @IBInspectable var size: CGSize = CGSizeZero
  7. @IBInspectable var customFrame: CGRect = CGRectZero
  8. @IBInspectable var color: UIColor = UIColor.clearColor()
  9. @IBInspectable var string: String = "We ? Swift"
  10. @IBInspectable var bool: Bool = false
  11. }
在属性检查器的上面是这样:
这一切添加了一些用户定义的运行时属性,这些属性将会在view加载时设置它的初始值。
运行时属性的创建:
IBDesignable
来看个好玩的地方。IBDesignable告诉IB它可以加载并渲染视图。这个视图类必须在一个框架里面才能正常工作。不过这种方式也不会太麻烦,我们下面会看到方法。 我认为IB是隐式地将UIView的代码转换成NSView的代码,这样就能动态地加载框架并渲染组件。
创建新工程
打开Xcode6,创建一个新的“Single Page Application” (单页面应用)并选择Swift作为编程语言。
添加新的Target
在导航选中工程文件点击“+”按钮添加新的target
选择Framework & Application Library和choose the Cocoa Touch Framework,如图
命名为MyCustomView。Xcode会自动链接MyCustomView.framework到你的工程。
 
创建自定义视图类
创建一个新的swift文件,并添加到MyCustomView框架里。
右键单击框架的目录。
选择Cocoa Touch文件
给它命名为CustomView,作为UIView的子视图
CustomView.swift文件里包含:

  1. import UIKit
  2. class CustomView: UIView {
  3. init(frame: CGRect) {
  4. super.init(frame: frame)
  5. // Initialization code
  6. }
  7. }
移除生成的方法。

  1. import UIKit
  2. class CustomView: UIView {
  3. }
告诉Xcode用@IBDesignable 关键字来渲染你的视图。
添加三个属性:borderColor: UIColor, borderWidth: CGFloat以及cornerRadius: CGFloat。
设置默认值,并让它们是可检验的:

  1. @IBDesignable class CustomView : UIView {
  2. @IBInspectable var borderColor: UIColor = UIColor.clearColor()
  3. @IBInspectable var borderWidth: CGFloat = 0
  4. @IBInspectable var cornerRadius: CGFloat = 0
  5. }
为视图层属性添加逻辑
为每个属性添加[property observers](观察者属性),并根据layer更新。

  1. class CustomView : UIView {
  2. @IBInspectable var borderColor: UIColor = UIColor.clearColor() {
  3. didSet {
  4. layer.borderColor = borderColor.CGColor
  5. }
  6. }
  7. @IBInspectable var borderWidth: CGFloat = 0 {
  8. didSet {
  9. layer.borderWidth = borderWidth
  10. }
  11. }
  12. @IBInspectable var cornerRadius: CGFloat = 0 {
  13. didSet {
  14. layer.cornerRadius = cornerRadius
  15. }
  16. }
  17. }
编译框架
测试自定义视图
打开Main.storyboard,从组件库里添加一个视图。
在Identity Inspector里把视图类改成CustomView。
调整视图,如果需要可添加自动布局约束。
Tip:按住选中视图并拖动鼠标到另一个视图可以添加自动布局约束。
上手玩了一下`cornerRadius`,我发现当添加一些比较大的值时会创建一个有意思的模式。
你可以在github上查看代码

如何在iOSnbsp;8中使用Swift和Xco…相关推荐

  1. ios 动态化视图_如何在iOS应用中使高度收集视图动态化

    ios 动态化视图 by Payal Gupta 通过Payal Gupta 如何在iOS应用中使集合视图的高度动态化 (How to make height of collection views ...

  2. php防止文件盗链,如何在PHP程序中防止盗链

    如何在PHP程序中防止盗链 example: 页面: dl.php ------------------------------------------------------------------ ...

  3. 如何在sqlite3连接中创建并调用自定义函数

    #!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

  4. Iar环境c语言调用汇编函数,如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数?...

    我在硬故障处理程序中有一些程序集.程序集基本上是为了传递当前堆栈指针作为参数(在R0中).它看起来像这样...如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数? __asm(&quo ...

  5. 学习如何在AutoCad土木工程中绘制建筑设计图

    学习如何在AutoCad中绘制建筑设计图从平面图到AutoCad土木工程中的整栋建筑 你会学到: 如何绘制房屋地图 如何绘制建筑设计 如何从AutoCad打印或出图 AutoCaD使用 AutoCaD ...

  6. 如何在OS X中打印到PDF文件

    如何在OS X中打印文件到PDF文件? 其实不需要安装任何其他软件,OS X本身支持打印到PDF文件这个功能. 具体操作详见下面文章: Want to save a document or web p ...

  7. 转 如何在IOS设备中去掉屏幕上的status bar

    引入 如何在IOS设备中去掉屏幕上的status bar,即:不显示设备上方的[网络.时间.电池??]条? 操作 方法一: 在-info.list项目文件中,加上"Status bar is ...

  8. react中纯函数_如何在纯React中创建电子邮件芯片

    react中纯函数 by Andreas Remdt 由Andreas Remdt 如何在纯React中创建电子邮件芯片 (How to create email chips in pure Reac ...

  9. 如何在您HTML中嵌入视频和音频

    by Abhishek Jakhar 通过阿比舍克·贾卡(Abhishek Jakhar) 如何在您HTML中嵌入视频和音频 (How to embed video and audio in your ...

最新文章

  1. (2)Spark下载与入门
  2. C# 利用Newtonsoft.Json将DataTable进行JSON序列化
  3. Windows 8 Release Preview 安装秘技两则
  4. 解决Ubuntu“下载额外数据文件失败 ttf-mscorefonts-installer”的问题
  5. 虚拟存储器管理c语言_内存管理;虚拟内存
  6. Ubuntu安装SublimeText3
  7. 通过bin-log对mysql进行数据恢复
  8. jsonp 获取图片文件流_【国际IT专场】Laravel Media Library多媒体文件的上传与管理...
  9. AIDE手机编程初级教程(零基础向)导航
  10. 高等代数——大学高等代数课程创新教材(丘维声)——3.4笔记+习题
  11. Hog特征、Haar特征
  12. DNS劫持和DNS污染的区别
  13. 什么是数字孪生技术?
  14. ios app 上传时 ERROR ITMS-90096
  15. python3 使用相对路径 import模块
  16. 大地测量的基准面和基准线
  17. type转HDMI2.0方案|typec转HDMI 4K60Hz电路|CS5265 typec单转优势方案
  18. BeatMark X for mac(fcpx音乐卡点神器)
  19. 用matlab读csv数据_matlab 读文件csvread textread用法实例
  20. RFID定位原理及优劣势(优缺点)解读

热门文章

  1. Adversarial Semantic Alignment for Improved Image Captions
  2. 使用MPC设计控制器
  3. 【160312 18:00】四则运算 2
  4. 及时复盘的好处_复盘是什么意思,有什么意义
  5. wps怎么关闭视图保护_怎么在PPT2013中清除编辑受保护视图功能?
  6. 在web.xml中配置多个param-value
  7. STM32汇编语言点亮led灯
  8. 华为手机怎么录屏?十分简单,轻松学会
  9. 百度网盘中直接双击编辑的PPT关闭后,找不到了。
  10. Windows+GCC得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)