Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift NSCollectionView显示文件的网格,带有Finder';s预览_Swift_Cocoa_Nscollectionview - Fatal编程技术网

Swift NSCollectionView显示文件的网格,带有Finder';s预览

Swift NSCollectionView显示文件的网格,带有Finder';s预览,swift,cocoa,nscollectionview,Swift,Cocoa,Nscollectionview,我在尝试创建包含从Finder图标预览中获取的图标的NSCollectionView时遇到问题 理想情况下,如果文件是dmg,它应该显示硬盘图标,mp3应该是mp3图标,照片应该显示照片本身的样子 有一篇文章论述了这个问题: 但代码很旧,无法编译。我也在这个项目中使用Swift 我使用此帖子为我的项目设置了一个模板: 它将子视图添加到NSView。如果可以修改它来实现图标,那将是理想的 此外,我正在使用NSFileManager.defaultManager获取文件夹的内容,并希望在集合视图

我在尝试创建包含从Finder图标预览中获取的图标的NSCollectionView时遇到问题

理想情况下,如果文件是dmg,它应该显示硬盘图标,mp3应该是mp3图标,照片应该显示照片本身的样子

有一篇文章论述了这个问题:

但代码很旧,无法编译。我也在这个项目中使用Swift

我使用此帖子为我的项目设置了一个模板:

它将子视图添加到NSView。如果可以修改它来实现图标,那将是理想的

此外,我正在使用NSFileManager.defaultManager获取文件夹的内容,并希望在集合视图中显示这些内容


我刚开始在Mac平台上开发,对iOS有更多的经验,非常感谢您的具体回答,谢谢

更新后,我能够弄清楚如何使用Finder与Apple提供的Quicklook库一起使用。这是我使用的部分代码。请注意,如果您试图在没有预览的文件上使用Quicklook,则会出现错误,因此在这些情况下,我只使用了iconForFile函数(位于此代码块下方)

原件:

我能(几乎)找到我要找的东西

在NSWorkspace类中有一个方法

func iconForFile(_ fullPath: String) -> NSImage
这将返回图标的NSImage。不幸的是,如果它是一张图片,我看不到一种方法来预览它。我也看不到使图片更大的方法(仅32x32像素)


希望这个答案能帮助其他遇到这个问题的人

更新后,我能够弄清楚如何使用Finder与Apple提供的Quicklook库一起使用。这是我使用的部分代码。请注意,如果您试图在没有预览的文件上使用Quicklook,则会出现错误,因此在这些情况下,我只使用了iconForFile函数(位于此代码块下方)

原件:

我能(几乎)找到我要找的东西

在NSWorkspace类中有一个方法

func iconForFile(_ fullPath: String) -> NSImage
这将返回图标的NSImage。不幸的是,如果它是一张图片,我看不到一种方法来预览它。我也看不到使图片更大的方法(仅32x32像素)


希望这个答案能帮助其他遇到这个问题的人

我使用了您的答案中的代码,但我注意到它没有保持文件的纵横比,低分辨率版本将只是下采样高分辨率版本。根据你的回答,我的解决方案如下:

let imageLowResRef = QLThumbnailImageCreate(kCFAllocatorDefault, url as CFURL , CGSize(width: 32, height: 32), nil)

guard imageLowResRef != nil else {
    return NSWorkspace.shared.icon(forFile: url.path)
}

let image = NSImage()
let imageLowRes = imageLowResRef!.takeUnretainedValue()
image.addRepresentation(NSBitmapImageRep(cgImage: imageLowRes))

let imageHighResRef = QLThumbnailImageCreate(kCFAllocatorDefault, url as CFURL , CGSize(width: imageLowRes.width*2, height: imageLowRes.height*2), nil)
let imageHighRes = imageHighResRef!.takeUnretainedValue()
image.addRepresentation(NSBitmapImageRep(cgImage: imageHighRes))

编辑:如果将
let options=[kqlThumbNailOptionModelKey:true]添加为CFDictionary
,则会得到options参数,您可以将预览渲染为图标。

我使用了您的答案中的代码,但我注意到它没有保持文件的纵横比,低分辨率版本将只是下采样高分辨率版本。根据你的回答,我的解决方案如下:

let imageLowResRef = QLThumbnailImageCreate(kCFAllocatorDefault, url as CFURL , CGSize(width: 32, height: 32), nil)

guard imageLowResRef != nil else {
    return NSWorkspace.shared.icon(forFile: url.path)
}

let image = NSImage()
let imageLowRes = imageLowResRef!.takeUnretainedValue()
image.addRepresentation(NSBitmapImageRep(cgImage: imageLowRes))

let imageHighResRef = QLThumbnailImageCreate(kCFAllocatorDefault, url as CFURL , CGSize(width: imageLowRes.width*2, height: imageLowRes.height*2), nil)
let imageHighRes = imageHighResRef!.takeUnretainedValue()
image.addRepresentation(NSBitmapImageRep(cgImage: imageHighRes))
Edit:如果将
let options=[kqlThumbNailOptionModelKey:true]添加为CFDictionary
,则进入选项参数,预览呈现为图标