Можно ли ловить сенсорные события на iPhone, используя чистый C? - PullRequest
1 голос
/ 16 января 2010

В приложениях для iPhone вы можете отлавливать сенсорные события через UIEvent и связанный с ним набор экземпляров UITouch, но это происходит на уровне Objective-C. То, что я ищу, - это способ получить эту информацию на более низком уровне, в коде C (без участия Objective-C), и, в частности, я имею в виду структуры данных Core Foundation, подобно CFStringRef (и другим непрозрачным структуры данных) соединены в NSString.

Доступна ли структура "CFTouchRef"? Кто-нибудь знает, возможно ли это через другие функции или структуры? Спасибо за любые подсказки.

Ответы [ 4 ]

5 голосов
/ 16 января 2010

Нет, вы не можете этого сделать. Учитывая, что Objective-C является надмножеством C, тривиально создать простой класс, который реализует необходимые вам механизмы «перехвата касаний», а затем перенаправляет касания в любой API C, который вы хотите.

Это вывод, который я получил после ищу информацию об этом. Но почему-то я не могу не задаться вопросом где время выполнения Objective C получает эта информация откуда-то «ниже», отсюда и мое любопытство. Спасибо!

Да - UIKit говорит с основными механизмами событий на устройстве. Поскольку эти механизмы не являются частью общедоступного API, они не предназначены и не предназначены для непосредственного использования вашим приложением.

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

2 голосов
/ 16 января 2010

Используя чистый C, я думаю, вы должны иметь возможность манипулировать средой выполнения Objective C, чтобы делать то, что вы хотите:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html

Вы должны сконструировать соответствующие классы / объекты (например, класс Window с методом sendEvent:), используя этот материал, но я не уверен, почему вы хотите сделать все это с явным Objective-C вызовы во время выполнения, когда у вас есть компилятор, который сгенерирует все это для вас.

1 голос
/ 16 января 2010

Если вы нацелены на AppStore, вы не сможете захватывать события с помощью чистого C, поскольку UIKit - это среда Objective-C.


Тем не менее, действительно существует нижний уровень недокументированный API, обрабатывающий события в частной инфраструктуре FrameworkServices, который называется GSEvent s. Из GSEvent вы можете извлечь структуру о касаниях. Вы можете искать в Google, как обрабатывать GSEvent s.

Существует еще более низкий уровень API с полудокументированным , называемый IOHIDEvent в IOKit, который также является чистым C, но с ним еще сложнее работать.

0 голосов
/ 16 января 2010

Я думаю, что эти API на основе C доступны только в более ранней версии Carbon для устаревших приложений Mac. Я думаю, что iPhone OS поддерживает только приложения типа Какао, которые, как вы говорите, используют UIKit Objective-C для сенсорных событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...