首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UIWebView从UIPasteboard获取图像

使用UIWebView从UIPasteboard获取图像
EN

Stack Overflow用户
提问于 2015-08-28 09:33:29
回答 1查看 882关注 0票数 2

我正在尝试使用UIWebView获取UIPasteboard复制的图像。

代码语言:javascript
复制
[_myWebView copy:[UIApplication sharedApplication]]; //Copy selection to general pasteboard

NSArray* types = [NSArray arrayWithArray:[UIPasteboard generalPasteboard].pasteboardTypes];
NSLog(@"Type %@", [types objectAtIndex:0]);

if([[UIPasteboard generalPasteboard] containsPasteboardTypes:UIPasteboardTypeListString]){

    NSLog(@"text selected %@",[UIPasteboard generalPasteboard].string);

}else if([[UIPasteboard generalPasteboard] containsPasteboardTypes:UIPasteboardTypeListImage]){

    NSLog(@"image selected");

}else if ([[UIPasteboard generalPasteboard] containsPasteboardTypes:UIPasteboardTypeListURL]){

    NSLog(@"url selected");
}

如果我复制文本,这是可以的,但如果我复制一个图像,我得到:

代码语言:javascript
复制
WebController.m:445 > Type com.apple.rtfd
WebController.m:458 > text selected {\rtf1\ansi\ansicpg1252
{\fonttbl\f0\fnil\fcharset0 .SFUIText-Regular;}
{\colortbl;\red255\green255\blue255;\red45\green45\blue45;}
\deftab720
\pard\pardeftab720\qc\partightenfactor0
\f0\fs32 \cf2 \expnd0\expndtw0\kerning0
\outl0\strokewidth0 \strokec2 \
}

我从不同的网站尝试了许多图片,但我总是得到rtfd类型,那实际上是丰富的文本。有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-30 19:32:13

我找到了一个解决办法:

1)在您的web视图中添加一个长按压手势

代码语言:javascript
复制
UILongPressGestureRecognizer* longTap = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:nil];
    longTap.delegate = self;
    [_myWebView addGestureRecognizer:longTap];

2)实现委托方法。

代码语言:javascript
复制
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    NSLog(@"TAPPED");

    if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {

        CGPoint touchPoint = [touch locationInView:self.view];

        NSString *imgURL = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", touchPoint.x, touchPoint.y];
        NSString *urlToSave = [_myWebView stringByEvaluatingJavaScriptFromString:imgURL];
        NSURL * imageURL = [NSURL URLWithString:urlToSave];
        NSLog(@"image URL :%@",urlToSave);

        NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
        UIImage * image = [UIImage imageWithData:imageData];
        NSLog(@"Image:%.00fx%.00f",image.size.height,image.size.width);

        if (image != nil) {
            NSLog(@"image exist 1");
            _selectedImageDataAtPoint = imageData;

        }

    }
    return YES;
}

其中,"_selectedImageDataAtPoint“是NSData类型的类变量,如果存在,则存储数据映像。

3)在用于获取文本和图像的方法中选择后,检查数据是否存在。

代码语言:javascript
复制
[_myWebView copy:[UIApplication sharedApplication]]; //Copy selection to general pasteboard

    NSArray* types = [NSArray arrayWithArray:[UIPasteboard generalPasteboard].pasteboardTypes];
    NSLog(@"Type %@", [types objectAtIndex:0]);

    if ([[types objectAtIndex:0] isEqualToString:@"com.apple.rtfd"]) {

        if ([UIImage imageWithData:_selectedImageDataAtPoint] != nil) {

            NSLog(@"image exist 2");
            _manualRecipe.imageData = _selectedImageDataAtPoint;
            [self openActivityWithImage];

        }

    }else if([[UIPasteboard generalPasteboard] containsPasteboardTypes:UIPasteboardTypeListString]){

        NSLog(@"text selected: %@",[UIPasteboard generalPasteboard].string);
        NSString* text = [UIPasteboard generalPasteboard].string;
        [self openActivityWithText:text];

    }

关键是,为了从web中选择文本或图像,用户需要进行长时间的按压,所以我添加了另一个获取图像的UILongPressGestureRecognizer。在此之后,我将显示我的自定义UIMenuItem,让用户保存所选内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32267818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档