2012-09-18 1 views
4

Я следую 23-й главе программирования какао Аарона для Mac OS X.
Мне нужно перетащить письмо из представления и скопировать его в другое приложение, например, в текстовое редактирование.
Это часть кода, с которым я нахожу проблемы:Изображение не хочет перетаскивать

- (void) mouseDragged:(NSEvent *)theEvent 
{ 
    NSPasteboard* pb=[NSPasteboard pasteboardWithName: NSDragPboard]; 
    NSPoint down=[mouseDownEvent locationInWindow]; 
    NSPoint drag=[theEvent locationInWindow],p; 
    NSSize size=[string sizeWithAttributes: attributes]; 
    NSRect imageBounds; 
    NSImage* image=[NSImage alloc]; 
    float distance; 
    distance= hypot(down.x-drag.x, down.y-drag.y); 
    if(distance<3 || [string length]==0) 
    return; 
    image=[image initWithSize: size]; 
    imageBounds.origin=NSZeroPoint; 
    imageBounds.size=size; 
    [image lockFocus]; 
    [self drawStringCenteredIn: imageBounds]; 
    [image unlockFocus]; 
    p=[self convertPoint: down fromView: nil]; 
    p.x= p.x - size.width/2; 
    p.y= p.y - size.height/2; 
    [self writeToPasteboard: pb]; 
    [self dragImage: image at: p offset: NSZeroSize event: mouseDownEvent pasteboard: pb source: self slideBack: YES]; 
} 

Где:
- mouseDownEvent это событие, ранее сохраненный, когда пользователь нажал на Лектера (MouseDown событий);
- string - это NSMutableAttributesString, строка с max 1 лекцией, которая содержит лекцию, которая будет отображаться в представлении;

Когда событие происходит, на экране уже отображается буква, поэтому строка имеет длину 1). Если я забуду некоторые важные сведения, пожалуйста, спросите.

Проблема: операция перетаскивания работает нормально, но проблема в том, что пока я перетаскиваю изображение, я не вижу, как изображение смещается из исходной позиции.
Это то, что я вижу, в то время как я тащу письмо:

enter image description here

Это то, что я должен видеть, вместо того, чтобы:

enter image description here

Так что письмо должно вытеснять, но это не Я не понимаю причину этой проблемы, я думаю, что метод drawImageCenteredIn должен работать нормально. Это код этого метода:

- (void) drawStringCenteredIn: (NSRect) rect 
{ 
    NSSize size=[string sizeWithAttributes: attributes]; 
    NSPoint origin; 
    origin.x= rect.origin.x+ (rect.size.width+size.width)/2; 
    origin.y=rect.origin.y + (rect.size.height+size.height)/2; 
    [string drawAtPoint: origin withAttributes: attributes]; 
} 

ответ

1

Это просто. Знак неверно в этих двух строках:

origin.x= rect.origin.x+ (rect.size.width-size.width)/2; 
    origin.y= rect.origin.y + (rect.size.height-size.height)/2; 

Вот исправленный метод:

- (void) drawStringCenteredIn: (NSRect) rect 
{ 
    NSSize size=[string sizeWithAttributes: attributes]; 
    NSPoint origin; 
    origin.x= rect.origin.x+ (rect.size.width-size.width)/2; 
    origin.y= rect.origin.y + (rect.size.height-size.height)/2; 
    [string drawAtPoint: origin withAttributes: attributes]; 
}