11

私のアプリでは、standardWindowButtons を閉じる/縮小する/展開する位置を次のように変更します。

 //Create the buttons
    NSButton *minitButton = [NSWindow standardWindowButton:NSWindowMiniaturizeButton forStyleMask:window.styleMask];
NSButton *closeButton = [NSWindow standardWindowButton:NSWindowCloseButton forStyleMask:window.styleMask];
NSButton *fullScreenButton = [NSWindow standardWindowButton:NSWindowZoomButton forStyleMask:window.styleMask];


//set their location
[closeButton setFrame:CGRectMake(7+70, window.frame.size.height - 22 - 52, closeButton.frame.size.width, closeButton.frame.size.height)];
[fullScreenButton setFrame:CGRectMake(47+70, window.frame.size.height - 22 -52, fullScreenButton.frame.size.width, fullScreenButton.frame.size.height)];
[minitButton setFrame:CGRectMake(27+70, window.frame.size.height - 22 - 52, minitButton.frame.size.width, minitButton.frame.size.height)];

//add them to the window
[window.contentView addSubview:closeButton];
[window.contentView addSubview:fullScreenButton];
[window.contentView addSubview:minitButton];

ボタンを含むウィンドウが表示されると、次の 2 つの問題があります。 1. それらは灰色で、正しい色ではありません。

誰が私が間違っているのか教えてください。ありがとう。

4

4 に答える 4

11

このホバー マジックのメカニズムは次のとおりです。 標準の丸で囲まれたボタン ( など) を描画する前に、ドキュメント化されNSWindowMiniaturizeButtonていないメソッド を呼び出します。このメソッドが返された場合、丸で囲まれたボタンはアイコンを内側に描画します。それで全部です。superview_mouseInGroup:YES

これらのボタンを独自のビュー内に配置すると、このメソッドを実装するだけで、このマウス ホバーの外観を必要に応じて制御できます。これらのボタンを移動または再レイアウトしただけで、それらがまだsubviews of (または類似のもの) のままである場合は、このクラスのNSThemeFrameメソッドをスウィズルする必要があります。_mouseInGroup:

私の場合NSView、標準ボタンをsubviews として含むカスタムがあり、このコードは上記のすべてを魔法にします:

- (void)updateTrackingAreas
{
    NSTrackingArea *const trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect options:(NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingInVisibleRect) owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];
}

- (void)mouseEntered:(NSEvent *)event
{
    [super mouseEntered:event];
    self.mouseInside = YES;
    [self setNeedsDisplayForStandardWindowButtons];
}

- (void)mouseExited:(NSEvent *)event
{
    [super mouseExited:event];
    self.mouseInside = NO;
    [self setNeedsDisplayForStandardWindowButtons];
}

- (BOOL)_mouseInGroup:(NSButton *)button
{
    return self.mouseInside;
}

- (void)setNeedsDisplayForStandardWindowButtons
{
    [self.closeButtonView setNeedsDisplay];
    [self.miniaturizeButtonView setNeedsDisplay];
    [self.zoomButtonView setNeedsDisplay];
}
于 2015-05-23T20:40:52.053 に答える
0

それらを再度追加することはありません。それらを contentView に移動しています。ボタンはもともと window.contentView.superview にあります。

[window.contentView.superview addSubview:closeButton];
[window.contentView.superview addSubview:fullScreenButton];
[window.contentView.superview addSubview:minitButton];

trackingArea を必要とせずに正しい動作が得られるはずです。

于 2013-07-02T18:20:30.557 に答える
-1

[button highlight:yes]ボタンごとに呼び出します。

于 2011-12-24T10:21:01.143 に答える