WebView中的图像拖到IKImageView上

时间:2009-12-18 12:43:37

标签: objective-c cocoa webkit ikimageview

我有 WebView ,我加载了webarchive的内容。在同一视图中,我有 IKImageView 插座。从Web视图拖放到图像视图的图像拖动对我来说不起作用。

有什么奇怪的,当我拖动照片时它会起作用,例如从iPhoto到同一图像视图。 此外,我可以将图像从我的Web视图拖到 NSScrollView (创建图像的链接),我可以将同一张照片拖到新的邮件消息上(按预期创建图像)。

IKImageView在IB中启用了“支持拖放”。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

IKImageView可能需要NSFilenamesPboardType的粘贴板,webview如何处理拖动图片?

答案 1 :(得分:0)

事实证明,在我的案例中处理dn'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;
}