我正在制作一个简单的webView iOS 7应用程序,我希望用户能够向左或向右滑动以在网页上前进或后退。就像你在iOS中的safari一样。
我认为它被称为分页 - 但我不知道如何使用它。我该如何实现呢?我是个菜鸟,所以如果你能一步一步地告诉我,我会很感激。
由于
答案 0 :(得分:9)
我正在使用我的应用程序中的类似功能,这是我到目前为止所发现的 - 我还没有完成,但这是一种开始的方法。
首先,我假设您只针对iOS 7进行开发 - 虽然完全有可能为iOS 6构建这个,但如果您只是为7开发,则可以采用几个简洁的快捷方式。
使用UIScreenEdgePanGestureRecognizer
处理前进/后退手势。您将其添加到Web视图中,如下所示:
UIScreenEdgePanGestureRecognizer *bezelSwipeGestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(swipeBack:)];
bezelSwipeGestureRecognizer.edges = UIRectEdgeLeft;
bezelSwipeGestureRecognizer.delegate = self;
[self.view addGestureRecognizer:bezelSwipeGestureRecognizer];
UIView *invisibleScrollPreventer = [UIView new];
invisibleScrollPreventer.frame = CGRectMake(0, 0, 10, self.view.frame.size.height);
[self.view addSubview:invisibleScrollPreventer];
这将添加反滑动手势。棘手的部分是invisibleScrollPreventer - 它是一个不完美的黑客,但它将避免滚动你的网页视图而不是做后退动作。 (可能有更好的方法来解决这个问题,但这是我目前的解决方案。)
在swipeBack:
方法中,您将执行以下操作:
-(void)swipeBack:(UIScreenEdgePanGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateEnded) {
if (_webView.canGoBack) {
[_webView goBack];
}
}
}
您可以执行以下相同操作,将goForward:
方法添加到网络视图中。
真正的技巧是让您返回(或转发)的网页在您向后或向前滑动时显示在屏幕上,就像在iOS 7中的Safari一样。我不是100%肯定如何做到这一点(我还没有在我的应用程序中构建该功能,但我很快就会)并且我猜它是一个iOS 7 snapshotView并且应用了一些变暗。
根据您选择构建此内容的方式,您可能还需要查看custom navigation transitions in iOS 7。我不知道这个问题是否需要,但可能是。
祝你好运!答案 1 :(得分:1)
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "https://www.whatever.com")
let requestObj = NSURLRequest(URL: url!)
myWebView.loadRequest(requestObj)
//swipe left or right to go back or foward
var leftSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
var rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
leftSwipe.direction = .Left
rightSwipe.direction = .Right
view.addGestureRecognizer(leftSwipe)
view.addGestureRecognizer(rightSwipe)
}
//swipe left to go forward
func handleSwipes(sender:UISwipeGestureRecognizer) {
if (sender.direction == .Left) {
myWebView.goForward()
}
//swipe right to go backward
if (sender.direction == .Right) {
myWebView.goBack()
}
}
答案 2 :(得分:0)
您可以尝试以下方法:
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://yourwebsite.com")!
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true //so easy!
}
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
view = webView
}