Изображение из WebView перетаскивается на IKImageView

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

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

В IKImageView в IB включена функция «Поддержка перетаскивания».

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


person Piotr Byzia    schedule 18.12.2009    source источник
comment
«Перетаскивание изображения из веб-представления в представление изображения не работает для меня». Пожалуйста, будьте более конкретными. Что происходит вместо этого?   -  person Peter Hosey    schedule 19.12.2009
comment
Я могу перетащить изображение (которое превращается в миниатюру и затеняется), но наведение курсора на IKImageView не переключает курсор на изображение с зеленым знаком плюс, а отпускание кнопки мыши приводит к тому, что мое перетаскиваемое изображение возвращается в веб-представление (к исходному место изображения).   -  person Piotr Byzia    schedule 19.12.2009


Ответы (2)


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

person catsby    schedule 18.12.2009

Выяснилось, что в моем случае лучше всего обращаться с 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;
}
person Piotr Byzia    schedule 16.01.2010