1

このなど、関連する質問がいくつか見つかりましたが、ここでも少し助けが必要です。私が欲しいのは、一度クリックすると、次のいずれかの方法でランダムに飛行するボタンです。1、5 つのランダムな位置を飛行し、元の位置に戻ります。または 2、ランダムに 2 秒間飛行し、その後元の位置に戻ります。

これが私のコードですが、停止コントロールがまだありません:

   //if the button clicked
    [self animationLoop:@"Wrong!" finished:1 context:nil];
    -(void)animationLoop:(NSString *)animationID finished:(int)finished context:(void *)context {
   [UIView beginAnimations:nil context:nil];
   [UIView setAnimationDuration:1];
   [UIView setAnimationRepeatCount:finished];

   CGFloat x = (CGFloat) (arc4random() % (int) self.view.bounds.size.width);
   CGFloat y = (CGFloat) (arc4random() % (int) self.view.bounds.size.height);
   CGPoint squarePostion = CGPointMake(x, y);
   theWrongButton.center = squarePostion;

   [UIView setAnimationDelegate:self];
   [UIView setAnimationDidStopSelector:@selector(animationLoop:finished:context:)];

  [UIView commitAnimations];
  }

私の質問は、アニメーションを数回または数秒ループさせる方法のようなものだと思います。

4

3 に答える 3

1

あなたが求めているのは、まさにコンテキストパラメータが何のために使われるかです。これにより、後で使用できる任意のオブジェクトを渡すことができます。たとえば、このようなものはあなたが探しているかもしれないものです:

    [self animationLoop:@"Wrong!" finished:1 context:[NSNumber numberWithInt:0]];
-(void)animationLoop:(NSString *)animationID finished:(int)finished context:(void *)context {

    NSNumber *count = (NSNumber *)context;
    if ([count intValue]) >= 5) {
        return;
    }
    [UIView beginAnimations:nil context:[NSNumber numberWithInt:[count intValue]+1]];
    [UIView setAnimationDuration:1];
    [UIView setAnimationRepeatCount:finished];

    CGFloat x = (CGFloat) (arc4random() % (int) self.view.bounds.size.width);
    CGFloat y = (CGFloat) (arc4random() % (int) self.view.bounds.size.height);
    CGPoint squarePostion = CGPointMake(x, y);
    theWrongButton.center = squarePostion;

    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationLoop:finished:context:)];

   [UIView commitAnimations];
   }
于 2012-12-28T00:21:16.583 に答える
0

これを試してみてください

    [UIView animateWithDuration:<#(NSTimeInterval)#> 
                     animations:<#^(void)animations#> 
                     completion:<#^(BOOL finished)completion#>];

このアニメーションコマンドには、完了ブロックが付属しています。

于 2012-12-28T00:21:53.497 に答える
0

私は最終的にこれを使用しました:

    //in the animation loop
       if (animationLoopCounter > 3) {
        return;
        }

   [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];

   - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
   animationLoopCounter++;
   [self animationLoop:@"Wrong!" finished:1 context:nil];
   }
于 2012-12-28T00:49:04.047 に答える