如果您在 ios 7 Safari 应用程序中看到左右拖动以查看网页历史记录。它还在拖动时显示上一页的内容。我想要使用 UIWebiview 的类似功能。
我可以前进和后退页面,但是如何实现显示先前内容的拖动功能?
如果您在 ios 7 Safari 应用程序中看到左右拖动以查看网页历史记录。它还在拖动时显示上一页的内容。我想要使用 UIWebiview 的类似功能。
我可以前进和后退页面,但是如何实现显示先前内容的拖动功能?
注意:这仅适用于 iOS 7。对于 iOS 6,您应该使用 PanGestureRecognizer 并检测它是左还是右。
您需要两个属性:
@property (nonatomic, strong) UIImageView * imgvcChild1;
@property (retain, strong) IBOutlet UIWebView *webView;
首先,将手势识别器添加到 webView:
[[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(EdgeLeftPanDetected:)];
panLeft.edges = UIRectEdgeLeft;
[self.webView addGestureRecognizer:panLeft];
控制手势:
- (void) EdgeLeftPanDetected:(UIScreenEdgePanGestureRecognizer*)gesture {
if (gesture.state == UIGestureRecognizerStateBegan) {
UIGraphicsBeginImageContext ( self.webView.frame.size );
[self.webView.layer renderInContext:UIGraphicsGetCurrentContext() ];
UIImage *grab = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if ( _imgvcChild1 ) [ _imgvcChild1 removeFromSuperview ];
_imgvcChild1 = [[ UIImageView alloc ] initWithImage:grab ];
_imgvcChild1.frame = self.webView.frame;
_imgvcChild1.userInteractionEnabled = YES;
_imgvcChild2 = [self.arrayImagenes lastObject];
if ([self.webView canGoBack]) {
[self.webView goBack];
}
[ self.view addSubview:_imgvcChild1 ];
}
if (gesture.state == UIGestureRecognizerStateChanged) {
_imgvcChild1.frame = CGRectMake([ gesture locationInView:_imgvcChild1.superview ].x, _imgvcChild1.frame.origin.y, _imgvcChild1.frame.size.width, _imgvcChild1.frame.size.height);
}
}
if (gesture.state == UIGestureRecognizerStateEnded) {
[_imgvcChild1 removeFromSuperview];
}
}
这是一个原型,需要做很多工作,只是为了返回,返回的页面没有动画。如果你想在前一页有动画,你需要在加载新页面之前创建一个图像并将其存储在一个上NSMutableArray
,然后用不同的动画显示它(这个图像从屏幕的 -1/4 开始,就像速度的 1/4 imgvcChild1
)
UIImageViews
如果您也想继续前进,您将需要另一个手势识别器和另一个数组。
几天前我也有类似的要求。我为此做了很多研究,但没有运气。我在某处读到这种手势(历史拖动)由操作系统或浏览器本身管理。
历史拖动手势不适用于UIWebView。截至目前,您无法使用UIWebView执行此操作。
实现此功能的一个手势是 UIPanGestureRecognizer,但是,您仍然无法获得上一页的内容(历史记录)。