отмените UIView animateWithDuration перед завершением


В моем проекте есть такой код:

- (void) fadeImageView {
    [UIView animateWithDuration:1.0f
                          delay:0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         self.imageView.alpha = 0.0f;
                     }
                     completion:^(BOOL finished) {
                         //make the image view un-tappable.
                         //if the fade was canceled, set the alpha to 1.0
                     }];

}
Однако есть обстоятельства, при которых я хотел бы отменить эту операцию до того, как imageview станет невидимым. Есть ли способ отменить эту анимацию в середине анимации?
3 16

3 ответа:

Update: предпочитаю этот ответ https://stackoverflow.com/a/21527129/194309 от Борута Томазина

Из документов Apple: Использование этого метода не рекомендуется в iOS 4.0 и более поздних версиях. Вместо этого вы должны использовать animateWithDuration:delay:options:animations:completion: способ задания анимации и параметров анимации.:

[UIView animateWithDuration:1.f
                      delay:0
                    options:UIViewAnimationOptionBeginFromCurrentState
                 animations:^{
                     self.imageView.alpha = 0.0f;
} completion:NULL];

Прежде всего, вы должны добавить UIViewAnimationOptionAllowUserInteraction в опцию like..

- (void) fadeImageView {
    [UIView animateWithDuration:1.0f
                          delay:0
                        options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction
                     animations:^{
                         self.imageView.alpha = 0.0f;
                     }
                     completion:^(BOOL finished) {
                         //make the image view un-tappable.
                         //if the fade was canceled, set the alpha to 1.0
                     }];

}

А затем сделайте такой метод....

-(void)stopAnimation {
    [self.routeView.layer removeAllAnimations];
}

После этого, когда вы хотите удалить анимацию вызовите выше метод using .....

[self performSelectorOnMainThread:@selector(stopAnimation) withObject:nil waitUntilDone:YES];

Надеюсь, что это поможет вам

Счастливое кодирование.........!!!!!!!!!!!! :)

Правка:

Спасибо user1244109, чтобы направлять меня для этого.

Для iOS7 мы должны добавить еще один вариант UIViewAnimationOptionBeginFromCurrentState, например:

[UIView animateWithDuration:1.0f
                              delay:0
                            options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState
                         animations:^{
                             self.imageView.alpha = 0.0f;
                         }
                         completion:^(BOOL finished) {
                             //make the image view un-tappable.
                             //if the fade was canceled, set the alpha to 1.0
                         }];