iPhone应用中如何使用iPhone三轴感应器代码案例是本文要介绍的内容你,主要是来认识并学习iphone应用中的三轴感应器。很多应用里都要用到苹果iPhone自带的三轴感应器(加速度传感器),希望下面这段代码例子能为您使用iPhone三轴感应器打开思路。如图所示:
- #include <IOKit/IOKitLib.h>
- #include <CoreFoundation/CoreFoundation.h>
- typedef struct {} *IOHIDEventSystemRef;
- typedef struct {} *IOHIDEventRef;
- float IOHIDEventGetFloatValue(IOHIDEventRef ref, int param);
- void handleHIDEvent(int a, int b, int c, IOHIDEventRef ptr) {
- int type = IOHIDEventGetType(ptr);
- if (type == 12) {
- float x,y,z;
- x = IOHIDEventGetFloatValue(ptr, 0xc0000);
- y = IOHIDEventGetFloatValue(ptr, 0xc0001);
- z = IOHIDEventGetFloatValue(ptr, 0xc0002);
- // do whatever you need to do with the gravity
- ballSetAccel(x, y);
- }
- }
- #define expect(x) if(!x) { printf("failed: %sn", #x); return; }
- void initialize(int hz) {
- mach_port_t master;
- expect(0 == IOMasterPort(MACH_PORT_NULL, &master));
- int page = 0xff00, usage = 3;
- CFNumberRef nums[2];
- CFStringRef keys[2];
- keys[0] = CFStringCreateWithCString(0, "PrimaryUsagePage", 0);
- keys[1] = CFStringCreateWithCString(0, "PrimaryUsage", 0);
- nums[0] = CFNumberCreate(0, kCFNumberSInt32Type, &page);
- nums[1] = CFNumberCreate(0, kCFNumberSInt32Type, &usage);
- CFDictionaryRef dict = CFDictionaryCreate(0, (const void**)keys,
- (const void**)nums, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
- expect(dict);
- IOHIDEventSystemRef sys = (IOHIDEventSystemRef) IOHIDEventSystemCreate(0);
- expect(sys);
- CFArrayRef srvs = (CFArrayRef)IOHIDEventSystemCopyMatchingServices(sys, dict, 0, 0, 0);
- expect(CFArrayGetCount(srvs)==1);
- io_registry_entry_t serv = (io_registry_entry_t)CFArrayGetValueAtIndex(srvs, 0);
- expect(serv);
- CFStringRef cs = CFStringCreateWithCString(0, "ReportInterval", 0);
- int rv = 1000000/hz;
- CFNumberRef cn = CFNumberCreate(0, kCFNumberSInt32Type, &rv);
- int res = IOHIDServiceSetProperty(serv, cs, cn);
- expect(res == 1);
- res = IOHIDEventSystemOpen(sys, handleHIDEvent, 0, 0);
- expect(res != 0);
- }
小结:iPhone应用中如何使用三轴感应器代码案例的内容介绍完了,希望通过本文的学习能对你有所帮助!