2010-11-28 2 views
0

У меня есть два вида, основной вид, где я использую CALayers для создания анимации. Этот основной слой обрабатывает события касания touchBegan, затрагиваетMoved и touchesEnded.Как игнорировать штрихи после перехода к просмотру?

Вторая точка зрения представляет собой информационное представление, которое имеет собственный наконечник и содержит инструкции для приложения. Когда пользователь дважды отводы кнопку в главном окне я переворачивать представление информации в месте с ...

if (infoView == nil) { 
    NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"InfoView" owner:self options:nil]; 
    infoView = [ nibViews objectAtIndex: 0]; 
    [infoView retain]; 
} 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:[self view] cache:YES]; 
[[self view] addSubview:infoView]; 
[UIView commitAnimations]; 

Когда пользователь нажимает кнопку в представлении информации я переворачивать основной вид на место с .. .

[UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1.0]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:[self view] cache:YES]; 
    [infoView removeFromSuperview]; 
    [UIView commitAnimations]; 

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

Итак, вопрос в том, как я могу отключить основной вид от получения событий касания, когда информационное представление было перевернуто на место?

UPDATE: Похоже, что я решил свою проблему, но в процессе возникла новая проблема. То, что я пытаюсь сделать, - это управлять двумя UIVIews с помощью единого UIViewController. Проблема была в том, что основной контроллер представления загрузил основной вид, и когда я переключил представления, я добавил информационное представление как подпункт основного вида. Эта иерархия, по-видимому, вызвала касания, которые не использовались в видимом информационном представлении для передачи на главный вид.

Я решил эту проблему, если контроллер основного вида загрузил контейнерный вид. Затем основное представление было загружено в виде подсмотра представления контейнера. Когда я перевернул информационное представление, я добавил его как подпункт представления контейнера. Неиспользованные штрихи, которые появляются в информационном представлении, теперь передаются в представление контейнера, и основной вид никогда их не видит.

Но, я создал новую проблему. Когда основной вид виден, он принимает только события приземления в верхней части представления. Я могу приземлиться в верхней части обзора и перетащить в нижнюю часть и получить касание и коснувшиеся события. Я просто не получаю события приземления в нижней части.

Любая помощь будет оценена по достоинству.

ответ

0

Рассмотрите возможность представления второго представления с помощью presentModalViewController: анимированный: вместо этого. Вы можете получить эффект flip, и у вас не будет проблем с касаниями, потому что новый контроллер представления будет первым ответчиком и будет обрабатывать все касания автоматически.

например.

MyInfoViewController* infoView = [[MyInfoViewController alloc] initWithNibName:@"MyInfoViewController" bundle:nil]; 
infoView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:infoView animated:YES]; 

Вы можете легко создать этот новый вид контроллер и острие файл, используя новую команду файла Xcode в (сделать подкласс UIViewController, и проверить «использовать перо»)

Вы отклонять контроллер представления, вызвав [self dismissModalViewController]; с вашим главный контроллер.

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

Вы можете посмотреть проект шаблона для приложения типа Utility в xcode для примера этой точной вещи.

+0

, конечно, если вы настаиваете на том, чтобы делать это так, как вы делали сейчас, вы всегда можете просто установить BOOL infoViewOnScreen, а затем проигнорировать штрихи, если он находится на экране. Но я бы предложил сделать это «правильным» способом выше. Это намного класснее. – 2010-11-28 02:57:55

0

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

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