私の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はこのプロジェクトの例であり、どのように動作しないのでしょうか。
私はそれを指摘するように更新しましたが、それでも描き直すことはありません。申し訳ありませんが、私はObject-Cで新しいです –
'brightnessView'コンセントは接続されていますか? 'sliderChange:'の 'NSLog'を使ってチェックする必要があります。 –
私はそれを積み重ねるためにコードを単純化しようとしましたが、それが実際に働いていない理由を示すために更新しました。彼らは別のxibのに接続されていると私は1つのxibにそれらを作るか、別の方法があるでしょうか私は明るさview –