【问题标题】:Create a temporary HUD popup notification in Cocoa App在 Cocoa App 中创建临时 HUD 弹出通知
【发布时间】:2021-05-23 06:26:25
【问题描述】:

我试图弹出一个窗口来通知用户一个动作,有点像 Flutter 应用程序在收到手势时显示播放/暂停通知的方式。

这会出现大约两秒钟然后消失。该应用程序本身是从菜单栏运行的,因此此弹出窗口不会控制当前处于焦点的任何应用程序,而只是显示在其顶部并且无法与之交互。我基本上想重新创建这个。在体内说 - (void)popup:(id)sender {}

这本质上与 android 上的 toast 非常相似。

编辑:我仔细查看了颤振应用程序,它所做的只是显示两张图像 (.png),一张用于巨大的暂停,另一张用于指示其所在的应用程序(在本例中为 iTunes)。现在的问题是如何显示这样的图像。

【问题讨论】:

  • 类似的问题是here

标签: objective-c cocoa


【解决方案1】:

【讨论】:

  • 仔细观察 Flutter 应用,它实际上只是一个正在显示的 png 文件。任何想法如何做到这一点?我想避免咆哮,将查看其他链接
  • 嗯不确定.. 祝你好运,希望你把它整理好!
【解决方案2】:

为了复制这一点,我从界面构建器中添加了一个“HUD 窗口”,它只是一个 NSPanel。然后我向面板添加了一个图像视图并将面板的颜色设置为清除。然后我能够将面板定位到我想要并覆盖适当的图像。

【讨论】:

    【解决方案3】:

    我正在使用此代码:

    
    static void showHud(NSString* text, int width, int height, CGFloat duration, int fontSize) {
    
        NSWindow* window = [NSWindow new];
        [window setFrame:NSMakeRect(0,0,width,height) display:NO];
        [window center];
    
        window.titleVisibility = NSWindowTitleHidden;
        window.styleMask = NSWindowStyleMaskBorderless;
        window.alphaValue = 0.9;
        window.movableByWindowBackground = YES;
    
        [window setLevel: NSStatusWindowLevel];
        [window setBackgroundColor: [NSColor clearColor]];
        [window setOpaque:NO];
        //[window setHasShadow:NO];
    
        [window makeKeyAndOrderFront:NSApp];
    
        NSVisualEffectView *view = [[NSVisualEffectView new] initWithFrame:window.contentView.bounds];;
    
        view.translatesAutoresizingMaskIntoConstraints = NO;
    
        [view setBlendingMode:NSVisualEffectBlendingModeBehindWindow];
        [view setMaterial:NSVisualEffectMaterialDark];
        [view setState:NSVisualEffectStateActive];
    
        //[view setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]];
    
        //[view setWantsLayer:NO];
        [view setWantsLayer:YES];
        view.layer.cornerRadius = 16.;
        //view.layer.shouldRasterize = YES;
        //view.layer.rasterizationScale = 0.45;
        view.layer.shadowOpacity = 0.1; //0.01;
        view.layer.edgeAntialiasingMask = kCALayerTopEdge | kCALayerBottomEdge | kCALayerRightEdge | kCALayerLeftEdge;
    
        [window.contentView addSubview:view];
        //window.contentView = view;
    
        NSTextField *label = [[NSTextField alloc] initWithFrame:view.bounds];
    
        [label setBezeled:NO];
        [label setDrawsBackground:NO];
        [label setEditable:NO];
        [label setSelectable:NO];
        
        label.stringValue = text;
        label.alignment = NSTextAlignmentCenter;
        label.textColor = [NSColor whiteColor];
        label.backgroundColor = [NSColor clearColor];
        label.font = [NSFont fontWithName:@"Arial-BoldMT" size:fontSize];
    
        //NSRect titleRect = [label titleRectForBounds:view.bounds];
        NSSize cellSize = [label.cell cellSizeForBounds:view.bounds];
        NSSize strSize = cellSize; // [label.attributedStringValue size];
        NSRect frame = view.frame;
        frame.origin.y = frame.size.height / 2 -  strSize.height / 2;
        frame.size.height = strSize.height;
        label.frame = frame;
     
        [view addSubview:label];
    
        [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
            context.duration = duration;
            window.animator.alphaValue = 0.;
        } completionHandler:^{
            [window close];
        }];
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-14
      • 2010-09-17
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      相关资源
      最近更新 更多