При запуске примера проекта Three20 в ландшафтном режиме половина экрана не реагирует на сенсорные события - PullRequest
1 голос
/ 03 февраля 2010

Я заинтересован в разработке приложения для iPhone OS на базе Three20 , которое в первую очередь ориентировано на ландшафт.

Я скачал образцы шаблонов проектов Three20 , загрузил их в Xcode и запустил приложение примера проекта в симуляторе и на устройстве, используя 3.0, 3.1, 3.1.2 SDK. Когда я изменил Initial interface orientation на Landscape (right home button) в файле проекта Info.plist, проект запустился в том же направлении, как и ожидалось, но реагировал только на сенсорные события в левой части экрана. Похоже, что он все еще реагирует на сенсорные события, как если бы он все еще находился в портретном режиме. Изменения only , которые я внес в пример проекта, изменяют файл Info.plist.

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

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

Ответы [ 3 ]

3 голосов
/ 12 февраля 2010

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

Ergo: если родительское представление не соответствует новой ширине, правая часть экрана может быть отображена с содержимым, которое не доступно для касания.

0 голосов
/ 15 сентября 2010
- (void)viewWillAppear:(BOOL)animated 
{
 if (![System isIpad])
 {
  if (([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortrait) ||
   ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortraitUpsideDown))
  {
   [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
  }
 }
 [super viewWillAppear:animated];
// self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
// self.navigationBarTintColor = [UIColor clearColor];
 self.navigationController.navigationBarHidden = YES;
 [[UIApplication sharedApplication] setStatusBarHidden:FALSE];
}
0 голосов
/ 03 февраля 2010

Вы используете определенный вид? Это может быть так просто, как добавление:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation
{
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

К вашему контроллеру представления.

...