Как поместить пользовательский вид в NSImageWell? - PullRequest
0 голосов
/ 13 апреля 2011

Я сделал то, что считал идеальным началом для редактора изображений.Он рисует квадрат, где бы вы ни щелкнули.Моя проблема в том, что когда вы щелкаете в другом месте или перетаскиваете мышь, он просто перемещает квадрат (вместо того, чтобы рисовать другой).Как рисовать в пользовательском представлении, не «перетаскивая» его текущее содержимое везде?

Вот мой код:

Заголовок (.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 Ответ

1 голос
/ 14 апреля 2011

Он перемещает ваш текущий прямоугольник, потому что это единственный прямоугольник, который там есть. Если вы хотите нарисовать несколько прямоугольников и сохранить их, вам нужно сохранить где-нибудь NSBezierPath объекты, представляющие прямоугольники (я бы предложил NSArray), а затем перебрать массив и нарисовать каждый из них.

Глядя на ваш текущий код, вы должны реализовать mouseUp: и сохранить объект NSBezierPath с вашими координатами x и y в NSArray. Затем в drawRect: просто переберите массив из NSBezierPath объектов и нарисуйте каждый из них.

...