0

while ループにアクションがあります。

while (y < 26)
{
    [NSTimer scheduledTimerWithTimeInterval:.06 target:self selector:@selector(self) userInfo:nil repeats:NO];

    self.ball.center = CGPointMake(_ball.center.x + 0, _ball.center.y + 10);

    y = y + 1;
}

ボタンをクリックしたときのボールの画像があります。ボールを下に移動させたいのですが、0.5 秒待ってからもう一度移動する必要があります。sleep(.5)とを試しまし [NSTimer scheduledTimerWithTimeInterval:.05 target:self selector:@selector(self) userInfo:nil repeats:NO];たが、うまくいきませんでした。

4

2 に答える 2

0

次のように、ボールの動きをアニメーション化できます。

/// declare block for animating
@property (nonatomic, strong) void(^animationCompletion)(BOOL);

CGFloat static kAnimationDuration = 0.3;
...

/// you declare here next position
CGPoint myPoint = CGPointMake(x, y)

/// create weak of self to not make retain cycle
ClassName __weak weakSelf = self;

/// define completion block declared above.
/// this block is called when one step is done. look below this block.
self.animationCompletion = ^(BOOL finished) {
    myPoint = CGPointMake... //next point to move to
    if (myPoint == lastPoint/*or other check when to finish moving*/) {
        weakSelf.animationCompletion = nil; /// nil your block to not call this again
    }
    /// call next animation with next step
    UIView animateWithDuration:kAnimationDuration animations:^{
        // animate to next point
    } completion:weakSelf.animationCompletion; /// and call block itself to make some sort of loop. 
}

/// here is first call of above block. you make first step here.
UIView animateWithDuration:kAnimationDuration animations:^{
 // animate to next point
} completion:self.animationCompletion;

それは働いていますか?はい。iOS 用 Arcade Balls アプリを見てください。そこで使いました。

于 2013-10-30T19:31:30.840 に答える