使用带有 AVQueuePlayer 的 Switch 语句?
Posted
技术标签:
【中文标题】使用带有 AVQueuePlayer 的 Switch 语句?【英文标题】:Using Switch Statement with AVQueuePlayer? 【发布时间】:2013-03-11 20:21:37 【问题描述】:我有一个由四个轨道组成的队列。当轨道改变时,我想改变一个 UIImage,关于那个特定的轨道(如果轨道 1 正在播放我想显示一个标题为 1.png 的图像,如果轨道 2 正在播放我想显示 2.png 等) .
我想使用 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;
【问题讨论】:
【参考方案1】: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中使用它们:
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:
【讨论】:
嘿,戴夫,所以不起作用的是 switch 表达式。我也不太确定要设置什么。 SoundEmotions 是我的 AVPlayerQueue (soundQueue) 中的 PlayerItem 数组,基本上我想知道正在播放哪个项目,以便我可以将其图像切换到各自的轨道。以上是关于使用带有 AVQueuePlayer 的 Switch 语句?的主要内容,如果未能解决你的问题,请参考以下文章
使用 AVQueuePlayer 时如何在视频之间添加过渡?