IPhone SDK остановить акселерометр от работы, когда что-то происходит - PullRequest
0 голосов
/ 02 апреля 2010

Я использую акселерометр для перемещения нескольких UIImageViews по экрану, в данный момент акселерометр работает только тогда, когда NSTimer равен 0, это нормально. Я также хотел бы сделать остановку акселерометра снова, когда происходит другая функция.

вот мой код на данный момент:

-(BOOL) accelerometerWorks {
 return time == 0;
}

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
 if(![self accelerometerWorks]) return;
 valueX = acceleration.x*25.5;



 int newX = (int)(ball.center.x +valueX);
 if (newX > 320-BALL_RADIUS)
  newX = 320-BALL_RADIUS;
 if (newX < 0+BALL_RADIUS)
  newX = 0+BALL_RADIUS;


 int XA = (int)(balloonbit1.center.x +valueX);
 if (XA > 320-BALL_RADIUS)
  XA = 320-BALL_RADIUS;
 if (XA < 0+BALL_RADIUS)
  XA = 0+BALL_RADIUS;


 int XB = (int)(balloonbit2.center.x +valueX);
 if (XB > 320-BALL_RADIUS)
  XB = 320-BALL_RADIUS;
 if (XB < 0+BALL_RADIUS)
  XB = 0+BALL_RADIUS;

 int XI = (int)(balloonbit3.center.x +valueX);
 if (XI > 320-BALL_RADIUS)
  XI = 320-BALL_RADIUS;
 if (XI < 0+BALL_RADIUS)
  XI = 0+BALL_RADIUS;

 int XJ = (int)(balloonbit4.center.x +valueX);
 if (XJ > 320-BALL_RADIUS)
  XJ = 320-BALL_RADIUS;
 if (XJ < 0+BALL_RADIUS)
  XJ = 0+BALL_RADIUS;


 int XE = (int)(balloonbit5.center.x +valueX);
 if (XE > 320-BALL_RADIUS)
  XE = 320-BALL_RADIUS;
 if (XE < 0+BALL_RADIUS)
  XE = 0+BALL_RADIUS;


 int XF = (int)(balloonbit6.center.x +valueX);
 if (XF > 320-BALL_RADIUS)
  XF = 320-BALL_RADIUS;
 if (XF < 0+BALL_RADIUS)
  XF = 0+BALL_RADIUS;


 int XH = (int)(balloonbit8.center.x +valueX);
 if (XH > 320-BALL_RADIUS)
  XH = 320-BALL_RADIUS;
 if (XH < 0+BALL_RADIUS)
  XH = 0+BALL_RADIUS;


 ball.center = CGPointMake (newX, 429);
 balloonbit1.center = CGPointMake (XA, 429);
 balloonbit2.center = CGPointMake (XB, 426);
 balloonbit3.center = CGPointMake (XI, 410);
 balloonbit4.center = CGPointMake (XJ, 415);
 balloonbit5.center = CGPointMake (XE, 409);
 balloonbit6.center = CGPointMake (XF, 427);
 balloonbit8.center = CGPointMake (XH, 417);

}

Это все работает нормально, теперь я хотел бы остановить работу акселерометра, используя тот же

метод accelerometerWorks или новый метод, акселерометрWontWork.

Это код, который, когда он вызывается, я бы хотел, чтобы акселерометр остановился. (это очень долго, поэтому я не буду помещать все это туда, но все равно везде):

-(void) checkCollision{

 if (CGRectIntersectsRect(pinend.frame, balloonbit1.frame)){
  if (balloonbit1.frame.origin.y > pinend.frame.origin.y){
   [maintimer invalidate];
   levelfailed.center = CGPointMake (160, 235);
  }
 }
 if (CGRectIntersectsRect(pinend.frame, balloonbit2.frame)){
  if (balloonbit2.frame.origin.y > pinend.frame.origin.y){
   [maintimer invalidate];
   levelfailed.center = CGPointMake (160, 235);
  }
 }
 if (CGRectIntersectsRect(pinend.frame, balloonbit3.frame)){
  if (balloonbit3.frame.origin.y > pinend.frame.origin.y){
   [maintimer invalidate];
   levelfailed.center = CGPointMake (160, 235);
  }
 }
}

Я понимаю, что мне, возможно, придется превратить это в BOOL. Это хорошо.

Если я не объяснил это хорошо, пожалуйста, скажите, и я напишу это.

Спасибо! Гарри.

1 Ответ

7 голосов
/ 02 апреля 2010
accelManeger = [UIAccelerometer sharedAccelerometer];
accelManeger.delegate = nil;

, что остановит вас получать события. Затем установите себя в качестве делегата, если хотите начать заново.

...