2013-05-06 2 views
0

Я никогда не занимался NSViews, поэтому я нахожусь в убытке от этого. У меня есть собственный класс, содержащий NSImage ivar. У меня также есть подкласс NSView, который содержит массив экземпляров моего пользовательского класса. NSImage из пользовательского класса рисуется в центре NSView при создании. Мне нужно уметь тащить это NSImage вокруг NSView свободно.Как реализовать перетаскивание NSImage внутри NSView?

Я выполнил следующие методы, чтобы начать работу:

-(void)mouseDown:(NSEvent *)theEvent 
{ 
    [self beginDraggingSessionWithItems: /* I don't know what to put here */ 
            event:theEvent 
           source:self]; 
} 

Я попытался поместить NSImage объект из моего пользовательского класса в массив в качестве элемента перетащить но исключение. Я также попытался создать NSDraggingItem, чтобы разместить его там, но он не смог записать объект в картотеку и создал исключение.

-(void)draggingSession:(NSDraggingSession *)session willBeginAtPoint:(NSPoint)screenPoint 
{ 
    NSLog(@"began"); 
} 

-(void)draggingSession:(NSDraggingSession *)session movedToPoint:(NSPoint)screenPoint 
{ 
    NSLog(@"moved"); 
} 

-(void)draggingSession:(NSDraggingSession *)session endedAtPoint:(NSPoint)screenPoint operation:(NSDragOperation)operation 
{ 
    NSLog(@"ended"); 
} 

Эти методы вызываются правильно, как я нажимаю и перетащить мышь вокруг моего подкласса NSView однако они бесполезны, пока я не могу получить объект для перемещения.

Я считаю, что ответ может состоять в том, чтобы создать для каждого изображения NSDraggingItem и использовать его для свободного перемещения вокруг представления, но я не мог заставить его работать с одним объектом и не знаю, как правильно реализовать эту идею. Любая помощь приветствуется.

ответ

0

Прошел много головной боли на этом, но, наконец, понял это. Вместо использования beginDraggingSessionWithItems:event:source я использовал dragImage:at:offset:event:pasteboard:source:slideBack:. Я отслеживать координаты каждого изображения в виде и могу сказать, было ли нажато конкретное изображение или нет, используя следующий метод, который я написал в mouseDown:

-(BOOL)clickedAtPoint:(NSPoint)point InsideRect:(NSRect)rect 
{ 
    if ((point.x < (rect.origin.x + rect.size.width) && 
     point.y < (rect.origin.y + rect.size.height)) && 
     point.x > rect.origin.x && point.y > rect.origin.y) { 
      return YES; 
     } 
    return NO; 
} 
+6

'dragImage: на: смещение: событие: картон: source: slideBack: 'устарел с 10.10 SDK. –