2014-01-30 4 views
0

у меня есть проблемы с помощью ползунка, чтобы вызвать серию анимаций, вот код:UIView анимация завершения не работает должным образом

-(void)slideAlpha:(id)sender{ 

    self.bigPhotoViewA.alpha = self.alphaSlider.value; 

    if (self.alphaSlider.value == 1){ 

    [UIView animateWithDuration:1 
        animations:^{ 
         self.alphaSlider.alpha = 0; 
        } completion:nil 
    ]; 

    [self performSelector:@selector(nextPhotoAnimation) withObject:self afterDelay:5.0 ]; 
    } 
} 

-(void) nextPhotoAnimation{ 

    self.alphaSlider.value = 0; 

    [UIView animateWithDuration:2 
        animations:^{ 
         self.bigPhotoViewA.alpha = 0.0; 
         self.bigPhotoView.alpha = 0.0; 
         self.smallPhotoView.center = CGPointMake(startX, startY); 
        } 
        completion:^(BOOL finished) { 
         NSLog(@"Animation ended"); 
         self.smallPhotoView.image = ((UIImage *)[smallImagesArray objectAtIndex:imageCount]); 
        } 
    ]; 
} 

Итак, когда ползун достигает значения 1, nextPhotoAnimation запускается после задержка. Все идет нормально. Проблема возникает внутри nextPhotoAnimation. Блок animations работает нормально, но блок completion запускается несколько раз каждый раз, когда вызывается nextPhotoAnimation. Я получаю NSLog от 6 до 9 раз, когда начинается nextPhotoAnimation, а затем я получаю его снова в нужное время через 2 секунды.

NSLog

Я попытался воспроизвести проблему с простым кодом и потоком animation/completion работает просто отлично.

+0

проверка 'BOOL finished' в' завершения:^(BOOL законченный) ' – Akhilrajtr

+0

@Akhilrajtr, я попытался положить весь' completion' блок внутри 'если (законченный) {...} 'заявление. Все еще работает неправильно. Спасибо за ваш комментарий. – guardabrazo

ответ

1

Попробуйте это в nextPhotoAnimation,

-(void) nextPhotoAnimation{ 

    self.alphaSlider.value = 0; 

    [UIView animateWithDuration:2 
       animations:^{ 
        self.bigPhotoViewA.alpha = 0.0; 
        self.bigPhotoView.alpha = 0.0; 
        self.smallPhotoView.center = CGPointMake(startX, startY); 
       } 
       completion:^(BOOL finished) { 
        if (finished) { 
         NSLog(@"Animation ended"); 
         self.smallPhotoView.image = ((UIImage *)[smallImagesArray objectAtIndex:imageCount]); 
        } 
       } 
    ]; 
} 
+1

Я уже пробовал это. Я получаю такое же поведение. – guardabrazo

0

ни вы не используете

[UIView beginAnimations: контекст ноль: ноль];

ни

[UIView commitAnimations]; Лучшим способом является создание UIView, а затем использование протоколов. Используйте свои методы, используя [self YOURMETHOD]; в представлении. :-)

+0

Как сказано в описании класса 'UIView' о' beginAnimations' и 'commitAnimations': « Использование методов в этом разделе не рекомендуется в iOS 4 и более поздних версиях. Вместо этого используйте методы анимации на основе блоков ». Я бы предпочел блочное анимационное решение для этой проблемы. – guardabrazo

Смежные вопросы