Xcode在playground的quick look框中显示对象自定义视图
对于一般对象,playground中默认的quick look显示已经够用,比如简单的字符串,Int,或简单的自定义Class等等.
不过对于有些情况,我们需要自定义对象在playground中的显示,比如图形化显示.
Xcode对于在playground中自定义显示对象给予了特殊的支持,我们可以通过在自定义类中完成特殊的debugQuickLookObject方法来达到此目的.
以下例子代码摘自互联网,本猫做了修改.
我们先创建一个自定义类名为CheckersBoard,需要继承自NSObject:
class CheckersBoard:NSObject{
}
在该类中再定义一个表示棋盘方格状态的枚举:
enum BoardSpace{
case FREE,WHITE,BLACK
}
下面是一些必要属性的定义:
var board = [[BoardSpace]](repeating:[BoardSpace](repeating:.FREE,count:8),count:8)
let squareSize = 24
末了,让我们来完成最为关键的方法debugQuickLookObject:
func debugQuickLookObject()->AnyObject?{
UIGraphicsBeginImageContext(CGSize(width: CGFloat(squareSize*8), height: CGFloat(squareSize*8)))
for row in 0...7{
for col in 0...7{
let offsetX = CGFloat(col * squareSize)
let offsetY = CGFloat(row * squareSize)
if col % 2 == row % 2{
UIColor.gray.setFill()
}else{
UIColor.black.setFill()
}
var bezier = UIBezierPath(rect: CGRect(x: offsetX, y: offsetY, width: CGFloat(squareSize), height: CGFloat(squareSize)))
bezier.fill()
switch board[row][col]{
case .WHITE:
UIColor.white.setFill()
case .BLACK:
UIColor.brown.setFill()
default:
continue
}
bezier = UIBezierPath(arcCenter: CGPoint(x:offsetX+CGFloat(squareSize/2), y:offsetY + CGFloat(squareSize/2)), radius: CGFloat(squareSize/3), startAngle: CGFloat(0.0), endAngle: CGFloat(360), clockwise: true)
bezier.close()
bezier.fill()
}
}
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
貌似很长,不过内容却很简单,主要做了以下这些事:
1.首先建立图片图形上下文,同时设置了它的大小为 (squareSize*8)^2
2.然后遍历绘制每个棋盘方格
3.根据需要绘制特定棋盘方格中的棋子
4.最后完成图形上下文的创建,并返回绘制完成的图片
我们需要在playground中实际创建一个棋盘来观察自定义视图的样子:
var board = CheckersBoard()
for i in 0..<8{
for j in 0..<8{
let x = arc4random_uniform(3)
var boardVal:CheckersBoard.BoardSpace = .FREE
switch x{
case 0:
boardVal = .WHITE
case 1:
boardVal = .BLACK
case 2:
boardVal = .FREE
default:
continue
}
board.board[i][j] = boardVal
}
}
board
以上代码随机设置棋盘中棋子的位置和颜色,最后一行代码仅仅是用来显示该棋盘,以下是在playground中实际显示的效果:
注意上图右下角quick look弹出的自定义显示的视图,这就是我们想要的效果!
我们可以按照自己的实际需求来显示自定义视图,这在playground快速原型开发中的确是开发利器!!!
Xcode在playground的quick look框中显示对象自定义视图的更多相关文章
- EBS OAF开发中实体对象和视图对象的属性设置器
EBS OAF开发中实体对象和视图对象的属性设置器 (版权声明.本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 源文: Home > Oracle ...
- 实现password框中显示文字提示的方式
其实实际上实现中并不能让password中显示文字提示,但是我们在工作中有这样的需求,当没输入东西的时候,框内有提示输入密码,但是当输入东西的时候又显示的是*号,那么是如何实现的呢?其实原理很简单,就 ...
- easyui combobox下拉框中显示大于号小于号的问题
前两天同事做了个功能,通过勾选下拉框里的值进行列表查询,结果下拉框里的值是“0<t<=2”.“2<t<=5”.“t>5”这样的. combobox是用脚本渲染出来的,里面 ...
- json数据字典,以及数据在下拉框中显示
建立person_vocation.json数据字典文件,内容: [ {"id":1,"disabled":false,"selected" ...
- html/php, 二个文本框求和,在第三个框中显示
我想要实现的是第三个文本框本来输出的是默认值,按了提交按钮之后,显示了一个我通过php某个计算后想要输出的值,如何实现?就好比说:我输入两个数,我按了个提交按钮之后,那个第三个文本框本来输出是“输出框 ...
- lua -- 在弹框中显示物品列表
-- 宝箱打开后,显示里面的物品列表 -- 显示方式是:一个一个显示,每三个一行,一行显示完就移动到下一行, -- 接下来的一样要显示框的中间位置,方便玩家看 function UIBagContro ...
- 通过给事件处理程序传递this参数,获取事件源对象的引用。单机提交按钮时在信息框中显示用户输入的字符。
<script> function mymethod(str) { alert("您输入的是:"+str); } </script><form act ...
- Camstar :新加的modeling对象没有在 modeling的下拉框中显示
解决: 对象的maint 的 advance option client ui 要打上勾.
- 在input文本框中存入对象格式的数据
<input id="teaching" type="hidden" name="teachingProgram" /> JQ: ...
随机推荐
- further occurrences of HTTP header parsing errors will be logged at DEBUG level.错误
今天进行项目测试的时候出现了further occurrences of HTTP header parsing errors will be logged at DEBUG level.错误,查了半 ...
- Spring Cloud Eureka 自我保护机制
Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...
- Redis常用命令--Hashes
Hash是由键值对组成的map.Hashes的底层是通过字典实现的.一个哈希表里面可以有多个哈希表节点.而每个哈希节点就保存了字典中的一个键值对. 字典是一种用于保存键和值对的抽象数据结构.字典里的每 ...
- keil应用小贴士:Use MicroLIB是干什么的
在keil 建立ARM的工程时,其中有一项是选 use MicroLIB 查了查,得到了以下信息: microlib 是缺省 C 库的备选库. 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使 ...
- [SDOI2010]古代猪文
题目背景 “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片 ...
- remove、erase
remove: remove不是真正的删除,删除后数量并没有变化. 它接收一对迭代器,而不是一个容器,所以不知道它作用于哪个容器. 而且没有办法从一个迭代器获取对应于它的容器 实现 remove会用需 ...
- 【Uva 11280 飞到弗雷德里顿】
·你可以尽情地坐飞机,但停留次数遭到限制. ·英文题,述大意: 给出一张有向图,起点是输入的第一个城市,终点是输入的最后一个城市.给出q个询问,每个询问含一个t,表示 #include&l ...
- 面试(二)---synchronized
一.前言 本来计划将ConcurrentHashMap和HashMap对比着来说下,奈何看的源码有点懵逼,我在思考思考,等等有个清晰的思路在搞起来,我们先来谈一下synchronized ...
- 阿里2019实习内推,五轮技术面+一轮HR面,Java岗面经
在牛客网上获取到很多知识和信息,现在反馈一波,希望能对广大找实习的同学有所帮助. 个人情况:EE方向渣硕,二月末内推了阿里集团某部门Java岗,约三周完成了所有面试. 面经如下: 一面 (简历评估): ...
- Nginx+Tomca+Redis实现负载均衡、资源分离、session共享
目标实现:Nginx作为负载均衡后端多Tomcat实例,通过Redis实现Session共享. 操作系统环境:CentOS 6.8 SSH:SecureCRT 其中 Nginx服务:80端口 Tomc ...