2013-07-01 4 views
0

У меня есть табличное представление, чьи записи строк настраиваются на GridView B (фактически используя MMGridView с открытым исходным кодом). Подвижные ячейки gridView/scrollView используют touchsBegan/TouchesEnd для обнаружения их выбора.Приоритет событий в очереди на пользовательские сеансы?

Я использую раскадровку, а пользовательские segues анимируются и инициируются методом didselectrowatindexpath/performsegue в tableView.

Проблема заключается в том, что после того, как была выбрана строка таблицы, дополнительные метчики ставятся в очередь и передаются отдельным сеткам.

В пользовательском segue я попытался установить destinationviewcontroller.view.userInteractionEnabled = NO; А затем снова включите его в viewDidAppear destinationViewController. Это не сработало, и события с очередью касания все еще передавались субэлементам gridView.

Как сбросить или отменить любые события касания, которые, казалось, стояли в очереди во время анимированного перехода?

РЕДАКТИРОВАТЬ: Удаление пользовательского сегмента, похоже, остановило поведение событий «в очереди». Или, может быть, segue теперь просто происходит достаточно быстро, так что во время этого не происходит никаких событий касания? Для полноты, вот мой обычай uistoryboardsegue, что дает мне проблемы:

#import "QuartzCore/QuartzCore.h" 

@implementation TTOCustomSegue 

-(void)perform { 

UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 
UIViewController *destinationController = (UIViewController*)[self destinationViewController]; 
//destinationController.view.userInteractionEnabled = NO; 

CATransition* transition = [CATransition animation]; 
transition.duration = .4; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
transition.type = kCATransitionFade; 
transition.subtype = nil; 

[sourceViewController.navigationController.view.layer addAnimation:transition forKey:kCATransition];  
[sourceViewController.navigationController pushViewController:destinationController animated:NO];  
} 
@end 
+0

Что-то похожее на то, что, хотя анимация не завершена, контроллер представления назначения жив и пинает и принимает события касания. Тьфу. Чтобы действительно отключить взаимодействие пользователя во время перехода/анимации, похоже, что мне нужно использовать другой метод перехода, например. animateWithDuration, у которого есть блок завершения, где я могу снова включить взаимодействие с пользователем или метод анимации, который позволяет установить UIViewAnimationOptionAllowUserInteraction. К сожалению, изменение методов анимации для segues - это еще одна возможность червей. –

ответ

0

Там не должно быть в очереди событий. Убедитесь, что вы каким-то образом не блокируете основной поток.

Чтобы полностью блокировать обработку событий во время анимации, есть один полезный метод на UIApplication.

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

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

+0

Спасибо, анимация не задерживается, я разместил выше код анимации. Я хотел бы попробовать ваше предложение, но было бы проще реализовать, если бы переходная анимация была реализована с помощью метода, который поддерживал блок завершения? Я проверю, могут ли пользовательские segues использовать что-то вроде animateWithDuration ... –

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