【问题标题】:Using Switch Statement with AVQueuePlayer?使用带有 AVQueuePlayer 的 Switch 语句?
【发布时间】: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;
    }

【问题讨论】:

    标签: objective-c ios6 switch-statement avaudioplayer avqueueplayer


    【解决方案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 数组,基本上我想知道正在播放哪个项目,以便我可以将其图像切换到各自的轨道。
    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多