2011-01-28 2 views
0

Хорошо, так что, чтобы начать работу с Objective-C (я обычно являюсь просто телефоном HTML PhoneGap), я сделал простое приложение Magic 8 ball. У меня есть это прямо сейчас, так что, когда я касаюсь экрана, мяч «трясет» и принимает случайный ответ и помещает его в ярлык. То, что я хочу сделать, - это когда сам 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. Override canBecomeFirstResponder: и вернуть YES (как в листинге 4-1).
  2. Переопределение viewDidAppear: анимированный:, чтобы стать первым ответчиком (согласно листингу 4-1).
  3. Override как motionBegan: withEvent: и motionCancelled: withEvent:, как они делают это на примере, который может быть потому, что рамки тестирования вид класса контроллера, чтобы увидеть, если он отвечает на эти селекторы (как в листинге 4 -2).

Посмотрите на UIResponder Class Reference (из которого UIViewController наследует) для более подробной информации о методах, которые вы переопределяете.

Как кто-то, кто пришел с фона Microsoft/VB/.NET и Android/Java для программирования Cocoa/Objective-C, я настоятельно рекомендую вам потратить время на чтение документации. Первоначально документы Apple кажутся непроницаемыми, но на самом деле они очень хороши!

Я надеюсь, что это поможет.

Смежные вопросы