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

Правя преход на изображение с помощта на анимационен блок като този

[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];
}];

Не разбирам защо нямам избледняващ преход, опитах няколко различни UIAnimationOptionTransition... и всеки път просто получавам рязък скок към следващото изображение (това се случва и с текста)

Може ли някой да ми помогне?


person shane    schedule 23.06.2014    source източник


Отговори (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 = ...

за всеки изглед на изображение, който е вашият подклас, и ще избледнява изображенията, когато ги промените.

person rdelmar    schedule 23.06.2014
comment
благодаря, не знаех, че трябва да посоча всеки изглед, който прехвърлях с преход с изглед - person shane; 23.06.2014