mouseDragged:在CGRect上

时间:2013-08-04 15:41:24

标签: cocoa core-graphics quartz-core

我试图拖动CGRect,但没有任何反应。矩形停留在同一个地方。这是我的mouseDragged:代码:

-(void)mouseDragged:(NSEvent *)theEvent{

NSPoint eventLocation = [theEvent locationInWindow];
NSPoint location = [self convertPoint:eventLocation fromView:self];

int locationX = location.x;
int locationY = location.y;

[self setNeedsDisplay:TRUE];

if(CGRectContainsPoint(myRect, location)){

myRect.origin.x = locationX;
myRect.origin.y = locationY;
}
}

此代码位于NSView内。我在myRect中绘制了矩形drawRect

这是我的drawRect:

- (void)drawRect:(NSRect)rect
{

int width = self.bounds.size.width;
int height = self.bounds.size.height;

myRect = CGRectMake((width/2)-50, (height /2)-50, 100, 100);


CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetRGBFillColor(myContext, 1, 0, 0, 1);
CGContextFillRect(myContext, myRect);

 NSLog(@"drawRect: called");

}

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您始终将myRect设置为drawRect:内的常量值。看起来你想要的是在myRect中根本不设置drawRect:并用它的当前值绘制它。所以像这样:

- (void)drawRect:(NSRect)rect
{
    CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];
    CGContextSetRGBFillColor(myContext, 1, 0, 0, 1);
    CGContextFillRect(myContext, myRect);

    NSLog(@"drawRect: called");
}