これが私の問題です。ペン先のないアプリがあります。このアプリは、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メソッドに配置しました。なぜそれがそのように機能するのか考えていますか?