嗨我有一个NSArray包含许多'多媒体动作',因为我喜欢称它们为对象,它封装了一些多媒体内容,如电影和照片。我想按顺序“玩”它们,等待每一个完成后再打电话给对方。
在调用下一个操作之前管理每个操作的持续时间的最佳方法是什么?(对于照片想象一个UIAlertView在几秒钟后延迟解雇,对于电影想象一个MPMoviePlayerController而不是)
我已经调用了使用NSOperation扫描数组的方法。
重要事项:无论是否在NSOperation中调用,MPMovieController似乎都不会播放(界面甚至不显示)。还有其他人遇到过这个问题吗?
更新使用performSelectorOnMainThread:
使MPMoviePlayer按预期工作
答案 0 :(得分:1)
这是我设法找到的解决方案。我发布的是任何人都感兴趣的案例。
首先,我将所有'多媒体动作'放在NSOperationQueue
中并将maxConcurrentOperationCount
设置为1,因此我确信它们将从主线程异步运行,但只有一个在以FIFO顺序排列的时间(这一点非常重要,您希望屏幕上的内容不重叠)。
然后对于每个动作,我会根据其类/种类以特定方式激活它。我们假设有三种行为:
对于前两个,我使用NSNotifications
来管理队列,因为我不知道内容何时会停止播放或将被用户解雇(假设通过触摸)。所以对于每一个我:
setSuspended:YES
setSuspended:NO
对于UIAlertView,通知会以performSelector:withObject:afterDelay:
张贴,说明应显示的时间或双击后的时间。对于A MPMovieController,它会自动启动并命名为MPMoviePlayerPlaybackDidFinishNotification
。 UIAlertView和MP类都应在主线程上播放。
第三种可以是简单地在放入队列的NSInvocationOperation中执行的一组指令。所以我甚至可以创建像'wait'这样暂停队列执行几秒钟的动作