Обнаружение касания сверху / снизу - PullRequest
8 голосов
/ 26 августа 2011

Я новичок в разработке IOS, я разработал простую демонстрацию обнаружения множественного прикосновения, следуя этому учебнику :

Работает нормально, но мой вопрос: когда я пытаюсь запустить сенсор снаружи iphone (сверху или снизу), сенсор не обнаруживается, и когда я пытался сделать то же самое из LEFT / Правые стороны, это работает. Может кто-нибудь объяснить мне, почему при попытке перетаскивания сверху или снизу не обнаруживается касание?

Ответы [ 5 ]

8 голосов
/ 02 сентября 2011

Это не начинается сверху, потому что строка состояния улавливает прикосновение.Вы знаете, как, когда вы нажимаете на строку состояния, прокручиваемый контент идет вверх?Вот почему строка состояния «крадет» ваше прикосновение.Если вы удалите строку состояния (вы можете сделать это в Info.plist приложения), вы получите прикосновения сверху, даже с iOS 5 и центром уведомлений «тянуть сверху».(При первом раскрытии появится небольшая ручка раскрытия, и, если вы снова нажмете, центр уведомлений украдет ваши касания.)

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

5 голосов
/ 05 сентября 2011

Строка состояния получит сенсорное событие вместо вашего просмотра. Вы можете скрыть строку состояния следующим образом:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

Или просто установите Строка состояния изначально скрыта в файле info.plist.

Кроме того, если у вас установлена ​​iOS 5, поведение будет скрыто, когда строка состояния будет скрыта: вы можете получить событие из своего представления, но система также опустит небольшую плавающую панель перетаскивания.

Если вы не хотите скрывать строку состояния, вы можете попытаться установить слой окон и поставить вид над строкой состояния (не уверен, разрешено ли это в AppStore или нет).

2 голосов
/ 26 августа 2011

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

Поскольку я работаю на iOS 5, яне могу дать вам больше подробностей, потому что я не могу проверить, но я думаю, что это наиболее вероятный ответ

1 голос
/ 18 сентября 2011

Использование этого кода в loadView из UIViewController:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
CGRect screen = [[UIScreen mainScreen] bounds];

UIView* mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screen.size.width, screen.size.height)];
mainView.backgroundColor = [UIColor whiteColor];
self.view = mainView;

mainView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth |
    UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin | 
    UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin;

[mainView release];

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

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

0 голосов
/ 05 сентября 2011

Предыдущие ответы вокруг строки состояния совершенно верны, я думаю.

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

Основным элементом является UIEvent, который имеет методы touchBegan, touchEnded, touchCancelled и touchMoved. Посмотрите документы по этому вопросу, так как здесь я немного ухожу из памяти ... В любом случае, вы можете видеть, что если даже нужно открыть с помощью touchBegan, то запуск жеста вне сенсорной области может не сработать. Слева направо, вероятно, работает в основном потому, что область между экраном и краем достаточно тонкая, что касание будет восприниматься, даже если вы не правы на экране. Сверху вниз и снизу вверх, однако, есть более широкие области, где вы, вероятно, начнете за пределами области ответа.

...