現在、新しいタッチバーの内部をプレビューするために、小さなopen source appを作成しています。 私はドラッグアンドドロップビューを持つウィンドウを持って、そのURLを介して画像を受け取ります。 TouchBarViewの中にNSImageViewを持つIBタッチバー。
interface builder structure (screenshot)NSTouchBar内にNSImageViewを挿入する
これがウィンドウに画像を表示するために、私のMainViewController
で働いている:あなたは、私はドラッグを聴くn個の画像のURLを取得するには、イベントを削除するには、デリゲートを使用して見ることができるように
extension ViewController: DropDestinationViewDelegate {
func processImageURLs(_ urls: [URL]) {
for (_,url) in urls.enumerated() {
// pass URL to Window Controller
let windowController = WindowController()
windowController.showImageInTouchBar(url)
// create the image from the content URL
if let image = NSImage(contentsOf:url) {
imagePreviewView.image = image
}
}
}
}
。今度はタッチバー内で同じ画像を表示するために画像/ URLを使用したいと思います。 Interface BuilderでTouch Barを作成しましたが、image-urlをWindowController
に渡しています。
class WindowController: NSWindowController {
@IBOutlet var touchBarImageView: NSImageView!
override func windowDidLoad() {
super.windowDidLoad()
}
func showImageInTouchBar(_ url: URL) {
print(url)
if let touchbarImage = NSImage(contentsOf:url) {
touchBarImageView.image = touchbarImage
}
}
}
私はprint(url)
で正しいURLを受けるんだけど、私は再び画像を作成しようとすると、アプリは以下にクラッシュされています。私のWindowController
で
は、私はこのような画像を処理しようとしますメッセージ:
fatal error: unexpectedly found nil while unwrapping an Optional value
_touchBarImageView_がnilでないか確認してください。コントローラがロードされる前に_showImageInTouchBar_を呼び出していませんか? –
ああ良いヒント!ありがとう! 'touchBarImageView'は実際にはゼロです。 **しかし、なぜですか?**私がImageViewを 'MainViewController'に入れたとしても何もする必要はありません。申し訳ありませんが、私は 'showImageInTouchBar()'を 'windowDidLoad()'の後に呼び出しています。 – alexkaessner
分岐を区切るために現在のコードでコミットできますか? –