对于一般对象,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. iOS之AFSecurityPolicy

    AFSecurityPolicy是AFNetworking中负责对https请求进行证书验证的模块,本文主要是要搞清楚它是如何工作的. 在介绍AFSecurityPolicy之前,我们先来了解一下ht ...

  2. https原理通俗了解

    摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于" ...

  3. 手写java虚拟机(一)——搭建环境

    毕业设计打算做一个java虚拟机,首先要对java虚拟机有一个简单的了解(jvm).目前市面上有众多的jvm,如sun公司的HotSpot VM.Classic VM,IBM公司的J9 VM等等,这里 ...

  4. 玩一玩基于Token的 自定义身份认证+权限管理

    使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.大概的流程是这样的: 客户端使用用户名跟密码请求登录 服务端收到请求,去验证用户名与密码 验证成功后,服务端会签发一个 Toke ...

  5. web攻击和防御措施

    1.SQL注入:参照下面的链接 http://www.cnblogs.com/chenhaoyu/p/8758888.html 2.跨网站脚本攻击(Cross Site Scripting, XSS) ...

  6. [LeetCode] Fraction Addition and Subtraction 分数加减法

    Given a string representing an expression of fraction addition and subtraction, you need to return t ...

  7. [HNOI 2015]实验比较

    Description 小D 被邀请到实验室,做一个跟图片质量评价相关的主观实验.实验用到的图片集一共有 N 张图片,编号为 1 到 N.实验分若干轮进行,在每轮实验中,小 D会被要求观看某两张随机选 ...

  8. operator[] 和 insert

    operator[] 和 insert: map的[]操作和其他容器和内置[]没有关系 如果我们通过[]向map中插入or更新值,需要考虑一些东西 1.键已经存在,那么直接进行修改即可 2.键不存在, ...

  9. 51 nod 1610 路径计数(Moblus+dp)

    1610 路径计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   路径上所有边权的最大公约数定义为一条路径的值. 给定一个有向无环图.T次修改操作,每次修改一 ...

  10. hdu 5314 动态树

    Happy King Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...