Как мне реагировать на встряхивание пользователя iPhone? - PullRequest
0 голосов
/ 28 января 2011

Хорошо, поэтому, чтобы начать работать с Objective-C (я обычно просто парень из PhoneGap HTML), я сделал простое приложение Magic 8 ball.Я понял это сейчас, так что когда я касаюсь экрана, шар «трясется», принимает случайный ответ и помещает его в ярлык.Что я хочу сделать, так это то, что когда сам 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 Ответ

1 голос
/ 29 января 2011

Похоже, вам нужно более подробно прочитать документацию, чтобы разобраться в этом. В частности, Руководство по обработке событий iOS .

Из этого документа есть несколько вещей, которые я бы посоветовал вам попробовать:

  1. Переопределить canBecomeFirstResponder: и вернуть YES (согласно листингу 4-1).
  2. Переопределить viewDidAppear: animated: , чтобы стать первым респондентом (согласно листингу 4-1).
  3. Переопределите оба motionBegan: withEvent: и motionCancelled: withEvent: , как они это делают в примере, что может быть из-за того, что инфраструктура тестирует ваш класс контроллера представления, чтобы увидеть, отвечает ли он к этим селекторам (согласно Перечислению 4-2).

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

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...