2017-03-10 17 views
3

XcodeはNSViewをプレイグラウンドに表示しません。しかし、それは問題なしでUIViewと表示しています。バグですか?Xcode 8プレイグラウンドにNSViewが表示されない

コード:

let view = NSView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) 
view.layer?.backgroundColor = NSColor.white.cgColor 
PlaygroundPage.current.liveView = view 

また、Xcodeの遊び場が非常に遅いです。遊び場をスピードアップする方法はありますか?

答えて

4

UIViewおよびNSViewはどちらも動作が異なります。投稿したコードはUIViewで十分ですが、NSViewでは十分ではありません。 NSViewのためのAppleのドキュメントによると

アンNSViewのオブジェクトは、印刷、 を描画し、アプリ内のイベントを処理するためのインフラストラクチャを提供します。通常、NSViewオブジェクト は直接使用しないでください。その代わりに、クラスがNSView に由来するオブジェクトを使用するか、NSViewをサブクラス化し、そのメソッドをオーバーライドして、 必要な動作を実装します。

draw(_:) NSViewのオブジェクトを描画します。 (すべてのサブクラスは、この メソッドを実装する必要がありますが、それはめったに明示的に呼び出されていないです)

だから、あなたはNSViewを継承し、ここでdraw(_:)

を実装しなければならないコードは次のとおりです。

import Cocoa 
import PlaygroundSupport 


class view: NSView 
{ 
    override init(frame: NSRect) 
    { 
     super.init(frame: frame) 
    } 

    required init?(coder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func draw(_ dirtyRect: NSRect) 
    { 
     NSColor.blue.setFill() 
     NSRectFill(self.bounds) 
    } 
} 

var v = view(frame: NSRect(x: 0, y: 0, width: 200, height: 200)) 

PlaygroundPage.current.liveView = v 

出力:

enter image description here


それが簡単であり、また、チュートリアルや回答のトンを見つけることができるので、プレイグラウンドでのMacOS以外のiOSを使用することをお勧めします。

+0

答えをありがとう。チュートリアルの欠如のために、PlaygroundでiOSを使用することも考えています。 – ssh

関連する問題