2

これが私の問題です。ペン先のないアプリがあります。このアプリは、10.8通知のように見えるNSWindowを(フェードイン/フェードアウト効果で)表示します。

この通知には、次のようにプログラムで作成された2つのNSButtonがあります。

    NSImage *btnNeutral = [[NSImage imageNamed:@"btn-toaster-n.png"] retain];
    [btnNeutral setTemplate:NO];
    NSImage *btnPressed = [[NSImage imageNamed:@"btn-toaster-clic.png"] retain];
    [btnPressed setTemplate:NO];

    m_connectButton = [[NSButton alloc] initWithFrame:NSMakeRect(284, 49, 77, 22)];
    [m_connectButton setTarget:self];
    [m_connectButton setAction:@selector(connect:)];
    [m_connectButton setImage:btnNeutral];
    [m_connectButton setAlternateImage:btnPressed];
    [m_connectButton setButtonType:NSMomentaryChangeButton];
    [[m_connectButton cell] setImageDimsWhenDisabled:NO];
    [m_connectButton setBordered:NO];
    [m_connectButton setFocusRingType:NSFocusRingTypeExterior];
    [m_connectButton setTitle:Localizer::getInstance()->getLocalizedString(@"SYSTRAY_BALLOON_CONNECT_ACTION")];
    [m_connectButton setEnabled:YES];
    [self addSubview:m_connectButton];

注:NSWindowは透明で、NSViewは透明ですが、ボタンと同様にNSImageでスキンされています。

問題:2つのボタンのいずれかをクリックすると、5回に1回は機能します...

問題はどこから来るのですか?スレッドの問題?透明性?

ご入力いただきありがとうございます。

@Rob Keniger:はい、私はrunloopを持っています、私はこれで私のアプリを初期化します:

[NSApplication sharedApplication];

また、動的なNSMenuBarは、正常に動作するアプリです。

編集 回避策を見つけましたが、ここで何が欠けているのか知りたいです。ボタンの初期化を、カスタムビューのinitWithFrameメソッドから、この同じビューをホストしているウィンドウのinitWithContentRectメソッドに配置しました。なぜそれがそのように機能するのか考えていますか?

4

0 に答える 0