Я хочу получить x, y координаты прикосновения. Я пробовал это решение, но оно не работает для IOS 7. Я получаю следующую ошибку:
Tweak.xm:96:2: ошибка: нет соответствующей функции для вызова 'IOHIDEventSystemClientScheduleWithRunLoop' IOHIDEventSystemClientScheduleWithRunLoop(ioHIDEventSystem, CFRu... ^~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ /home/agiera/theosprojects/phoneit/theos/include/IOKit/hid/IOHIDEventSystemClient.h:72:7: примечание: функция-кандидат не работает: невозможно преобразовать аргумент неполного типа 'void *' в 'IOHIDEventSystemClientRef' (также известный как '__IOHIDEventSystemClient *') ioHIDEventSystem, ха... ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/ home/agiera/theosprojects/phoneit/theos/include/IOKit/hid/IOHIDEventSystemClient.h:68:7: примечание: функция-кандидат не работает: невозможно преобразовать аргумент неполного типа 'void *' в 'IOHIDEventSystemClientRef' (он же '__IOHIDEventSystemClient *') void IOHIDEventSystemClientRegisterEventCallback(IOHIDEventSyste... ^ 2 ошибки.
Есть ли обновленная реализация или другие средства для получения этой функциональности для IOS 7?
редактировать:
код:
#include <IOKit/hid/IOHIDEventSystem.h>
#include <IOKit/hid/IOHIDEventSystemClient.h>
#include <stdio.h>
//Touch Events
void handle_event (void* target, void* refcon, IOHIDServiceRef service, IOHIDEventRef event) {
NSLog(@"handle_event : %d", IOHIDEventGetType(event));
if (IOHIDEventGetType(event)==kIOHIDEventTypeDigitizer){
IOHIDFloat x=IOHIDEventGetFloatValue(event, (IOHIDEventField)kIOHIDEventFieldDigitizerX);
IOHIDFloat y=IOHIDEventGetFloatValue(event, (IOHIDEventField)kIOHIDEventFieldDigitizerY);
NSLog(@" x %f : y %f", x, y);
}
}
static void initTouchEventHandling() {
void *ioHIDEventSystem = IOHIDEventSystemClientCreate(kCFAllocatorDefault);
IOHIDEventSystemClientScheduleWithRunLoop(ioHIDEventSystem, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
IOHIDEventSystemClientRegisterEventCallback(ioHIDEventSystem, handle_event, NULL, NULL);
IOHIDEventSystemClientUnregisterEventCallback(ioHIDEventSystem, handle_event, NULL, NULL);
IOHIDEventSystemClientUnscheduleWithRunLoop(ioHIDEventSystem, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
}
initTouchEventHandling вызывается в моем конструкторе. Я добавил IOKit в свой личный фреймворк и внедрил это исправление.
редактировать2:
Я думаю, что что-то не так с тем, как я добавляю фреймворк IOKit. Пробовал менять на более старую версию, та же ошибка. Затем я попытался удалить его полностью и получил те же ошибки. Может быть, кто-то может что-то исправить в моем make-файле:
ARCHS = armv7 arm64
TARGET = iphone:clang:latest:7.0
export THEOS_DEVICE_IP = 192.168.1.104
include theos/makefiles/common.mk
TWEAK_NAME = phoneit
phoneit_FILES = Tweak.xm
phoneit_FRAMEWORKS = UIKit QuartzCore
phoneit_PRIVATE_FRAMEWORKS = IOKit
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
SUBPROJECTS += prefs
include $(THEOS_MAKE_PATH)/aggregate.mk