我需要在我的
iphone游戏中使用加速度计的功能.我只需要通过倾斜设备来移动图像.然而,youtube上的大多数视频只显示倾斜功能,以某种方式反转,忘记包括校准.我希望用户将他们的设备校准到他们所处的位置.有谁知道我应该如何开始这个?
非常感谢您的帮助,
凯文
解决方法
我曾经做过这样的应用程序.
我会在这里发布,但它适用于iOS 4 …
我会在这里发布,但它适用于iOS 4 …
http://localhostr.com/files/7ca39c/Tilter.zip
校准:
int tapCount = 0; - (void)cancelDoubleTap { if (tapCount < 2) { tapCount = 0; } } - (void)reset { [[NSUserDefaults standardUserDefaults] setFloat:0 forKey:@"X-Calibrate"]; [[NSUserDefaults standardUserDefaults] setFloat:0 forKey:@"Y-Calibrate"]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Reset!" message:@"Calibration reset." delegate:nil cancelButtonTitle:@"Okay." otherButtonTitles:nil]; [alert show]; [alert release]; } - (void)calibrate { if (tapCount == 3) { tapCount = 0; return; } [[NSUserDefaults standardUserDefaults] setFloat:accelX forKey:@"X-Calibrate"]; [[NSUserDefaults standardUserDefaults] setFloat:accelY forKey:@"Y-Calibrate"]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Calibrated!" message:[NSString stringWithFormat:@"Calibrated to: %.2f %.2f.",accelX,accelY] delegate:nil cancelButtonTitle:@"Okay." otherButtonTitles:nil]; [alert show]; [alert release]; tapCount = 0; } - (BOOL)canBecomeFirstResponder { return YES; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(cancelDoubleTap) userInfo:nil repeats:NO]; tapCount ++; if (tapCount == 3) { [timer invalidate]; [self reset]; return; } if (tapCount == 2) { [timer invalidate]; timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(calibrate) userInfo:nil repeats:NO]; } }
和…
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { but = [[UIButton alloc] initWithFrame:window.frame]; [but addTarget:self action:@selector(touchesEnded:withEvent:) forControlEvents:UIControlEventTouchUpInside]; [window addSubview:but]; // Override point for customization after application launch. box = [[UIView alloc] initWithFrame:CGRectMake(self.window.center.x - 50,self.window.center.y - 50,100,100)]; [window makeKeyAndVisible]; box.backgroundColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.75]; [window addSubview:box]; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1/100.0)]; slider = [[UISlider alloc] initWithFrame:CGRectMake(20,438,280,22)]; [slider setMinimumValue:2.0]; [slider setMaximumValue:50.0]; [window addSubview:slider]; return YES; }
.h文件:
#import <UIKit/UIKit.h> @interface TilterAppDelegate : NSObject <UIApplicationDelegate,UIAccelerometerDelegate> { UIWindow *window; UIView *box; UISlider *slider; UIButton *but; } @property (nonatomic,retain) IBOutlet UIButton *but; @property (nonatomic,retain) IBOutlet UISlider *slider; @property (nonatomic,retain) IBOutlet UIView *box; @property (nonatomic,retain) IBOutlet UIWindow *window; @end
移动代码:
- (void)moveBoxByX:(float)x byY:(float)y { float newX = box.center.x + x; float newY = box.center.y + y; if (newX < 50) newX = 50; if (newX > 270) newX = 270; if (newY < 50) newY = 50; if (newY > 430) newY = 430; box.center = CGPointMake(newX,newY); }
应该在大多数时间工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。