iOS webView向左或向右滑动以进行导航

时间:2013-12-10 18:06:44

标签: ios uiwebview swipe-gesture

我正在制作一个简单的webView iOS 7应用程序,我希望用户能够向左或向右滑动以在网页上前进或后退。就像你在iOS中的safari一样。

我认为它被称为分页 - 但我不知道如何使用它。我该如何实现呢?我是个菜鸟,所以如果你能一步一步地告诉我,我会很感激。

由于

3 个答案:

答案 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
    }