關于實現(xiàn)全屏滑動方法

  • 設想:

    • 為什么當push進去的控制器,會有滑動功能。
    • 是不是系統(tǒng)調(diào)用了,某個對象的某個方法。
    • 是不是自己給控制器的view加個滑動手勢pan,然后去實現(xiàn)那個對象的那個方法,就能實現(xiàn)全屏滑動呢。
  • 實現(xiàn)

    • 添加手勢,很容易。但是怎么得到 對象和方法。
    • 我們有 self.interactivePopGestureRecognizer從這里入手,來取得對象和方法.
    • 打印可以直接獲得方法
    • 系統(tǒng)的滑動手勢觸發(fā)的時候,會調(diào)用Target的action,去做滑動返回的事情(action),
    • 獲取系統(tǒng)滑動返回的target和action
    • action:=> handleNavigationTransition:
    • 可以通過運行機制來得到變量名
    • 添加頭文件 #import <objc/runtime.h>
    • 獲取成員變量,知道屬性名,
    • 怎么通過運行時機制獲取屬性值,首先得要獲取屬性的名,通過KVC獲取值 (系統(tǒng)內(nèi)部非開源屬性,只能用KVC獲取,修改)
    • 獲取target,需要使用運行時機制,遍歷出類里面所有屬性名
    • 利用運行時獲取屬性名,只能獲取當前類下的所有屬性名,并不能獲取它的子類或者父類。
- (viod)viewDidLoad
{
unsigned int count  = 0;
    // 獲取UIGestureRecognizer里所有的成員屬性
    Ivar *ivars = class_copyIvarList([UIGestureRecognizer class], &count);

    for (int i = 0; i < count; i++) {
        // 獲取成員屬性
        Ivar ivar =  ivars[i];

        // 獲取成員屬性的屬性名
       NSString *name =   @(ivar_getName(ivar));

//        NSLog(@"%@",name);

    // 取得屬性中的對象
   NSArray *targets  =  [gesture valueForKeyPath:@"_targets"];

    id gestureRecognizer = targets[0];
    // 去得其_target,屬性值
    id target = [gestureRecognizer valueForKeyPath:@"_target"];
//
//    NSLog(@"%@",target);

    self.interactivePopGestureRecognizer.enabled = NO;

    // 借用系統(tǒng)的滑動手勢的功能,當觸發(fā)自己的滑動手勢的時候,調(diào)用系統(tǒng)的滑動返回功能
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];

    pan.delegate = self;

    [self.view addGestureRecognizer:pan];
}
  • copyIvarList:獲取成員屬性列表
  • Class:獲取哪個類下面的屬性
  • outCount:這個類有多少個成員屬性,成員屬性的總數(shù)
  • 注意,如果是根控制器的話,則不需要進行滑動,不觸發(fā)手勢。代碼實現(xiàn)
// 如果返回no,表示不觸發(fā)這個手勢
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    // 只有非跟控制器才能擁有滑動返回功能 子控件數(shù)為1,因為根控制器也為其子控制器。所以為1時,就是只子控制器。
    return self.childViewControllers.count != 1;
}

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,286評論 25 708
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,232評論 4 61
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,210評論 30 471
  • 一年一度的教師節(jié)到了,教師節(jié)是什么,是為老師道謝,為給我們知識、前途的人道謝! 老師打你,罵你是為了讓你有出息...
    東京食尸鬼_7843閱讀 231評論 0 0
  • 路在腳下,夢在心中,心在遠方。 你可能時常問自己,人生最遠的距離會不會是遙不可及的天際,而我總是說...
    艾薇兒_0c3d閱讀 241評論 0 3