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