Cocoa消息,无需任何操作

时间:2011-12-05 21:32:39

标签: objective-c cocoa

我正在尝试找出一种在用户保存设置时给予用户反馈的方法。类似于微软的“文件保存”对话框是否有这类对话的类?我不想要求用户采取任何行动。只是“你的设置已被保存”然后在短暂的延迟后消失。也许更好的描述方式就像一个淡入淡出类型的jQuery消息框

4 个答案:

答案 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的所有控制权。

无论如何,只是一个想法。