2011-04-13 31 views
0

我已经让我认为是一个图像编辑器的完美开始。无论你点击什么,它都会绘制一个正方形。我的问题是,当你点击不同的地方,或拖动鼠标,它只是移动广场(而不是绘制另一个)。我怎样才能在自定义视图中绘制,而无需将其当前内容拖到任何地方?如何将自定义视图放入NSImageWell中?

这里是我的代码:

头(.h)

NSBezierPath *thePath; 
NSColor *theColor; 
NSTimer *updateTimer; 
NSPoint *mousePoint; 
int testInt = 1; 
int x = 0; 
int y = 0; 

@interface test : NSView { 
    IBOutlet NSView *myView; 
    IBOutlet NSButton *button; 

} 

@property (readwrite) NSPoint mousePoint; 

@end 

.m文件(不管它是叫)

@implementation test 

@synthesize mousePoint; 

- (void) mouseDown:(NSEvent*)someEvent {   
    mousePoint = [someEvent locationInWindow]; 
    NSLog(@"Location: x= %f, y = %f", (float)mousePoint.x, (float)mousePoint.y); 
    x = mousePoint.x; 
    y = mousePoint.y; 
    [button setHidden:TRUE]; 
    [button setHidden:FALSE]; 
    [self setNeedsDisplay:YES]; 

} 

- (void) mouseDragged:(NSEvent *)someEvent { 
    mousePoint = [someEvent locationInWindow]; 
    NSLog(@"Location: x= %f, y = %f", (float)mousePoint.x, (float)mousePoint.y); 
    x = mousePoint.x; 
    y = mousePoint.y; 
    [button setHidden:TRUE]; 
    [button setHidden:FALSE]; 
    [self setNeedsDisplay:YES]; 

} 

- (void) drawRect:(NSRect)rect; { 
    thePath = [NSBezierPath bezierPathWithRect:NSMakeRect(x, y, 10, 10)]; 
    theColor = [NSColor blackColor]; 
    [theColor set]; 
    [thePath fill]; 

} 

@end 

为什么不这项工作?

回答

1

它移动你当前的矩形,因为那是唯一的矩形。如果要绘制多个矩形并使其保持不变,则需要将代表矩形的NSBezierPath对象(我建议使用NSArray)存储起来,然后遍历数组并绘制每个矩形。

查看您当前的代码,您应该执行mouseUp:并将对象与您的x和y坐标存储在NSArray中。然后在drawRect:只是循环通过NSBezierPath对象的数组并绘制每个对象。

+0

非常感谢。这听起来像它会工作 – Justin 2011-04-14 17:42:54

+0

它完美的工作!非常感谢! – Justin 2011-04-15 13:48:58

相关问题