8

組み込みのアドレスブックを含むいくつかのアプリは、半透明の HUD ウィンドウを使用し、大きな影付きのテキストを表示します。Cocoa Mac アプリに同様のウィンドウを実装したいと考えています。

スクリーンショット

この種のウィンドウの無料の実装はどこかにありますか?

そうでない場合、それを実装する最良の方法は何ですか?

4

2 に答える 2

23

これを行う方法を示すサンプル プロジェクトを次に示します。

http://github.com/NSGod/BlackBorderlessWindow

NSWindow基本的に、ボーダレスサブクラスを作成する必要があります。これを行う最も簡単な方法は、nib ファイルでウィンドウのサイズと配置を設定し、そのクラスをカスタム サブクラスに設定することです。したがって、Interface Builder では通常のウィンドウのように見えますが、実行時には必要に応じて表示されます。

@implementation MDBorderlessWindow

- (id)initWithContentRect:(NSRect)contentRect
            styleMask:(NSUInteger)windowStyle
              backing:(NSBackingStoreType)bufferingType
                defer:(BOOL)deferCreation {

    if (self = [super initWithContentRect:contentRect
                            styleMask:NSBorderlessWindowMask
                              backing:NSBackingStoreBuffered defer:deferCreation]) {
            [self setAlphaValue:0.75];
            [self setOpaque:NO];
            [self setExcludedFromWindowsMenu:NO];
    }
    return self;
}

アルファ値は、ウィンドウを半透明にします。

NSViewまた、丸い長方形を描画するカスタム サブクラスを作成することもできます。

@implementation MDBlackTransparentView

- (id)initWithFrame:(NSRect)frame {
    if (self = [super initWithFrame:frame]) {

    }
    return self;
}

- (void)drawRect:(NSRect)frame {
    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame
                                    xRadius:6.0 yRadius:6.0];
    [[NSColor blackColor] set];
    [path fill];
}

@end

ウィンドウと同様に、ウィンドウの contentView のクラスをカスタムNSViewサブクラスに設定するだけです。(アウトライン ビュー モードを使用し、開閉用三角ボタンをクリックしてNSView、nib ファイルのウィンドウのアイコン内にネストされたものを表示します)。繰り返しますが、View は Interface Builder では普通に見えますが、実行時には問題なく見えます。

次にNSTextField、ビューの上に配置し、それに応じてテキストを設定します。

一般に、ボーダレス ウィンドウは扱いにくいことに注意してください (たとえば、ウィンドウをドラッグできるようにしたい場合は、その機能を自分で追加する必要があります)。たとえば、Apple には、ドラッグを許可する方法に関するサンプル コードがいくつかあります。

代替テキスト

于 2010-12-15T05:58:45.347 に答える
3

このコードを共有していただきありがとうございます。とても助かりました!次の行を追加できます...

[self setBackgroundColor:[NSColor clearColor]];

ウィンドウのinit関数に。これにより、白い角が削除されます。

于 2012-11-08T20:20:13.423 に答える