您知道当我们使用 safari 和 chrome 复制文件或下载文件时,文件图标上有一个迷你进度条。
我想知道当我用自己的代码复制或下载文件时如何让它显示在 Finder 窗口中。
有人可以帮我吗?
非常感谢。
您知道当我们使用 safari 和 chrome 复制文件或下载文件时,文件图标上有一个迷你进度条。
我想知道当我用自己的代码复制或下载文件时如何让它显示在 Finder 窗口中。
有人可以帮我吗?
非常感谢。
我自己通过查询文件/目录属性来解决问题。这很简单。
获取要在其图标上显示进度条的文件的属性
NSDictionary *fileAttr = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
获取扩展属性
NSDictionary *extendAttr = [fileAttr objectForKey:@"NSFileExtendedAttributes"];
创建extendAttr的可变副本并更改其中的一些值
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];
现在你会发现它出现了进度条。
一个起点是使用 a NSProgressIndicator
, then [progressIndicator setIndeterminate:NO];
。然后,您的更新/后台操作不应阻塞主线程。NSProgressIndicator
对于 AppKit 小部件来说有点不同——它允许从辅助线程进行一些更新。当然,对“当前进度”的更新也可以在主线程的运行循环中排队。