0

画面上部のランダムな x 座標に画像を生成するプログラムを作成しました。その後、画像は下に落ちます。ただし、同じ画像のこれらの複製が上から継続的に「雨が降っている」ように、数秒ごとに(同じ画像の)新しい画像を生成し続けたいと考えています。(注: 最終的に、このアプリの開発を続けると、各画像の場所をいつでも思い出す必要があるため、生成された各画像を配列の一部にする必要があると思います。また、それぞれを移動する必要があると考えていますステップバイステップの画像なので、アニメーションに頼ることはできません)。

問題は、このコードをすべて 0.5 秒ごとに繰り返して、新しく生成された各イメージに独自の moveObject タイマーを持たせるにはどうすればよいかということです。上から落ちる雨粒のようになります。

@implementation ViewController {

    UIImageView *_myImage;

}

- (void)viewDidLoad
{
    srand(time(NULL));e
    int random_x_coordinate = rand() % 286;
    CGRect myImageRect = CGRectMake(random_x_coordinate, 0.0f, 40.0f, 40.0f);
    UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
    [myImage setImage:[UIImage imageNamed:@"flake.png"]];
    myImage.opaque = YES;
    [self.view addSubview:myImage];
    _myImage = myImage;


    //FALLING BIRDS TIMER
    moveObjectTimer = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(moveObject) userInfo:nil repeats:YES];


}
    //FALLING BIRDS MOVER
-(void) moveObject {        // + means down and the number next to it is how many pixels y moves down per each tick of the TIMER above
        _myImage.center = CGPointMake(_myImage.center.x, _myImage.center.y +1);
    }
4

3 に答える 3

0

さまざまな解決策があります:

  • UIImageView の配列を更新するタイマーは 1 つだけです (私はこれを好みます)。
  • Imageview をサブクラス化し、タイマーをクラス内に配置して、それぞれが独自のタイマーを持つようにします。
  • タイマーの代わりに使用できるかもしれませんが[UIView animateWithDuration...、同時に多くを使用できるかどうかはわかりません。
于 2012-11-27T08:11:23.253 に答える
0

問題は、このコードをすべて 0.5 秒ごとに繰り返して、新しく生成された各イメージに独自の moveObject タイマーを持たせるにはどうすればよいかということです。

Core Animation のパーティクル エフェクトを調べてください。煙、霧、炎だけではありません。パーティクル エミッタを設定し、画像を使用してパーティクル セルを作成することで、Core Animation に操作全体を任せることができます。このトピックに関する公式ドキュメントはあまり見当たりませんが、 CAEmitterLayerのリファレンス ページを読んで仕組みを理解してから、raywenderlich.com のチュートリアルを参照してください。

于 2012-11-27T08:16:08.230 に答える
0

これfunctionをそれぞれにraindrop object使用pointmoveます。

-(void)raindropAnimation:(CGPoint)dropPoint
{
  raindrop.frame = CGRectMake(dropPoint.x,0,raindrop.frame.size.width,raindrop.frame.size.height) //here y is 0 ie topmost
  [UIView animateWithDuration:2.0 
                      delay:0.0 
                    options:UIViewAnimationCurveEaseInOut 
                 animations:^ {
                      raindrop.frame = CGRectMake(dropPoint.x,dropPoint.y,raindrop.frame.size.width,raindrop.frame.size.height) //will move to point
                 } 
                 completion:^(BOOL finished) {
                     [self perfromSelector:@selector(raindropAnimation:CGPointMake(xnewpointhere,ynewpointhere))];
                 }];
于 2012-11-27T08:23:47.063 に答える