2012-03-23 8 views
-1

ビュー(NSView)と2つの子ビューContentStatusBar(いずれも単純なNSViews)があります。NSView +の可視性を切り替える方法

StatusBarビューを切り替えるのに最適なココアにはどのような方法がありますか?

  • 提案された解決策は、私は本当に(例えばBWToolkit)など、外部のプラグインに関連する任意の提案を必要としないアニメーション
  • が含まれている場合、私は本当に、それを愛するだろう

編集:

リサイズ部として

  • StatusBarビューがなくなると、Contentビューがその場所を占有する(最適な方法)か、それに応じてMainビューが縮小されます。
  • 上記のシナリオでは逆です。
+0

うーん... downvotes、説明もなく...本当に彼らの目的を倒す...:| –

答えて

0

OK。だから私は何度も繰り返し考えてきました。それが私が管理してきたものです。ビューを切り替えるためのNSViewのカテゴリ... :-)

ヘッダー:

#import <AppKit/AppKit.h> 

#define DIRECTION_UP  0 
#define DIRECTION_RIGHT  1 
#define DIRECTION_DOWN  2 
#define DIRECTION_LEFT  3 

@interface NSView (NSView_Functions) 

- (void)toggleWithView:(NSView*)mainView usingDirection:(int)direction; 

@end 

実装:

#import "NSView+Functions.h" 

@implementation NSView (NSView_Functions) 

- (void)toggleWithView:(NSView*)mainView usingDirection:(int)direction 
{ 
    NSRect mr = [mainView frame]; 
    NSRect sr = [self frame]; 

    #ifdef DEBUG 

    NSLog(@"MR @ %f,%f (%f X %f)",mr.origin.x,mr.origin.y,mr.size.width,mr.size.height); 
    NSLog(@"SR @ %f,%f (%f X %f)",sr.origin.x,sr.origin.y,sr.size.width,sr.size.height); 

    #endif 

    NSRect newMr; 

    CGFloat newX; 
    CGFloat newY; 
    CGFloat newWidth; 
    CGFloat newHeight; 

    switch (direction) { 
     case DIRECTION_RIGHT: 
      newX = mr.origin.x; 
      newY = mr.origin.y; 
      newHeight = mr.size.height; 

      if (![self isHidden]) newWidth = mr.size.width + sr.size.width; 
      else newWidth = mr.size.width - sr.size.width; 

      break; 

     case DIRECTION_DOWN: 
      newX = mr.origin.x; 
      newWidth = mr.size.width; 

      if (![self isHidden]) 
      { 
       newY = mr.origin.y-sr.size.height; 
       newHeight = mr.size.height+sr.size.height; 
      } 
      else { 
       newY = mr.origin.y+sr.size.height; 
       newHeight = mr.size.height-sr.size.height; 
      } 

      break; 

     case DIRECTION_LEFT: 
      newY = mr.origin.y; 
      newHeight = mr.size.height; 

      if (![self isHidden]) 
      { 
       newX = mr.origin.x-sr.size.width; 
       newWidth = mr.size.width+sr.size.width; 
      } 
      else { 
       newX = mr.origin.x+sr.size.width; 
       newWidth = mr.size.width-sr.size.width; 
      } 

      break; 

     case DIRECTION_UP: 
      newX = mr.origin.x; 
      newY = mr.origin.y; 
      newWidth = mr.size.width; 

      if (![self isHidden]) newHeight = mr.size.height + sr.size.height; 
      else newHeight = mr.size.height - sr.size.height; 

      break; 

     default: 
      break; 
    } 

    newMr = NSMakeRect(newX,newY,newWidth,newHeight); 

    if (![self isHidden]) [self setHidden:YES]; else [self setHidden:NO]; 

    [mainView setFrame:newMr]; 
} 

@end 
関連する問題