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

你有不同的解决方案:

  • 只有 1 个计时器,您可以在其中更新 UIImageView 数组(我更喜欢这个)
  • 子类 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.Just 提供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 回答