2012-02-20 16 views
0

私のNSRectはBrightnessView.mで描画されており、NSViewのカスタムクラスである "brightness"というxibに接続されています。 PanelControllerは "controller"と呼ばれるもう1つのxibに接続されています。これは、スライダーがそのアクションにある場所です。 Panel Controller.hは、ビューのあるxibに接続されていないため、BrightnessViewへのコンセントを持つことはできません。アウトレットの代わりに、明るさのビューへのポインタが必要なのでしょうか、これは機能するでしょうか? は私が定期的にポインタが、この文句を言わない仕事SetNeedsDisplay not drawing NSRect

XIB上のファイルの所有者に接続され

//パネルController.h "コントローラ"

#import "BrightnessView.h" 

@interface PanelController : NSWindowController 
{ 
    BrightnessView *_myBrightnessView; 

} 

@property (assign) BrightnessView *BrightnessView; 

@end 

//パネルController.mを追加

@synthesize BrightnessView = _myBrightnessView; 
- (IBAction)sliderChange:(id)sender; 
{ 
     [_myBrightnessView.self setNeedsDisplay:YES]; 
} 

//BrightnessView.m xibのNSViewに接続された「明るさ」

- (void)drawRect:(NSRect)theRect 
     { 
      NSLog(@"the view is drawn"); 
      NSRect contentRect = NSInsetRect([self bounds], 0, 0); 
      NSBezierPath *path = [NSBezierPath bezierPath]; 

      [path moveToPoint:NSMakePoint(_arrowX, NSMaxY(contentRect))]; 
      [path lineToPoint:NSMakePoint(_arrowX/2, NSMaxY(contentRect))]; 
      [path lineToPoint:NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect))]; 

      NSPoint topRightCorner = NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect)); 
      [path curveToPoint:NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect)) 
       controlPoint1:topRightCorner controlPoint2:topRightCorner]; 

      [path lineToPoint:NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect))]; 

      NSPoint bottomRightCorner = NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect)); 
      [path curveToPoint:NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect)) 
       controlPoint1:bottomRightCorner controlPoint2:bottomRightCorner]; 

      [path lineToPoint:NSMakePoint(NSMinX(contentRect), NSMinY(contentRect))]; 

      [path curveToPoint:NSMakePoint(NSMinX(contentRect), NSMinY(contentRect)) 
       controlPoint1:contentRect.origin controlPoint2:contentRect.origin]; 

      [path lineToPoint:NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect))]; 

      NSPoint topLeftCorner = NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect)); 
      [path curveToPoint:NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect)) 
       controlPoint1:topLeftCorner controlPoint2:topLeftCorner]; 

      [path lineToPoint:NSMakePoint(_arrowX/2, NSMaxY(contentRect))]; 
      [path closePath]; 

      [the_Color setFill]; 
      [path fill]; 

      [NSGraphicsContext saveGraphicsState]; 

      NSBezierPath *clip = [NSBezierPath bezierPathWithRect:[self bounds]]; 
      [clip appendBezierPath:path]; 
      [clip addClip]; 

      [NSGraphicsContext restoreGraphicsState]; 
     } 


     - (void)setArrowX:(NSInteger)value 
     { 
      _arrowX = value; 
     } 

www.mediafire.com/?66q8jv3vly1cch4はこのプロジェクトの例であり、どのように動作しないのでしょうか。

答えて

3

のインスタンスがBrightnessViewの場合、ユーザーがスライダを移動するたびに作成されます。それは間違いです。既存のBrightnessViewインスタンスを使用する必要があります。 PanelControllerには、既存のインスタンスを指すプロパティまたはインスタンス変数が必要です。

+0

私はそれを指摘するように更新しましたが、それでも描き直すことはありません。申し訳ありませんが、私はObject-Cで新しいです –

+2

'brightnessView'コンセントは接続されていますか? 'sliderChange:'の 'NSLog'を使ってチェックする必要があります。 –

+0

私はそれを積み重ねるためにコードを単純化しようとしましたが、それが実際に働いていない理由を示すために更新しました。彼らは別のxibのに接続されていると私は1つのxibにそれらを作るか、別の方法があるでしょうか私は明るさview –