2011-01-28 3 views
0

さて、Objective-C(私はたいていHTML PhoneGapちょっとした人です)と一緒に行くには、単純なMagic 8ボールアプリを作りました。私はそれを今すぐ持っているので、私が画面に触れると、ボールは "揺れ"、ランダムな反応を取り、それをラベルに入れます。私がしたいのは、iPhone自体が動揺しているときで、テキストも更新されているときです。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  

明らかにそこにエラーがあります、私が知っているくらい、しかしどこ?

+0

なぜそこにエラーがあるのは明らかですか? –

+2

メインスレッドをスリープさせることは本当に悪い考えです。どうしてそんなことをするのか?コードの実行を遅らせたい場合は、代わりに '-performSelector:withObject:afterDelay:'を使用してください。また、ランダムテストコードを両方の場所から呼び出される別のメソッドにリファクタリングする必要があります。 –

+0

アプリがクラッシュしていますか?もしそうなら、ログは何を言いますか? – WrightsCS

答えて

1

このページの一番下に行くには、ドキュメントをもっと深く読む必要があるようです。特にiOS Event Handling Guide

その文書から、私はあなたが試すことをお勧めいくつかあります:

  1. オーバーライドcanBecomeFirstResponder:をして(リスト4-1のとおり)YESを返しますが。
  2. オーバーライドviewDidAppear:アニメーション:が最初のレスポンダになります(リスト4-1を参照)。
  3. オーバーライド両方motionBegan:withEvent:motionCancelled:withEvent:彼らは一例でこれを行うようなフレームワークがリスト4のとおりに(それはこれらのセレクタに応答するかどうか確認するために、あなたのビューコントローラクラスをテストしているためかもしれ-2)。

オーバーライドするメソッドの詳細については、UIResponder Class Reference(UIViewControllerが継承するもの)を参照してください。

Microsoft/VB/.NETおよびAndroid/JavaのバックグラウンドからCocoa/Objective-Cプログラミングに携わった人は、ドキュメントを読む時間を投資することを強くお勧めします。当初、アップルの文書は不可解だと思われますが、実際にはかなり良いです!

私は役立つことを願っています。

関連する問題