【问题标题】:iPhone - Play a video on both 3.0 and 4.0 OS / SDK?iPhone - 在 3.0 和 4.0 操作系统/SDK 上播放视频?
【发布时间】:2010-04-21 09:53:49
【问题描述】:

从 iPhone OS SDK 3.2 开始,播放视频真的不一样了。

所以我想知道是否有一种方法可以使用兼容的代码(3.2)全屏播放视频,而无需为这两种情况编写代码。

我认为我们必须编写 2 个版本的类来处理视频播放...

你的!

【问题讨论】:

    标签: iphone video mpmovieplayercontroller


    【解决方案1】:

    我基本上按照上面的 Jeff Kelly 建议在 3.1 及更高版本上运行,注意 instanceRespondToSelector 调用:

    // Initialize a movie player object with the specified URL
    MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
    if (mp)
    {
    
        // Register to receive a notification when the movie has finished playing. 
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePlayBackDidFinish:) 
                                                     name:MPMoviePlayerPlaybackDidFinishNotification 
                                                   object:nil];
    
    
        //Will only run this code for >= OS 3.2 
        if ([MPMoviePlayerController instancesRespondToSelector:@selector(setFullscreen:animated:)]){   
    
            [[NSNotificationCenter defaultCenter] addObserver:self 
                                                     selector:@selector(moviePlayBackStateDidChange:) 
                                                         name:MPMoviePlayerPlaybackStateDidChangeNotification 
                                                       object:nil];
            [[NSNotificationCenter defaultCenter] addObserver:self 
                                                     selector:@selector(nowPlayingMovieDidChange:) 
                                                         name:MPMoviePlayerNowPlayingMovieDidChangeNotification 
                                                       object:nil];
            [[NSNotificationCenter defaultCenter] addObserver:self 
                                                     selector:@selector(moviePlayBackDidFinish:) 
                                                         name:MPMoviePlayerDidExitFullscreenNotification 
                                                       object:nil];
    
            mp.controlStyle = MPMovieControlStyleFullscreen;
    
    
            [mp setScalingMode:MPMovieScalingModeAspectFit];
    
                        //change mainMenu here to whatever your parent view is
            [mp.view setFrame:mainMenu.frame];
            [self.view addSubview:mp.view];
    
    
    
            [mp setFullscreen:YES animated:NO];
        }
    //continue as normal
    

    稍后在moviePlayBackDidFinish 函数中,我使用相同的技术来删除通知。

    【讨论】:

      【解决方案2】:

      一种可能性是为此提供一个辅助方法。这样,您只需编写一次,即可随处拥有此功能。

      要编写辅助方法本身,您需要检查 MPMoviePlayerViewController 是否可用。如果是这样,请使用它,然后全屏显示。否则,只需使用常规 MPMoviePlayerController。

      所以基本框架是:

      -(void)playMovie:(NSURL *)movieURL
      {
          Class mpVC = NCClassFromString("MPMoviePlayerViewController");
          if(mpVC)
          {
              // Generate MPPlayerViewController here and use accordingly
          }
          else
          {
              // Generate MPPlayerController here and use accordingly
          }
      }
      

      【讨论】:

        【解决方案3】:

        您可能必须使用 #if/#else/#endif 块并编译一个通用二进制文件,该文件具有特定 O/S 级别的正确可执行文件。

        【讨论】:

        • 使用这样的预处理器宏将产生执行 Active SDK 设置的任何操作的效果。当您编译应用程序时,如果您的目标是 3.1.3 和更高版本的 iPhone SDK,它将使用 3.1.3 设置编译应用程序,并且相同的二进制文件将用于两个操作系统版本。一般来说,运行时内省(例如if ([SomeClass respondsToSelector:@selector(someSelector)]))是首选。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        相关资源
        最近更新 更多