Это звучит как классический случай засорения основного потока. Многопоточность решит вашу проблему.
Сделайте что-то вроде этого:
-(void)performAnimations{
//Do your animations in this method
}
Если у вас есть анимация в отдельном методе, вы можете сделать это:
[self performSelectorInBackground:@selector(performAnimations)];
Это позволит вашей основной ветке свободно распознавать события касания:)