【问题标题】:Window Fade in and Out窗口淡入淡出
【发布时间】:2010-12-28 17:20:55
【问题描述】:

如何让窗口在打开时淡入,在关闭时淡出?

这可能应该在 Objective C 中完成。这必须是 AppleScript-Objective-C 项目的一部分。我正在使用链接到窗口的属性,并在其上执行 makeKeyAndOrderFront...

任何帮助将不胜感激!

【问题讨论】:

    标签: objective-c cocoa macos window


    【解决方案1】:

    子类(或添加类别)NSWindow 并添加:

    - (void)fadeInAndMakeKeyAndOrderFront:(BOOL)orderFront {
        [self setAlphaValue:0.0];
        if (orderFront) {
            [self makeKeyAndOrderFront:nil];
        }
        [[self animator] setAlphaValue:1.0];
    }
    
    - (void)fadeOutAndOrderOut:(BOOL)orderOut {
        if (orderOut) {
            NSTimeInterval delay = [[NSAnimationContext currentContext] duration] + 0.1;
            [self performSelector:@selector(orderOut:) withObject:nil afterDelay:delay];
        }
        [[self animator] setAlphaValue:0.0];
    }
    

    这允许您以编程方式淡入/淡出窗口。

    要在按下关闭按钮时让窗口淡出,请将其添加到窗口的委托中:

    - (BOOL)windowShouldClose:(id)sender {
        [window fadeOutAndOrderOut:YES];
        return NO;
    }
    

    显示一个淡入调用[window fadeInAndMakeKeyAndOrderFront:YES]; 的窗口,而不是其他方式调用的窗口。

    【讨论】:

    • 非常感谢!它看起来应该可以工作,我在构建时没有收到任何错误,但它不起作用。
    • 您的窗口需要具有 0.0 的 alpha 值才能看到淡入。现在应该可以工作了。
    • 必须以编程方式调用这些函数来淡化你的窗口(并且这样工作)。我添加了一个注释和 sn-p 用于将淡入淡出效果附加到窗口的关闭按钮。 (我还用 [window makeKeyAndOrderFront:] 替换了 [window orderFront:],因为这就是您可能想要的。)
    • 我有一件大事...这必须是 AppleScript-Objective-C 菜单栏应用程序的一部分。我正在使用链接到窗口的属性,并在按下菜单项时对其执行 makeKeyAndOrderFront 。任何方式我都可以在 AppleScript-Objective C 中淡入窗口?
    • 在 Applescript Studio 中曾经有“调用方法”fadeInAndMakeKeyAndOrderFront:“的 foo 参数为 true”。不确定这是否仍然是正确的方法。几年前(前 ScriptingBridge 时代)。我只需添加一个带有“- (IBAction)showWindowWithFade:(id)sender;”的 Cocoa 对象。不过,他唯一的工作就是处理褪色。然后它也将成为窗口的委托并实现“- (BOOL)windowShouldClose:(id)sender;”如我的回答所示。你的问题只是可可。我认为,从 Applescript 调用 Objective-C 时,您最好打开一个新问题。
    猜你喜欢
    • 2011-04-15
    • 2019-05-02
    • 2012-05-25
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多