IOS Objective C 保存图像,通过按住在 UIWebview 中显示的图像,就像在 Safari 中一样



我是IOS的初学者。我正在编写一个在UIWebview中显示网站的应用程序。现在我希望当用户按住图像时,他可以像在 safari 中一样保存图像。我的代码现在看起来像这样,但应用程序甚至无法识别长按手势:

    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
else if([request.URL.absoluteString containsString:@".png"]||[request.URL.absoluteString containsString:@".jpg"]){
            self.lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressGestures:)];
            self.lpgr.minimumPressDuration = 1.0f;
            self.lpgr.allowableMovement = 100.0f;
            self.lpgr.delegate = self;
            [self.webVIew addGestureRecognizer:self.lpgr];

        return false;
    }
    return TRUE;
}
- (void)handleLongPressGestures:(UILongPressGestureRecognizer *)sender
{
    NSLog(@"go within LongPressgesture methode");
    if ([sender isEqual:self.lpgr]) {
       if (sender.state == UIGestureRecognizerStateBegan)
       {
           NSLog(@"go within LongPressgesture methode2");
            UIMenuItem* myBtn1 = [[UIMenuItem alloc] initWithTitle: @"Speichern" action:@selector( onButton1: )];
            UIMenuController* mc = [UIMenuController sharedMenuController];
            mc.menuItems = [NSArray arrayWithObjects: myBtn1, nil];
                }

    }
    }
- (void) onButton1: (UIMenuController*) sender
{
    UIGraphicsBeginImageContext(self.webVIew.frame.size);
    [self.webVIew.layer renderInContext: UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(viewImage, self, nil, nil);
}
 and in the header file:
@interface WebViewController : UIViewController<UIWebViewDelegate, UIGestureRecognizerDelegate>{
    IBOutlet UIButton *btnHome;
    BOOL isLoaded;
    ACAccountStore *account ;

}

我不知道我做错了什么。感谢您的每一个建议。

WebView 已具有手势识别器。因此,您需要实现UIGestureRecognizerDelegate的方法- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer。否则,触摸仅发送到 Web 视图的手势识别器。

因此,将以下方法添加到代码中:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

将此协议添加到标头:UIGestureRecognizerDelegate

创建手势识别器时,添加以下行:

self.lpgr.delegate = self;

最新更新