我如何回应用户摇晃iPhone?

时间:2011-01-28 00:18:25

标签: objective-c cocoa-touch ios iphone-sdk-3.0

好吧,为了开始使用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     

显然那里有一个错误,我知道的很多,但在哪里?!

1 个答案:

答案 0 :(得分:1)

看起来您需要更深入地阅读文档以深入了解这一点。特别是iOS Event Handling Guide

从那份文件中我建议你尝试一些事情:

  1. 覆盖 canBecomeFirstResponder:并返回YES(根据清单4-1)。
  2. 覆盖 viewDidAppear:animated:成为第一个响应者(如清单4-1所示)。
  3. 覆盖 motionBegan:withEvent: motionCancelled:withEvent:,因为他们在示例中执行此操作,这可能是因为框架正在测试您的视图控制器类以查看是否它响应这些选择器(如清单4-2所示)。
  4. 查看UIResponder Class Reference(UIViewController继承的内容),了解有关覆盖方法的更多详细信息。

    作为从Microsoft / VB / .NET和Android / Java背景到Cocoa / Objective-C编程的人,我强烈建议您花时间阅读文档。最初,Apple文档似乎难以理解,但它们实际上非常好!

    我希望有所帮助。