我正在尝试找出一种在用户保存设置时给予用户反馈的方法。类似于微软的“文件保存”对话框是否有这类对话的类?我不想要求用户采取任何行动。只是“你的设置已被保存”然后在短暂的延迟后消失。也许更好的描述方式就像一个淡入淡出类型的jQuery消息框
答案 0 :(得分:2)
这种对话有没有类?
这不是“对话框”,因为您不接受用户的输入。最好是警报,因此您可以使用NSAlert
(另请参阅"Dialogs and Special Panels")但是,您正在考虑的内容与HIG针对"Alerts"提供的建议相反:
避免仅使用警报向用户提供信息。尽管告诉用户严重问题(例如数据丢失的可能性)很重要,但用户不会感到被信息中断的警报打断但不可行动。而不是显示仅仅通知的警报,而是以另一种方式向用户提供信息,例如在更改的状态指示器中。
换句话说,这可能不会被OS X使用人群视为良好的用户体验。
如果绝对必要,您仍然可以通过创建工作表或警报窗口并设置计时器来解除它。
更好的计划是在界面的某个位置设置一个标签,其中的文字可以显示此信息,再次使用计时器在适当的持续时间后清除通知。
另一个选择(可能是最好的)是将此通知放在用户仅根据请求查看的位置。例如,HIG在其侧边栏的底部提到了Mail.app的信息区域。
答案 1 :(得分:1)
使用NSViewAnimation淡入淡出窗口非常简单,另请参阅NSAnimation Class
我使用类似这样的例子。
- (void)fadeWindowIn{
//--make sure the window starts from 0 alpha. Or you may get it jumping in view then try and fade in.
[theWindow setAlphaValue:0.0];
//-- set up the dictionary for the animation options
NSDictionary *dictIn = [NSDictionary dictionaryWithObjectsAndKeys:
theWindow,NSViewAnimationTargetKey,
NSViewAnimationFadeInEffect,NSViewAnimationEffectKey,nil];
NSViewAnimation * fadeWindowIntAnim = [[[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dictIn]] autorelease];
[fadeWindowIntAnim setAnimationCurve:NSAnimationLinear];
[fadeWindowIntAnim setDuration:2];
[fadeWindowIntAnim setFrameRate:20.0];
//--start the animation
[fadeWindowIntAnim startAnimation];
//--set the timer for the fade out animation
[NSTimer scheduledTimerWithTimeInterval:4.8 target:self selector:@selector(fadeWindowOut) userInfo:nil repeats:NO];
}
-(void)fadeWindowOut{
//-- fade the window.
NSDictionary *dictOut = [NSDictionary dictionaryWithObjectsAndKeys:
theWindow,NSViewAnimationTargetKey,
NSViewAnimationFadeOutEffect,NSViewAnimationEffectKey,nil];
NSViewAnimation * fadeOutAnim = [[[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dictOut]] autorelease];
[fadeOutAnim setAnimationCurve:NSAnimationLinear];
[fadeOutAnim setDuration:1.2];
[fadeOutAnim setFrameRate:20.0];
[fadeOutAnim startAnimation];
}
theWindow是您希望淡入淡出的NSWindow或NSView。阅读参考资料以了解选项。
答案 2 :(得分:0)
您可以创建自己的弹出窗口(使用NSTimer根据需要关闭),但也许更简单的方法是在http://code.google.com/p/toast-notifications-ios/使用现有的第三方库。该库模拟Android的“吐司”功能。
请注意,此库适用于iOS开发(不是OSX),但不确定您计划定位到哪个平台。无论如何,它应该适应一点点工作。
答案 3 :(得分:0)
关于计时器的其他答案和这样的方面很好地涵盖了它。我只是想跳进去,建议你看一下Growl框架。在Apple将其构建到操作系统之前,这似乎是执行此类被动通知的首选方式。
除此之外,它还可以让用户对通知的外观,屏幕上的显示位置,停留时间以及甚至允许显示通知的用户进行大量控制。他们这样做,而无需编写任何代码。缺点是你的用户必须安装另一件事,这可能是你的应用程序的交易破坏者。
他们最近也进入了App Store并开始收取象征性的费用(我认为是2美元或3美元),这可能被视为一个缺点,但我认为这是一个更积极的事情:用户将有一个更容易的时间现在安装它。
一些使用Growl通知的应用程序包括BBEdit,Transmission,Scrivener,Twitteriffic等。这就是说它不是一夜之间的事情。
作为一个用户,我讨厌当应用程序尝试滚动自己的通知时,因为我失去了对Growl的所有控制权。
无论如何,只是一个想法。