2010-12-15 8 views
8

組み込みのアドレス帳を含むいくつかのアプリケーションは、半透明で大きな影付きのテキストを持つHUDウィンドウを使用します。私は私のCocoa Macアプリで同様のウィンドウを実装したいと思います。アドレス帳の "Show in Large Type"のようなHUDスタイルのウィンドウを実装する方法

screenshot

どこかにウィンドウのこの種のフリーな実装はありますか?

もしそうでなければ、それを実装する最良の方法は何ですか?

http://github.com/NSGod/BlackBorderlessWindow

は基本的に、あなたがボーダレスNSWindowサブクラスを作成する必要があります。

答えて

22

は、ここでそれを行う方法を示すサンプルプロジェクトです。これを行う最も簡単な方法は、ウィンドウのサイズと配置を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サブクラスであるために、ウィンドウのcontentViewのクラスを設定し、ウィンドウと同様

@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 

また、あなたは丸い四角形を描画するカスタムNSViewサブクラスを作成することができます。 (アウトラインビューモードを使用して、開いている三角形をクリックすると、nibファイル内のウインドウのアイコン内にネストされたNSViewが表示されます)。ここでも、ビューはInterface Builderで普通のように見えますが、実行時には大丈夫です。

次に、NSTextFieldを表示の上に置き、それに応じてテキストを設定します。

一般的に、境界線のないウィンドウは扱いにくいことに注意してください(たとえば、ウィンドウをドラッグしたい場合は、その機能を自分で追加する必要があります)。 Appleには、たとえばドラッグを許可する方法のサンプルコードがあります。

alt text

+0

私が探していたものです。面白いことに、デモ・アプリケーションでもまったく同じ「1-800-MY-APPLE」サンプル・テキストを使用していました。 – amrox

+2

@amrox:まあ、私はデモを具体的に作った;-)(実際には、ボーダーレスウィンドウのサンプルプロジェクトがすでにありました。 – NSGod

+0

誰かがこれをOSXサービスにして、テキストをパイプするだけの方がいいのではないでしょうか。このようなアプリ(LargeType 1.0)がありましたが、中止され、ダウンロードが削除されました(!?)。あなたはそれのためにNSGod? – davemyron

3

このコードを共有していただきありがとうございます。私を助けてくれました! あなたは、ウィンドウのinit関数に次の行...

[self setBackgroundColor:[NSColor clearColor]]; 

を追加することができます。これにより、白い角が除去されます。

関連する問題