1

だから私はいくつかの UIViews で長時間のアニメーションを実行しようとしています。基本的に私が達成しようとしているのは、正方形のサブビューを取り、それを背景の画面の周りにランダムに浮かべることです (池に浮かぶ葉のように)。通常のアニメーションでやりたいと思っていましたが、これまでのところ、現在の位置から開始するオプションを設定してもアニメーションが停止するという問題がありました。これを行う簡単な方法を知っている人はいますか?

画面上でオブジェクトをランダムに移動するのを見ましたが、最終的には再帰によりスタック オーバーフローが発生するのではないでしょうか?

また、ライブラリ/フレームワークを追加せずにこれを行う方法を尋ねています。

ありがとう!

4

1 に答える 1

1

私はあなたのためにこのコードを書きました:

- (CGFloat) distanceBetweenTwoPoints: (CGPoint) point1 : (CGPoint) point2 {
    CGFloat dx = point2.x - point1.x;
    CGFloat dy = point2.y - point1.y;
    return sqrt(dx*dx + dy*dy );
}

#define kMovingSpeed 25 //pixel per second
- (void) floatView : (id) view_{
    UIView *view = (UIView *)view_;
    CGPoint viewCenter = view.center;
    CGPoint nextCenter = CGPointMake(arc4random() % 320, arc4random() % (([self.view bounds].size.height > 480)?568:460));//or chech for orientation as well
    if (CGPointEqualToPoint(viewCenter, nextCenter))
        [self floatView:view];

    float distance = [self distanceBetweenTwoPoints:viewCenter :nextCenter];
    double time = distance / kMovingSpeed;

    [UIView animateWithDuration:time
                     animations:^{
                         [view setCenter:nextCenter];
                     }
                     completion:^(BOOL finished) {
                         [self floatView:view];
                     }];
}
于 2013-05-19T07:15:58.760 に答える