Iphone UIView animateWithDuration在持续时间更改时不设置动画

Iphone UIView animateWithDuration在持续时间更改时不设置动画,iphone,ios,animation,Iphone,Ios,Animation,我有一个名为 - (void) startAnimationForTime : (NSNumber* ) time { 我从代码中的其他地方调用它。在我第一次调用该方法时,它工作得很好,但是当我使用其他时间段调用它时,它仍然使用以前的时间段设置动画。动画速度不变。 假设我第一次这样调用我的方法 [self performSelectorOnMainThread:@selector(startAnimationForTime:) withObject:[NSNumber numberWithFl

我有一个名为

- (void) startAnimationForTime : (NSNumber* ) time {
我从代码中的其他地方调用它。在我第一次调用该方法时,它工作得很好,但是当我使用其他时间段调用它时,它仍然使用以前的时间段设置动画。动画速度不变。 假设我第一次这样调用我的方法

[self performSelectorOnMainThread:@selector(startAnimationForTime:) withObject:[NSNumber numberWithFloat:20.0] waitUntilDone:NO];
如果我从别的地方把它叫做

[self performSelectorOnMainThread:@selector(startAnimationForTime:) withObject:[NSNumber numberWithFloat:10.0] waitUntilDone:NO];
动画速度预计会更改,但不会更改。 我在这里发布我的动画方法

在我的代码中的其他方法中

  animator1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"beach_bg.png"]];
  animator2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"beach_bg.png"]];

  animator1.frame = CGRectMake(0,-bgHeight,320,bgHeight);
  animator2.frame = CGRectMake(0,0,320,bgHeight);



- (void) startAnimationForTime : (NSNumber*) time {

    animator1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"beach_bg.png"]];
    animator2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"beach_bg.png"]];

    [self.view addSubview:animator1];
    [self.view addSubview:animator2];
    [self.view addSubview:playTime];
    [self.view addSubview:pauseButton];
    [self.view addSubview:bgImageView];

    animator1.frame = CGRectMake(0,-bgHeight,320,bgHeight);
    animator2.frame = CGRectMake(0,0,320,bgHeight);

    [UIView animateWithDuration:[time floatValue]
                          delay:0.0
                        options:UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveLinear
                     animations:^{
                         animator2.transform = CGAffineTransformMakeTranslation(0, bgHeight);  }
                     completion:^(BOOL fin) { if (fin){}}];

    [UIView animateWithDuration:[time floatValue]
                          delay:0.0
                        options:UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveLinear
                     animations:^{
                         animator1.transform = CGAffineTransformMakeTranslation(0, bgHeight);  }
                     completion:^(BOOL fin) { if (fin){}}];

}
我也尝试了第二次调用这个方法

animator1.frame = [[animator1.layer presentationLayer]frame];

animator2.frame = [[animator2.layer presentationLayer]frame];
这将获得我的
animator1
animator2
的当前帧。但这也不行。 我被这件事难住了

任何帮助都将不胜感激


提前感谢。

请在

 animator1.frame = CGRectMake(0,-bgHeight,320,bgHeight);
    animator2.frame = CGRectMake(0,0,320,bgHeight);
这个


并尝试制作动画。希望这有帮助

我看不出你的代码中有任何错误,你是否尝试在“startAnimationForTime”中放置一些日志/断点,并检查你到达那里的时间,我认为这是开始调试的好时机。是的,我放置了一条NSLog语句。它给了我正确的持续时间,而且只调用一次?如果你用20秒调用它一次,然后用10秒直接调用,我认为它可能会忽略第二次调用,如果它在第一次调用的动画中到达。否则,恐怕我真的帮不了你。当[UIView animateWithDuration…]中的时间正确时,它应该工作;)
[self.view addSubview:animator1];
    [self.view addSubview:animator2];
    [self.view addSubview:playTime];
    [self.view addSubview:pauseButton];
    [self.view addSubview:bgImageView];