0

У меня есть очередь из четырех треков. Когда трек изменяется, я хочу изменить UIImage в отношении этого конкретного трека (если трек 1 воспроизводится, я хочу отобразить изображение под названием 1.png, если трек 2 играет, я хочу отобразить 2.png и т. Д.), ,Использование оператора switch с помощью AVQueuePlayer?

Я хочу использовать оператор switch, но я не уверен, как его использовать, когда дело доходит до установки выражения.

switch(soundEmotions AVPlayerItem) 
    { 
     case yellowVoice: 

      UIImage * yellowImage = [UIImage imageNamed:@"yellow.png"]; 
      [UIView transitionWithView:self.view 
           duration:1.0f 
           options:UIViewAnimationOptionTransitionCrossDissolve 
          animations:^{ 
           mainImage.image = yellowImage; 
          } completion:NULL]; 

      break; 
     case orangeVoice: 

      UIImage * orangeImage = [UIImage imageNamed:@"orange.png"]; 
      [UIView transitionWithView:self.view 
           duration:1.0f 
           options:UIViewAnimationOptionTransitionCrossDissolve 
          animations:^{ 
           mainImage.image = orangeImage; 
          } completion:NULL]; 

      break; 
     case redVoice: 

      break; 
     case pinkVoice: 

      break; 
     default: 


      break; 
    } 

ответ

2

Оператор switch требует целого числа. Целое число, которое вы хотите в этом случае, является индексом текущего воспроизводимого AVPlayerItem.

Итак, сохраните копию массива, переданного массивом AVPlayerItems в AVQueuePlayer. Затем найдите текущий элемент игрока в этом массиве, и вы получите значение индекса.

NSInteger index = [self.soundEmotions indexOfObject:self.player.currentItem]; 
NSString *imageName = nil; 
switch (index) { 
    case 0: 
     imageName = @"yellow"; // You don't need the ".png" part. 
     break: 
    case 1: 
     imageName = @"orange"; 
     break: 
    case 2: 
     imageName = @"red"; 
     break: 
    case 3: 
     imageName = @"pink"; 
     break: 
    default: 
     // Any other number or NSNotFound. 
     break: 
} 

if (imageName) { 
    [UIView transitionWithView:self.view 
         duration:1.0f 
         options:UIViewAnimationOptionTransitionCrossDissolve 
        animations:^{ 
         mainImage.image = [UIImage imageNamed:imageName]; 
        } 
        completion:NULL]; 
} 

Кроме того, вы можете использовать перечисление для констант для лучшей читаемости. Это просто последовательные целые числа.

typedef enum { 
    MyClassPlayerVoiceYellow = 0, 
    MyClassPlayerVoiceOrange, 
    MyClassPlayerVoiceRed, 
    MyClassPlayerVoicePink, 
} MyClassPlayerVoice; 

Затем используйте их в коммутаторе:

switch (index) { 
    case MyClassPlayerVoiceYellow: 
     imageName = @"yellow"; // You don't need the ".png" part. 
     break: 
    case MyClassPlayerVoiceOrange: 
     imageName = @"orange"; 
     break: 
    case MyClassPlayerVoiceRed: 
     imageName = @"red"; 
     break: 
    case MyClassPlayerVoicePink: 
     imageName = @"pink"; 
     break: 
    default: 
     break: 
} 
+0

Эй Дэйв так, что не работает это выражение переключатель. Я не совсем уверен, что бы это сделать. SoundEmotions - это массив PlayerItem в моем AVPlayerQueue (soundQueue), и в основном я хочу знать, какой элемент играет, чтобы я мог переключить его образ на соответствующий трек. – KingPolygon

+0

Спасибо. Я обновил свой ответ. –

+0

Большое вам спасибо за разъяснение этого !!! – KingPolygon

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