2015-08-28 5 views
2

Я пытаюсь получить скопированное изображение с UIWebView с помощью UIPasteboard.Получить изображение из UIWebView с помощью UIPasteboard

[_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"); 
} 

Если я копирую текст, это нормально, но если я копирую изображение я получаю:

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, что на самом деле богатый текст. Кто-нибудь может помочь?

ответ

0

Я нашел решение:

1) добавить длинный пресс жест на свой веб-просмотра

UILongPressGestureRecognizer* longTap = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:nil]; 
    longTap.delegate = self; 
    [_myWebView addGestureRecognizer:longTap]; 

2) реализовать метод делегата

- (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) проверка fo г существование данных после выбора внутри метода вы используете, чтобы получить текст и изображения

[_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]; 

    } 

Дело в том, что для выделения текста или изображения с веб-пользователь может делать длинное нажатие, поэтому я добавить еще один UILongPressGestureRecognizer для получения изображения. После этого я представляю свой пользовательский UIMenuItem, чтобы пользователь мог сохранить выбор.

 Смежные вопросы

  • Нет связанных вопросов^_^