2016-08-03 9 views
0

Я использую THIS LIB для кнопки, теперь у меня есть viewcontroller, у которого есть вид контейнера, и этот вид контейнера встраивает (segue) страницуViewController, вторую страницу (которая является другой ViewController) в этом PageViewController имеет BFPaperButton (который имеет анимацию пульсаций при жестов OnTap). Анимация не работает в этой настройке, но если бы сделать ViewController 2-й страницы как Is Initial View Controller, то анимация прекрасно работает, что здесь происходит?Анимации, вызванные из жестов, не работающих на представлениях просмотра PageViewController

EDIT

Я еще большая изоляция вопроса, кажется, это происходит только при использовании PageViewController и возвращая ViewController содержащей кнопку в одном из методов источника данных делегата PageViewController,

и казалось бы, причина, безусловно, является PageViewController, кажется, что она блокирует некоторые gesturerecognizers или задерживает их для своих дочерних просмотров, необходимо выяснить, как ее исправить.

+0

Я решил это и хотел бы ответить на вопрос – Bhargav

+0

Кажется, у вас есть пр. oblem с вашим кодом. Однако мы не можем помочь, если у нас нет [кода или информации, способной воспроизвести проблему] (http://stackoverflow.com/help/mcve). В противном случае мы просто слепо угадываем. Обратите внимание, что для решения проблемы недостаточно повторного открытия - вы должны предоставить MCVE. –

+0

@Kyll Я уже решил проблему, проголосую, чтобы снова открыть вопрос, чтобы я мог ответить на него :) – Bhargav

ответ

0

Эффект, который вы описываете, довольно часто встречается при работе с определенными типами родительских представлений, которые задерживают содержание штрихов их дочерних представлений. Решение обычно так же просто, как установка свойства родительского представления: delaysContentTouches.

Я бы это помнил, потому что 9 раз из 10, это преступник.

Однако, в случае UIPageViewController, что вы видите, это поведение по умолчанию для UIQueuingScrollView, не разоблачить эту собственность. Уродливый, но эффективный способ обойти это - прорыть подзоны вашего UIPageViewController, пока не дойдете до одного, у которого есть UIGestureRecognizers, и установите delaysTouchesBegan = NO.

Вы можете сделать это, просто запустив этот код после инициализации UIPageViewController

NSArray *subviews = self.pageViewController.view.subviews; 
NSArray *viewHierarchy = [@[self.pageViewController.view] arrayByAddingObjectsFromArray:subviews]; 
int i = 0; 
for (UIView *viewToCheck in viewHierarchy) { 
    for (UIGestureRecognizer *gestureRecognizer in viewToCheck.gestureRecognizers) { 
     NSLog(@"%d gestureRecognizer: %@", i++, gestureRecognizer); 
     gestureRecognizer.delaysTouchesBegan = NO; 
    } 
} 

вот быстро хлопнул вместе Swift версию, если вы предпочитаете:

let subViews: [UIView] = pageViewController.view.subviews 
var viewHierarchy: [UIView] = [pageViewController.view] 
viewHierarchy.appendContentsOf(subViews) 
var i = 0 
for viewToCheck in viewHierarchy { 
    viewToCheck.gestureRecognizers?.forEach { (recognizer) in 
     print("viewToCheck isa \'\(viewToCheck.self)\'") 
     for gestureRecognizer in viewToCheck.gestureRecognizers! { 
      print("\(i) gestureRecognizer: \(gestureRecognizer)") 
      i += 1 
      gestureRecognizer.delaysTouchesBegan = false 
      } 
    } 
} 

Ответил пользователем GitHub bfeher, for this issue

 Смежные вопросы

  • Нет связанных вопросов^_^