好吧,为了开始使用 Objective-C(我通常只是一个 HTML PhoneGap 之类的人),我制作了一个简单的 Magic 8 球应用程序。我现在已经得到了它,当我触摸屏幕时,球会“震动”并采取随机响应并将其放入标签中。我想做的是,当 iPhone 本身晃动时,文本也会更新。
这是我的 MainView.m:
#import "MainView.h"
@implementation MainView
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.type == UIEventSubtypeMotionShake) {
int rNumber = rand() % 26;
switch (rNumber) {
case 0:
shook.text = @"Never";
break;
....25 more entries.....
default:
break;
}
}
}
- (IBAction)yesNo {
[NSThread sleepForTimeInterval:0.75];
int rNumber = rand() % 26;
switch (rNumber) {
case 0:
result.text = @"Never";
break;
........
default:
break;
}
}
@end
和我的 MainView.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface MainView : UIView <UIAccelerometerDelegate> {
IBOutlet UILabel *result;
IBOutlet UILabel *shook;
}
- (IBAction)yesNo;
- (void)motionEnded;
@end
显然这里有一个错误,我知道这么多,但是错误在哪里?!
最佳答案
看来您需要更深入地阅读文档才能了解详情。具体来说iOS Event Handling Guide .
从该文档中,我建议您尝试以下一些操作:
- 重写 canBecomeFirstResponder: 并返回 YES(如 list 4-1 所示)。
- 重写 viewDidAppear:animated: 以成为第一响应者(如 list 4-1 所示)。
- 覆盖 motionBegan:withEvent: 和 motionCancelled:withEvent:,因为它们在示例中执行此操作,这可能是因为框架正在测试您的 View Controller 类以查看是否它响应这些选择器(如 list 4-2 所示)。
看看UIResponder Class Reference (UIViewController 继承自)有关您要重写的方法的更多详细信息。
作为具有 Microsoft/VB/.NET 和 Android/Java 背景的 Cocoa/Objective-C 编程背景的人,我强烈建议您花时间阅读文档。起初,Apple 文档看起来令人费解,但实际上相当不错!
希望对您有所帮助。
关于objective-c - 我如何应对用户摇动 iPhone?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4823469/