Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我的NSView子类不会刷新/重画,但会调用-drawRect_Objective C_Cocoa - Fatal编程技术网

Objective c 我的NSView子类不会刷新/重画,但会调用-drawRect

Objective c 我的NSView子类不会刷新/重画,但会调用-drawRect,objective-c,cocoa,Objective C,Cocoa,我有一个简单的测试应用程序,我有问题。UI是两个滑块(x&y)和一个自定义视图,我在其上画了一个红点。此时,圆点将显示在初始位置,但不会随滑块移动。使用NSLog,我可以知道当我移动滑块时,调用了drawRect,并且x和y数据是当前数据。 NSView的我的子类: #import <Cocoa/Cocoa.h> @interface BallView : NSView { NSRect rect; NSBezierPath *bp2; } @property (

我有一个简单的测试应用程序,我有问题。UI是两个滑块(x&y)和一个自定义视图,我在其上画了一个红点。此时,圆点将显示在初始位置,但不会随滑块移动。使用NSLog,我可以知道当我移动滑块时,调用了drawRect,并且x和y数据是当前数据。 NSView的我的子类:

#import <Cocoa/Cocoa.h>


@interface BallView : NSView {
    NSRect rect;
    NSBezierPath *bp2;
}
@property (readwrite) NSRect rect;
@end

#import "BallView.h"


@implementation BallView
@synthesize rect;
- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
    rect = NSMakeRect(50, 10, 10, 10);

    }
    return self;
}


- (void)drawRect:(NSRect)dirtyRect {
    NSLog(@"draw rect: %f, %f", rect.origin.x, rect.origin.y);
    bp2 = [NSBezierPath bezierPath]; 
    [bp2 appendBezierPathWithOvalInRect: rect];
    NSColor *color2 = [NSColor redColor];
    [color2 set];
    [bp2 fill]; 
}

您不会告诉视图它需要重新绘制。放

[ballView setNeedsDisplay:YES];
进入变异动作的状态。我通常会为此实现setter,并让他们从视图内部调用它,而不是综合它

[ballView setNeedsDisplay:YES];