对于一般对象,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框中显示对象自定义视图的更多相关文章

  1. EBS OAF开发中实体对象和视图对象的属性设置器

    EBS OAF开发中实体对象和视图对象的属性设置器 (版权声明.本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 源文: Home > Oracle ...

  2. 实现password框中显示文字提示的方式

    其实实际上实现中并不能让password中显示文字提示,但是我们在工作中有这样的需求,当没输入东西的时候,框内有提示输入密码,但是当输入东西的时候又显示的是*号,那么是如何实现的呢?其实原理很简单,就 ...

  3. easyui combobox下拉框中显示大于号小于号的问题

    前两天同事做了个功能,通过勾选下拉框里的值进行列表查询,结果下拉框里的值是“0<t<=2”.“2<t<=5”.“t>5”这样的. combobox是用脚本渲染出来的,里面 ...

  4. json数据字典,以及数据在下拉框中显示

    建立person_vocation.json数据字典文件,内容: [ {"id":1,"disabled":false,"selected" ...

  5. html/php, 二个文本框求和,在第三个框中显示

    我想要实现的是第三个文本框本来输出的是默认值,按了提交按钮之后,显示了一个我通过php某个计算后想要输出的值,如何实现?就好比说:我输入两个数,我按了个提交按钮之后,那个第三个文本框本来输出是“输出框 ...

  6. lua -- 在弹框中显示物品列表

    -- 宝箱打开后,显示里面的物品列表 -- 显示方式是:一个一个显示,每三个一行,一行显示完就移动到下一行, -- 接下来的一样要显示框的中间位置,方便玩家看 function UIBagContro ...

  7. 通过给事件处理程序传递this参数,获取事件源对象的引用。单机提交按钮时在信息框中显示用户输入的字符。

    <script> function mymethod(str) { alert("您输入的是:"+str); } </script><form act ...

  8. Camstar :新加的modeling对象没有在 modeling的下拉框中显示

    解决: 对象的maint 的 advance option client ui 要打上勾.

  9. 在input文本框中存入对象格式的数据

    <input id="teaching" type="hidden" name="teachingProgram" /> JQ: ...

随机推荐

  1. 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.错误,查了半 ...

  2. Spring Cloud Eureka 自我保护机制

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...

  3. Redis常用命令--Hashes

    Hash是由键值对组成的map.Hashes的底层是通过字典实现的.一个哈希表里面可以有多个哈希表节点.而每个哈希节点就保存了字典中的一个键值对. 字典是一种用于保存键和值对的抽象数据结构.字典里的每 ...

  4. keil应用小贴士:Use MicroLIB是干什么的

    在keil 建立ARM的工程时,其中有一项是选 use MicroLIB 查了查,得到了以下信息: microlib 是缺省 C 库的备选库. 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使 ...

  5. [SDOI2010]古代猪文

    题目背景 “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片 ...

  6. remove、erase

    remove: remove不是真正的删除,删除后数量并没有变化. 它接收一对迭代器,而不是一个容器,所以不知道它作用于哪个容器. 而且没有办法从一个迭代器获取对应于它的容器 实现 remove会用需 ...

  7. 【Uva 11280 飞到弗雷德里顿】

    ·你可以尽情地坐飞机,但停留次数遭到限制. ·英文题,述大意:       给出一张有向图,起点是输入的第一个城市,终点是输入的最后一个城市.给出q个询问,每个询问含一个t,表示 #include&l ...

  8. 面试(二)---synchronized

    一.前言        本来计划将ConcurrentHashMap和HashMap对比着来说下,奈何看的源码有点懵逼,我在思考思考,等等有个清晰的思路在搞起来,我们先来谈一下synchronized ...

  9. 阿里2019实习内推,五轮技术面+一轮HR面,Java岗面经

    在牛客网上获取到很多知识和信息,现在反馈一波,希望能对广大找实习的同学有所帮助. 个人情况:EE方向渣硕,二月末内推了阿里集团某部门Java岗,约三周完成了所有面试. 面经如下: 一面 (简历评估): ...

  10. Nginx+Tomca+Redis实现负载均衡、资源分离、session共享

    目标实现:Nginx作为负载均衡后端多Tomcat实例,通过Redis实现Session共享. 操作系统环境:CentOS 6.8 SSH:SecureCRT 其中 Nginx服务:80端口 Tomc ...