使用 QuickLook 进行全屏文件预览

原文: http://www.cimgf.com/2012/07/11/a-better-fullscreen-asset-viewer-with-quicklook/

从去年开始,我有许多时间是为医疗设备公司编写 iPad 应用。这些公司想用iPad 杰出的展示效果向潜在买家展示他们的销售记录或电子资料。这无可非议。尤其是第3代 iPad 的视网膜屏,具有不可抗拒的吸引力。

此前我们一直在 UIWebView 中显示这些文件,它支持许多文件格式。幸亏有这种简单的处理方式,要不然就麻烦了。

这个办法很有效,但随后应用程序会变得迟缓,并暴露出一些可用性问题。对于需要直接面对大量用户的app来说这尤其致命。程序需要改进。为了全屏,我们用模式窗口的方式加载了一个全屏的view controller。问题是这只能支持横屏。由于某些原因,如果我们让它在某些时候支持两个方向而其他时候仅支持横屏,它不太稳定(工程师会说,“呃,我不知道”)。它总是有一个无法被隐藏的导航栏,用户在滚动文档内容时总能看到它。而且,无法直接跳到文档中的某一页。如果你想到达第325页,你必须一页页滚动,一直滚到第325页。这个体验差极了,相信没有任何用户会用它来查看大文档。这些问题我都没有任何好的解决办法。

但在一个程序中,我被要求添加一个“Open In...”按钮,允许用户用Keynote 打开 Keynote 文档。在实现过程中,我知道 QuickLook 有一个默认的“Open In...”选项,提供简单但自动全屏的窗口。我们可以用QuickLook 来实现文档预览。在下面的截图中,左边是最初的预览窗口,右边是 QuickLook 预览窗口,你可以发现二者的不同。

注意,当用户滚动时导航条会消失。用户可以通过右边的缩略图小图标直接跳到某一页。窗口是完全全屏的(除非文档的内容不满一屏)。

使用 QuickLook 的另一个好处,是两个方向都能支持,你可以看下图的竖屏效果:

使用 QuickLook preview controller 时,位于右上角的action 按钮消失了——对于这个组件,不同的公司可能会有不同的需求。一个公司想要一个“Open In...”按钮,以便打开 Keynote 文档,而另一个公司则根本不想提供任何导出/编辑功能。对于Office 或者 iWork 文档这当然会成为问题,但对于 PDF 这样的文档,它完全是只读的,这个公司根本不想让用户去编辑它。他们想尽可能的保证文档的版本是最新的,并且任何人不经许可不得篡改。

如果你使用 UIDocumentInteractionController来加载 QuickLook preview,你会获得一个 action 按钮,用户通过它来处理文档。标准的UIDocumentInteractionController 实现会在action 按钮上弹出一个选项菜单,如下图所示:

如图中所示,你可以用 iBooks 或任何设备中支持这个文档格式的程序来打开文档,或者打印文档。我的第2个客户不想要这个菜单,因此最终我们决定不使用UIDocumentInteractionController 而是自己实现一个 QLPreviewController 子类。我们不得不重载-viewWillAppear:方法并从 navigation bar 中移除 right button。注意:iOS 6 更新这个办法在 iOS 6.0 中不再有效。我向苹果提到过这个问题,他们只是简单地回答他们不再支持这种做法并认为这是私有API。如果你想更加灵活地使用这些API,同时又能重载某些行为,可以向苹果提交bug报告。

// Header

#import <QuickLook/QuickLook.h>  

@interface MLQuickLookPreviewController : QLPreviewController  

@end  

// Implementation

@implementation MLQuickLookPreviewController  

- (void)viewWillAppear:(BOOL)animated {

   [super viewWillAppear:animated];

   [[self navigationItem] setRightBarButtonItem:nil animated:NO];

}  

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

   return YES;

}  

@end

在 -shouldAutorotateToInterfaceOrientation:方法中我们支持了所有的方向。这正是我们想要的,QuickLook preview controller 实现了客户想要的全屏,同时隐藏了“导出”或“编辑”功能,不管在竖向还是横向模式下都能进行页面导航。

当然,要使用 QLPreviewController,必须加入QuickLook.framework 框架到项目中。然后在源文件中导入<QuickLook/QuickLook.h>头文件,如上述代码中所示。你可以这样实现预览窗口的定制:

- (void)presentFullscreen {

   MLQuickLookPreviewController *previewer = [[MLQuickLookPreviewController alloc] init];

   [previewer setDataSource:self];

   [previewer setCurrentPreviewItemIndex:0];

   [self presentModalViewController:previewer animated:YES];

}

