objective-c - 我如何应对用户摇动 iPhone?

标签 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     

显然这里有一个错误,我知道这么多,但是错误在哪里?!

最佳答案

看来您需要更深入地阅读文档才能了解详情。具体来说iOS Event Handling Guide .

从该文档中,我建议您尝试以下一些操作:

  1. 重写 canBecomeFirstResponder: 并返回 YES(如 list 4-1 所示)。
  2. 重写 viewDidAppear:animated: 以成为第一响应者(如 list 4-1 所示)。
  3. 覆盖 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/

相关文章:

ios - 无法对自定义对象数组进行排序

ios - 如何根据选择的日期显示 UITableView?

ios - CGImageSourceCreateImageAtIndex 返回 nil

objective-c - 可重复使用的 UITableViewCells 重复内容

ios - 如果位置更改或不使用 AFN 3,如何定期向服务器发送后台位置?

ios - 什么时候请求推送通知?

iphone - 如何为图层 shadowOpacity 设置动画?

ios - iOS Objective-C 中 true 和 YES 有什么区别

ios - 无法在 iOS 6.0 或 6.1 中运行应用程序

ios - 在 ios sdk 中向 UIButton 添加操作