2016-05-26 5 views
1

У меня возникли проблемы с созданием NSCollectionView с значками, которые взяты из предварительного просмотра значка Finder.NSCollectionView Сетка файлов, отображаемая с помощью значков в окне Finder's Preview

В идеале, если файл является dmg, он должен отображать значок жесткого диска, mp3 должен быть значком mp3, а на фотографии должно отображаться то, что фотография выглядит как сама.

Существует один пост, который решает эту проблему: Is it possible to get programmatic access to finder preview images?

Но код старый и не компилируется. Я также использую Swift в этом проекте.

Я использовал этот пост, чтобы настроить шаблон для моего проекта: Is there a way to set up a NSCollectionView programmatically in Swift?

который добавляет подвид к NSView. Если это можно изменить для реализации значков, это будет идеально.

Кроме того, я использую NSFileManager.defaultManager для получения содержимого папки и хочу отобразить это содержимое в виде коллекции.

Я новичок в разработке на платформе Mac и имею больше опыта работы с iOS, конкретные ответы очень ценятся, спасибо!

ответ

0

Обновление, я смог выяснить, как использовать то, что Finder использует с библиотекой Quicklook, которую предоставляет Apple. Вот часть кода, который я использовал. Обратите внимание, что если вы пытаетесь использовать Quicklook на файл, который не имеет предварительный просмотр, то будет ошибка, так что в тех случаях, я просто использовал функцию iconForFile (ниже этого блока кода)

let tmp = QLThumbnailImageCreate(kCFAllocatorDefault, tmpURL , CGSize(width: 64, height: 64), nil) 
tmpImage = tmp.takeUnretainedValue() 
tmpIcon = NSImage(CGImage: tmpImage!, size: NSSize(width: 64, height: 64)) 

Оригинал :

Я смог найти (почти) то, что искал.

В классе NSWorkspace есть метод

func iconForFile(_ fullPath: String) -> NSImage 

Это возвратит NSImage иконы. К сожалению, я не вижу способа получить предварительный просмотр изображения, если это изображение. Я также не вижу способ увеличить изображение (всего 32x32 пикселя).

Надеюсь, этот ответ поможет другим, столкнувшимся с этой проблемой!