UIImage не переходит с использованием fade с переходом блока анимации

#ios #objective-c #xcode #objective-c-blocks #uianimation

#iOS #objective-c #xcode #цель-c-блоки #uianimation

Вопрос:

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

 [UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    self.songTitleLabel.text = currentSong.songTitle;
    self.artistNameLabel.text = currentSong.songArtist;
    self.songImageView.image = currentSong.songArtwork;
}completion:^(BOOL finished){
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:currentSong.songLocation error:nil];
    [self.player setVolume:1.0];
    [self.player play];
}];
 

Я не понимаю, почему у меня нет перехода fade, я пробовал несколько разных UIAnimationOptionTransition… и каждый раз, когда я просто получаю резкий переход к следующему изображению (это происходит и с текстом)

Может кто-нибудь мне помочь?

Ответ №1:

Вы не можете анимировать изменение изображения или текста таким образом. Я сделал это так,

 -(IBAction)doStuff:(id)sender {

    [UIView transitionWithView:self.imageView
                      duration:1.0
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                        [self.imageView setImage:[UIImage imageNamed:@"IMG_0081.JPG"]];
                    } completion:nil];

    [UIView transitionWithView:self.label2
                      duration:1.0
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                        [self.label2 setText:@"New Text"];
                    } completion:nil];
}
 

Если вы меняете несколько меток или представлений изображений, возможно, было бы лучше создать подкласс и переопределить setText: и setImage: . Например, как это для setImage:,

 -(void)setImage:(UIImage *)image {
    [UIView transitionWithView:self
                      duration:1.0
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                       [super setImage:image];
                    } completion:nil];
}
 

Затем вы можете просто использовать,

 self.imageView.image = ...
 

для любого вида изображения, который является вашим подклассом, и он будет пересекать затухание изображений при их изменении.

Комментарии:

1. спасибо, я не знал, что мне нужно было указывать каждое представление, которое я переходил с помощью «переход с помощью view»