цель c, блок анимации, задержка между анимацией и завершением - PullRequest
3 голосов
/ 02 декабря 2011

У меня есть несколько блоков анимации, каждый из которых следует этому базовому формату с разными задержками, поэтому они запускаются один за другим:

[UIView animateWithDuration:.85 delay:3 options:opts animations:[animations objectAtIndex:ww] completion:[completions objectAtIndex:ww]];

Для простого доступа доступны варианты UIViewAnimationOptionAutoreverse в переменной.

Я хочу, чтобы между анимацией и завершением была задержка, чтобы изображения немного задержались в своей новой позиции, прежде чем вернуться к исходной. Я подумал об использовании нескольких более простых animateWithDuration:animations: блоков, но я не видел никакого способа сделать это с задержкой в ​​документации, если я что-то упустил.

@Paul.s вот код, который я использовал с тем, что вы мне дали:

void (^completion)(void) = ^{
[UIView animateWithDuration:.5
                  delay:5
                options:UIViewAnimationCurveLinear
             animations:[completions objectAtIndex:ww]
             completion:^(BOOL finished) {}];
};


// Call your existing animation with the new completion block
[UIView animateWithDuration:.5
                  delay:1
                options:UIViewAnimationCurveLinear
             animations:[animations objectAtIndex:ww]
             completion:^(BOOL finished) {
               completion();
             }];

для справки, анимация очень простая, просто перемещая изображение из одной точки в другую, а затем обратно. точка, в которой происходит сбой, - это строка [UIView animateWithDuration:.5, в которой определен блок завершения, и происходит сбой после запуска первой части анимации.

1 Ответ

6 голосов
/ 02 декабря 2011

Как насчет передачи другой анимации в завершение?

Обновлено Я обновил код, чтобы он был точным рабочим кодом из примера, который я настроил.Это использует чистый проект, настроенный с использованием шаблона Empty Application

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    CGRect startFrame = CGRectMake(0, 0, 100, 100);

    UIView *view = [[UIView alloc] initWithFrame:startFrame];
    view.backgroundColor = [UIColor greenColor];

    [self.window addSubview:view];

    // Set up your completion animation in a block
    void (^completion)(void) = ^{
        [UIView animateWithDuration:0.5f
                              delay:0.5f
                            options:UIViewAnimationCurveLinear
                         animations:^{
                             view.frame = startFrame;
                         }
                         completion:nil];
      };


      // Call your existing animation with the new completion block
      [UIView animateWithDuration:4
                            delay:1
                          options:UIViewAnimationCurveLinear
                       animations:^{
                           view.frame = CGRectMake(200, 200, 10, 10);
                       }
                       completion:^(BOOL finished) {
                           completion();
                       }];



        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
        return YES;
}
...