如何在文件图标上显示进度条

时间:2013-02-22 06:17:20

标签: macos cocoa progress-bar

当我们使用safari和chrome复制文件或下载文件时,您知道文件图标上有一个小型进度条。

我想知道当我使用自己的代码复制或下载文件时如何让它在Finder窗口中显示。

有人能帮助我吗?

非常感谢。

2 个答案:

答案 0 :(得分:13)

我自己通过查询文件/目录属性找到了方法。它很简单。

获取要在其上显示进度条的文件的属性

NSDictionary *fileAttr = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];

获取扩展属性

NSDictionary *extendAttr = [fileAttr objectForKey:@"NSFileExtendedAttributes"];

创建extendAttr的Mutable副本并更改其中的一些值

NSMutableDictionary *mutableExtendAttr = [NSMutableDictionary dictionaryWithDictionary:extendAttr];
// create data of progress value
NSData *progressData = [@"0.1" dataUsingEncoding:NSASCIIStringEncoding];
// change it
[mutableExtendAttr setObject:progressData forKey:@"com.apple.progress.fractionCompleted"];

创建fileAttr的可变副本

 NSMutableDictionary *mutableFileAttr = [NSMutableDictionary dictionaryWithDictionary:fileAttr];
 // change extend attr
 [mutableFileAttr setObject:[NSDictionary dictionaryWithDictionary:mutableExtendAttr] forKey:extendAttrKey];
 // change file/dir create date to the special one
 // if not , progress bar will not show
 [mutableFileAttr setObject:[NSDate dateWithString:@"1984-01-24 08:00:00 +0000"] forKey:NSFileCreationDate];
 // set attribute to file
 [[NSFileManager defaultManager] setAttributes:mutableFileAttr ofItemAtPath:filePath error:&error];

现在你会发现进度条出现了。

答案 1 :(得分:0)

一个起点是使用NSProgressIndicator,然后使用[progressIndicator setIndeterminate:NO];。然后,您的更新/后台操作应阻止主线程。 NSProgressIndicator对于AppKit小部件有点不同 - 它允许来自辅助线程的一些更新。当然,对“当前进度”的更新也可能在主线程的运行循环中排队。