Изображение из WebView перетаскивается на IKImageView - PullRequest
1 голос
/ 18 декабря 2009

У меня есть WebView , куда я загружаю содержимое веб-архива. В том же виде у меня есть IKImageView розетка. Перетаскивание изображений из веб-вида в режим просмотра изображений не работает для меня.

Что странно, это работает, когда я перетаскиваю фотографию, например. из iPhoto на то же изображение. Кроме того, я могу перетащить изображение из веб-просмотра на NSScrollView (который создает ссылку на изображение) и перетащить ту же фотографию в новое почтовое сообщение (созданное изображение, как ожидалось).

IKImageView имеет «Поддерживает перетаскивание» в IB.

Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 18 декабря 2009

IKImageView, вероятно, ожидает монтажную панель NSFilenamesPboardType, как веб-просмотр обрабатывает перетаскивание изображений?

0 голосов
/ 16 января 2010

Оказалось, что лучший способ обработки d'n'd в моем случае - через WebArchivePboardType. Тогда:

- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
    NSPasteboard *pboard;
    NSDragOperation sourceDragMask;

    sourceDragMask = [sender draggingSourceOperationMask];
    pboard = [sender draggingPasteboard];

    // Create image data from webarchive stored in a pasteboard.    
    NSData *image = [pboard dataForType:WebArchivePboardType];
    WebArchive *webArchive = [[WebArchive alloc] initWithData:image];

    // Let's see what are we dragging.
    for (WebResource *subresource in [webArchive subresources])
    {
        NSString *mimeType = [subresource MIMEType];
        if ([mimeType hasPrefix:expectedMimeTypeStartsWith])
        {
            NSData *data = [subresource data];

            CFDataRef imgData = (CFDataRef)data;
            CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData (imgData);

            CGImageRef image;

            if ([mimeType hasSuffix:@"png"])
            {
                image = CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);   
            }
            else if ([mimeType hasSuffix:@"jpeg"])
            {
                image = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
            }

            [self setImage:image imageProperties:nil];
        }
    }
    return YES;
}
...