在Dock图标上画进度条
作者: Cocoa China 【最热的Mac, iPhone专业开发论坛】【本文永久地址】
3
Jul
如果你用过Toast这个刻录软件,你会发现在刻录的时候,Dock图标上会有一个进度条,表示刻录的进度。如果你在用XCode,编译的时候图标上也会有一个进度条表示编译的进度。
其实在Dock图标上画进度条是很简单的事情,你只需要做如下工作即可:
要在Dock上显示图标,最简单的方法是使用NSApp的setApplicationIconImage:方法。我们只要创建一个NSImage,将应用程序的图标贴上,再在上面画上一个进度条,接着使用NSApp setApplicationIconImage:方法。
在需要更新进度的时候,重新画出相应长度的进度条,再重新设置一下应用程序的图标,就可以了。
大致的代码如下:
-
-(void) updateDockTile
-
{
-
NSImage* dockIcon = [[[NSImage alloc] initWithSize: NSMakeSize(128,128)] autorelease];
-
-
-
[dockIcon lockFocus];
-
NSRect box = { {4, 4}, {120, 16} };
-
-
// App icon:
-
[[NSImage imageNamed: @"NSApplicationIcon"] dissolveToPoint: NSZeroPoint fraction: 1.0];
-
-
// Track & Outline:
-
[[NSColor whiteColor] set];
-
[NSBezierPath fillRect: box];
-
-
[[NSColor blackColor] set];
-
[NSBezierPath strokeRect: box];
-
-
// State fill:
-
box = NSInsetRect( box, 1, 1 );
-
[[NSColor knobColor] set];
-
-
box.size.width = (box.size.width / (max -min)) * (current -min);
-
-
NSImage* prImg = [NSImage imageNamed: @"MiniProgressGradient"];
-
NSRect picBox = { { 0,0 }, { 0,0 } };
-
if( prImg )
-
{
-
picBox.size = [prImg size];
-
[prImg drawInRect: box fromRect: picBox operation: NSCompositeCopy fraction: 1.0];
-
}
-
else
-
NSRectFill( box );
-
[dockIcon unlockFocus];
-
-
[NSApp setApplicationIconImage: dockIcon];
-
}
你可以在这里下载例子。源码作者是Uli Kusterer。
发表评论