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

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

ИЗМЕНИТЬ

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

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


person Bhargav    schedule 03.08.2016    source источник
comment
Я решил это и хотел бы ответить на вопрос   -  person Bhargav    schedule 04.08.2016
comment
Кажется, у вас проблема с кодом. Однако мы не можем помочь, если у нас нет кода или информации, которые могут воспроизвести проблему. В противном случае мы просто слепо гадаем. Обратите внимание, что решения вашей проблемы недостаточно для ее повторного открытия — вы должны фактически предоставить MCVE.   -  person Kyll    schedule 04.08.2016
comment
@Kyll Я уже решил проблему, проголосуйте за повторное открытие вопроса, чтобы я мог на него ответить :)   -  person Bhargav    schedule 04.08.2016
comment
Но в том-то и дело, что, открыв заново, на него могли бы ответить и другие... Может быть, даже лучше вас. Для этого им нужна достойная основа для работы. Кроме того, предоставление MCVE поможет будущим читателям понять вашу проблему и значительно повысит полезность вашего вопроса.   -  person Kyll    schedule 04.08.2016
comment
@Kyll, разве предоставленная информация недостаточно ясна ?? Анимация в дочернем представлении PageViewController, запускаемая каким-либо жестом X в этом дочернем представлении, не работает, я не понимаю, что еще мне нужно добавить   -  person Bhargav    schedule 04.08.2016


Ответы (1)


Эффект, который вы описываете, довольно распространен при работе с определенными типами родительских представлений, которые задерживают прикосновения к содержимому своих дочерних представлений. Решение обычно так же просто, как установка свойства родительского представления: 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 , для этой проблемы

person Bhargav    schedule 04.08.2016