我是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;