Swift导航控制器(navigationController)全屏滑动返回功能实现

navigationController(导航控制器)的view自带了滑动手势,只要在屏幕左侧向右拖动页面,就可以滑动返回到前面一个页面。但这个功能仅在屏幕左侧边缘滑动才能触发,我们可以稍作改造,让其支持全屏滑动返回。

1,全屏滑动返回实现原理

(1)系统自带的手势是 UIScreenEdgePanGestureRecognizer 类型对象,看名字就知道这个是屏幕边缘滑动手势。所以系统自带的滑动效果,自然只能实现侧边滑动。
(2)我们自己给导航控制器,添加一个全屏的滑动手势。然后用新添加的滑动手势,来调用系统实现的滑动返回功能,这样就实现了全屏滑动功能。

(3)注意:我们还要禁止系统自带滑动手势,同时只有非根控制器才有滑动返回功能,根控制器没有。

2,效果图:

3,实现代码:

import UIKit
 
class DetailViewController: UIViewController,  UIGestureRecognizerDelegate {
 
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let target = self.navigationController?.interactivePopGestureRecognizer!.delegate
        let pan = UIPanGestureRecognizer(target:target,
            action:Selector("handleNavigationTransition:"))
        pan.delegate = self
        self.view.addGestureRecognizer(pan)
        self.navigationController?.interactivePopGestureRecognizer!.enabled = false
    }
    
    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer,
        shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer:
        UIGestureRecognizer) -> Bool {
        if self.childViewControllers.count == 1 {
            return false
        }
        return true
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

原文出自:www.hangge.com

时间: 2024-11-03 21:07:01

Swift导航控制器(navigationController)全屏滑动返回功能实现的相关文章

jQuery实现带滚动导航效果的全屏滚动相册实例

  本文实例讲述了jQuery实现带滚动导航效果的全屏滚动相册.分享给大家供大家参考.具体如下: 运行效果图如下: 主要代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

jQuery实现带滚动导航效果的全屏滚动相册实例_jquery

本文实例讲述了jQuery实现带滚动导航效果的全屏滚动相册.分享给大家供大家参考.具体如下: 运行效果图如下: 主要代码如下: $(function() { //加载时的图片 var $loader= $('#st_loading'); //获取的ul元素 var $list= $('#st_nav'); //当前显示的图片 var $currImage = $('#st_main').children('img:first'); //加载当前的图片 //同时显示导航的项 $('<img>')

zepto fullpage js-zepto.fullpage.js想禁用手指上下滑屏的事件,只保留点击全屏滑动的事件的话该怎么做呢?

问题描述 zepto.fullpage.js想禁用手指上下滑屏的事件,只保留点击全屏滑动的事件的话该怎么做呢? 有了解zepto.fullpage.js的么?我如果想禁用手指上下滑屏的事件,只保留点击全屏滑动的事件的话该怎么做呢? *{ margin: 0; padding: 0; } html,body{ height: 100%; } #banner { height: 100%; overflow: hidden; } .section{ height: 100%; } .section1

Nokia S60真机的全屏getHeight()返回值BUG说明

在Nokia S60真机上这是一个BUG似乎: setFullScreenMode(true);调用之后, getHeight()返回的并不是全屏后的高度,比如他本应该返回208,但是他却返回144,所以,在真机测试时也要小心nokia s60的这个bug,不要因为屏幕高度获取不正确,导致fillRect与你预想不一致. 以上这个BUG,起码我的Nokia 7610就是这样.所以我必须在setFullScreenMode(true);全屏之后通过下面代码来获取真实的canvas高度: publi

手机端左右全屏滑动(加精)

上下滑动:http://blog.csdn.net/libin_1/article/details/50527583 下载http://download.csdn.net/detail/cometwo/9467993 <!DOCTYPE html> <html lang="en"> <head> <title>H5单页面手势滑屏切换</title> <meta name="viewport" char

Android 图片全屏滑动效果

修改一下代码,还可以有幻灯片效果. package com.h3c.my; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchLi

ios开发碰到自定义导航栏leftBarButtonItems导致滑动返回失效问题解决方法

通常使用导航控制器 navigationController 跳转到另一页面时,除了可以点击左上角的返回按钮,还可以通过在屏幕左侧向右滑动来返回到上一层.但如果自定义了 self.navigationItem.leftBarButtonItems 后会发现,滑动返回(swipe back)失效了. (如何自定义导航栏左侧按钮可以看这篇文章:Swift - 修改导航栏"返回"按钮文字,图标) 开发碰到自定义导航栏leftBarButtonItems导致滑动返回失效问题解决方法-leftb

Swift之UITabBarController 导航控制器的自定义_Swift

swift导航控制器,导航控制器类继承UITabBarController,具体代码如下所示: // AppDelegate.swift // Housekeeper // // Created by 卢洋 on //. // Copyright 年 奈文摩尔. All rights reserved. // import Foundation import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicatio

jquery手机全屏上下滑动

demo下载地址:http://download.csdn.net/detail/cometwo/9406374 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta content="width=device-width, initial-scale=