Help us understand the problem. What is going on with this article?

UIViewをコードからPreview可能にする。

先に結論

テストとかの時にデバッガからViewを見れたら便利になるよってお話。

スクリーンショット 2020-10-17 22.17.45.png

実装

debugQuickLookObjectを実装する。

Swift4.0あたりから@objcをつけないと動かなくなってる。

iOS

extension UIView {
    @objc func debugQuickLookObject() -> Any? {
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.main.scale)
        drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image
    }
}

mac

extension NSView {
    @objc func debugQuickLookObject() -> Any? {
        guard let rep = self.bitmapImageRepForCachingDisplay(in: bounds) else { return nil }
        self.cacheDisplay(in: self.bounds, to: rep)

        guard let cgImage = rep.cgImage else { return nil }
        return NSImage(cgImage: cgImage, size: bounds.size)
    }
}

これでLLDBデバッガでbreakpointを貼って止めて、目のマークを押すと

スクリーンショット 2020-10-17 22.25.44.png

Viewの内容をPreviewできる。

スクリーンショット 2020-10-17 22.17.45.png

ObuchiYuki
未踏2020/アプリ甲子園優勝/U22プロコン経済産業省商務局長賞/セキュキャンアワード /seccamp19/香港→開成→mast19
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away