1. 程式人生 > >如何給螢幕新增pop全屏手勢

如何給螢幕新增pop全屏手勢

一,目前基本上所有的APP在push到一個介面,可以利用手勢滑動介面返回到上一級介面,這就是所謂的pop手勢(系統自己預設的是,只能在邊緣滑動的時候才能返回),廢話不多說直接開始程式碼

1,基於UINavigationController建立自己的導航

2,匯入標頭檔案#import “objc/runtime.h”

這裡就需要說一點執行時了,他是比較厲害的,也是比較高逼格的,所以咋們或多或少要知道這個東西。具體的用法大家可以自行百度,很多的教程,下面主要是針對怎麼取出UIGestureRecognizer這裡面的屬性的方法;

- (void)viewDidLoad {
    [super
viewDidLoad]; [self setupNavigationBar]; }
// 設定全屏手勢
- (void)setupPopGesture {

    // 1, 獲取系統的pop手勢
    UIGestureRecognizer *systemGesture = self.interactivePopGestureRecognizer;
    // 2, 獲取pop手勢上的view
    UIView *gestureView = systemGesture.view;


    // 3, 獲取target、action
    // 3.1, 利用雲執行時
    unsigned
int count = 0; Ivar *ivars = class_copyIvarList([UIGestureRecognizer class], &count); for (int i = 0; i < count; i++) { NSString *typeStr = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivars[i])]; NSString *nameStr = [NSString stringWithUTF8String:ivar_getName(ivars[i])]; NSLog
(@"type == %@",typeStr); NSLog(@"name == %@",nameStr); } // 3.2, 列印_targets,利用kvc修改value NSArray *targets = [systemGesture valueForKey:@"_targets"]; for (int i = 0; i < targets.count; i++) { NSLog(@"_targets == %@",targets[i]); // _targets == (action=handleNavigationTransition:, target=<_UINavigationInteractiveTransition 0x7fd116c28c90>) } id targetObjc = targets.firstObject; NSLog(@"targetObjc == %@",targetObjc); // 3.3, 取出target id target = [targetObjc valueForKey:@"target"]; // 3.4, 取出action SEL action = NSSelectorFromString(@"handleNavigationTransition:"); // 4, 建立自己的pan手勢 UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]init]; [gestureView addGestureRecognizer:panGesture]; [panGesture addTarget:target action:action]; }

簡單展示一下目錄劃分,方便大家查閱


這裡寫圖片描述