iOS 开发 右滑返回上一级控制器

#import <objc/runtime.h>

@interface UINavigationController (Transition)<UIGestureRecognizerDelegate>

- (void)transitionPanGestureDidLoad;

@end

@interface DLNavigationTransition ()

@end

@implementation DLNavigationTransition

/**

*  启动右滑pop

*/

+ (void)enableNavigationTransitionWithPanGestureBack

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

Method viewDidLoadMethod = class_getInstanceMethod([UINavigationController class], @selector(viewDidLoad));

Method transitionPanGestureDidLoadMethod = class_getInstanceMethod([UINavigationController class], @selector(transitionPanGestureDidLoad));

method_exchangeImplementations(viewDidLoadMethod, transitionPanGestureDidLoadMethod);

});

}

@end

@implementation UINavigationController (Transition)

- (void)transitionPanGestureDidLoad

{

if ([self isKindOfClass:[UINavigationController class]])

{

[self transitionPanGestureDidLoad];

//1.获取系统interactivePopGestureRecognizer对象的target对象

id target = self.interactivePopGestureRecognizer.delegate;

//2.创建滑动手势,taregt设置interactivePopGestureRecognizer的target,所以当界面滑动的时候就会自动调用target的action方法。

//handleNavigationTransition是私有类_UINavigationInteractiveTransition的方法,系统主要在这个方法里面实现动画的。

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] init];

[pan addTarget:target action:NSSelectorFromString(@"handleNavigationTransition:")];

//3.设置代理

pan.delegate = self;

//4.添加到导航控制器的视图上

[self.view addGestureRecognizer:pan];

//5.禁用系统的滑动手势

self.interactivePopGestureRecognizer.enabled = NO;

}

}

#pragma mark - 滑动开始会触发

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

{

UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer;

CGPoint translat = [pan translationInView:pan.view];

if (translat.x < 0 ) {

return NO;

}

//只有导航的根控制器不需要右滑的返回的功能。

if (self.viewControllers.count <= 1)

{

return NO;

}

return YES;

}

@end

//直接上代码  等你来拷贝

原文地址:https://www.cnblogs.com/tryFighting/p/8289324.html

时间: 2024-08-29 10:49:35

iOS 开发 右滑返回上一级控制器的相关文章

在UINavigationController自定义返回按钮后实现手势右滑到上一级界面(interactivePopGestureRecognizer)

在iOS7中,新增加了一个小小的功能,也就是这个self.navigationController.interactivePopGestureRecognizer. 1.情景概况: 在UINavigationController自定义返回按钮后无法实现手势右滑到上一级界面. 2.解决方案: self.navigationController.interactivePopGestureRecognizer.delegate 默认是<_UINavigationInteractiveTransitio

Android右滑返回上一界面

今天突然心血来潮,想在自己的项目里面加一个右滑finish界面的功能.思路很简单就是拦截屏幕滑动事件,然后finish当前页面,不多说了,上代码吧. 第一步:利用VelocityTracker计算滑动速度,及一些附带的代码. private VelocityTracker mVelocityTracker = null;//速度记录器 private int getScrollVelocity() { mVelocityTracker.computeCurrentVelocity(1000);

iOS开发--左滑返回手势失效

在UINavigationBar中设置了leftBarbuttonItem此时系统自带的左滑手势失效,应该如何开启? self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;

右滑返回ios

[转载请注明出处] iOS 7中在传统的左上角返回键之外,提供了右滑返回上一级界面的手势.支持此手势的是UINavigationController中新增的属性 interactivePopGestureRecognizer,即右滑返回只支持以UINavigationController为容器的ViewController间切换,要想在自定义容器中使用,需要一些额外的工作. 基本地,控制ViewController是否启用右滑返回,只需要这样:  .navigationController.in

类似IOS的滑动返回上一级,SwipeBackLayout-android的滑动返回类库

     最近,公司在开发App的需求中增加了一个新的需求,要在android的页面中增加向右滑动的时候返回上一级页面.我刚知道这个需求的时候,感觉有点坑,可能设计那边最近接触到知乎的客户端或者是IOS的滑动可以返回上一级的效果,所以...     之前没有接触过android的滑动返回的开源库,所以还是找一下百度...    后来在Github上找到了SwipeBackLayout:GitHub地址是:https://github.com/ikew0ng/SwipeBackLayout   

App开发流程之右滑返回手势功能

iOS7以后,导航控制器,自带了从屏幕左边缘右滑返回的手势功能. 但是,如果自定义了导航栏返回按钮,这项功能就失效了,需要自行实现.又如果需要修改手势触发范围,还是需要自行实现. 广泛应用的一种实现方案是,采用私有变量和Api,完成手势交互和返回功能,自定义手势触发条件和额外功能. 另一种实现方案是,采用UINavigationController的代理方法实现交互和动画: - (nullable id <UIViewControllerInteractiveTransitioning>)na

ios7自定义返回按钮后,右滑返回功能失效解决方法

-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //开启ios右滑返回 if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.delegate = n

iOS开发中文件的上传和下载功能的基本实现-备用

感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: 复制代码代码如下: YYViewController.m#import "YYViewController.h" #define YYEnc

iOS开发项目篇—02添加子控制器以及项目分层

iOS开发项目篇—02添加子控制器以及项目分层 一.添加子控制器 1.设置根控制器(自定义) 说明:分析新浪微博应用,观察其整体建构层次.而系统的控制器不能满足项目开发的需求,这里把项目中原有的控制器删除. 自己定义一个TabBarViewController类.让这个类作为window窗口的根控制器. YYAppDelegate.m文件代码: 1 #import "YYAppDelegate.h" 2 #import "YYTabBarViewController.h&qu