注意,数据源被设置为self。也就是说类必须实现QLPreviewControllerDataSource 方法。同时在类的头文件中,需要如下声明:

@interface MLDetailViewController : UIViewController <QLPreviewControllerDataSource>  

@end

在实现文件中,需要实现两个方法:

#pragma mark - #pragma mark QLPreviewControllerDataSource

- (NSInteger)numberOfPreviewItemsInPreviewController:

(QLPreviewController*)controller  {

   return ([self asset]) ? 1 : 0;

}  

- (id<QLPreviewItem>)previewController:(QLPreviewController*)

controller previewItemAtIndex:(NSInteger)index  {

   NSString *path = [[self asset] pathOnDiskAtCachePath:CACH_PATH];

   return [NSURL fileURLWithPath:path];

}

同时,你应该提供一个用于显示的文件列表。但在本例中,我们仅仅显示一个文件。所以我会判断 asset 是否为 nil,如果为 nil 返回 0,否则返回 1,以此来作为要预览的文档数。当 previewItemAtIndex方法被调用时,我返回一个文件 URL 地址,指向某个文件路径。这就是我们需要编写的全部代码。这将在 iPad 上显示一个美观而又实用的文档预览窗口。

结论

 

在项目越临近交付的时候,程序中的某些瑕疵就越发显得显眼。在 iPad 上,外观是极其重要的,对某些界面进行细微的调节即能大幅提升用户对app 的满意度。耶稣说,“去照样做”。再见。


### 回答1: 您好,可能是因为您的QuickLook插件没有正确安装或配置。您可以尝试重新安装或更新QuickLook插件,或者尝试使用其他预览工具来查看Office文件。另外,您也可以检查一下您的Office软件是否已经安装或者是否需要更新。希望能帮到您。 ### 回答2: Quicklook是macOS自带的一种文件预览功能,它可以快速预览文件的内容,无需打开文件。然而,对于Microsoft Office文件Quicklook却不能进行预览。 这个问题的原因是微软Office和macOS并不是完全兼容的,而Quicklook是macOS自带的功能,因此它并不支持所有的文件类型,包括Office文件。另外,Office文件格式也与其他文件格式不同,这也导致Quicklook不能正确地读取和显示Office文件。 虽然Quicklook不能预览Office文件,但是我们仍然可以使用其他方式来预览它们。其中一个方法是使用Office自带的预览功能。在安装Office软件后,可以在Finder中选择一个Office文件,然后通过菜单栏中的“文件”选项来进行预览。 另外一个方法是使用第三方软件来实现Office文件预览。MacDropAny、Scholar、Office Lens等应用都提供了Office文件预览功能,它们可以实现快速、准确的Office文件预览,帮助我们更方便地查看Office文件内容。 综上所述,虽然Quicklook不能预览Office文件,但是我们可以通过使用Office自带的预览功能或者第三方软件来实现预览。这些方法可以帮助我们更方便地查看Office文档内容,提高工作效率。 ### 回答3: Quick Look 是 Mac OS X 系统中的一种非常方便的功能,可以在不打开文件的情况下预览文件的内容。虽然 Quick Look 支持预览许多种文件格式,如文本文件、图片、PDF、音频、视频等等,但是对于 Office 文档(Word、Excel、PowerPoint 等),却无能为力。 造成这种情况的原因主要是 Office 文档的文件格式与其他文件格式不同。Office 文档包含了大量的格式设置和排版信息,而这些信息在 Quick Look 中很难被完整地解析出来并以高效的方式展示出来。 此外,Office 文档的预览需要安装 Microsoft Office 或者其他相应的软件才能实现。因为这些软件是商业化的,所以在 Mac 系统中并不是默认安装的,而 Quick Look 则是 Mac 系统中自带的功能,所以 Quick Look 不能预览 Office 文件也是可以理解的。 对于需要频繁地预览 Office 文档的用户来说,他们可以通过其他方法来实现快捷的预览功能。比如可以使用 Spotlight 搜索来快速定位需要预览文件,双击后再进行打开;或者使用 Quick Look 插件,安装对应的 Office 文件预览插件即可。这些插件可以通过下载安装,但需要注意的是,可能存在安全问题。最好只从官方渠道下载插件,并随时检查计算机以确保其不受恶意软件的感染。 综上所述,虽然 Quick Look 不能预览 Office 文件,但是用户可以通过其他方式来实现高效的预览
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值