2

嗨,我有一个 NSArray,其中包含许多我喜欢称之为“多媒体动作”的对象,这些对象封装了一些多媒体内容,如电影和照片。我想按顺序“播放”它们,等待每个完成,然后再调用另一个。

在调用下一个操作之前管理每个操作的持续时间的最佳方法是什么?(对于照片想象一个 UIAlertView 在延迟几秒钟后关闭,对于电影想象一个 MPMoviePlayerController 代替)

我已经调用了使用 NSOperation 扫描数组的方法。

重要提示:无论是在 NSOperation 中调用,MPMovieController 似乎都不会播放(界面甚至不会出现)。有没有其他人遇到过这个问题?

更新使用performSelectorOnMainThread:使 MPMoviePlayer 按预期工作

4

1 回答 1

1

这是我设法找到的解决方案。如果有人感兴趣,我会发布它。

首先,我将所有“多媒体操作”放在 a 中NSOperationQueue,并将其设置maxConcurrentOperationCount为 1,因此我确信它们将从主线程异步运行,但一次只能以 FIFO 顺序运行(这对你想要的非常重要您的内容不会在屏幕上重叠)。

然后对于每个动作,我根据其类别/种类以特定方式激活它。假设有三种动作:

  1. UIAlertViews 子类
  2. MPMoviePlayerController-like
  3. 背景动作(不涉及多媒体内容的动作立即出现在当前视图中

对于前两个,我NSNotifications用来管理队列,因为我不知道内容何时会停止播放或被用户关闭(假设通过触摸)。所以对于每一个我:

  • 暂停队列执行setSuspended:YES
  • 为相应的 NSNotification 添加观察者
  • 播放内容
  • 当他们完成播放时发布通知
  • 移除观察者并再次启动队列setSuspended:NO

对于 UIAlertView,通知会发布,performSelector:withObject:afterDelay:并说明应显示的时间量或双击后。而对于 A MPMovieController,它会自动启动并命名为MPMoviePlayerPlaybackDidFinishNotification. UIAlertView 和 MP 类型都应在主线程上播放。

第三种可以是一组指令,简单地在 NSInvocationOperation 中执行,放入队列。所以我什至可以创建诸如“等待”之类的操作,将队列执行暂停几秒钟

于 2010-08-20T08:45:38.050 回答