Skip to content

floatWin

shixuemei edited this page Mar 15, 2017 · 7 revisions

如何实现多页面切换时的悬浮窗效果

在APP内,进行多页面切换后,播放窗口以悬浮窗的形式显示在新的页面上,切换过程中不需要销毁播放器并重建,可做到无缝衔接。

v2.0.3及以上的版本中,demo中演示了悬浮窗的设置方法,效果图如下:

悬浮窗效果

1. 实现思路

  • 在悬浮窗显示的UIViewController对象中,获取到全屏显示时创建的播放器对象

  • 将播放器对象中的view设置为悬浮窗的窗口大小

  • 将播放器对象中view通过addSubView方法添加到悬浮窗UIView上

  • 窗口的相关操作,如移动,缩放等,都可以通过悬浮窗的UIView进行控制

  • 播放器的相关操作,如停止播放,控制音量等,都可以通过该播放器对象进行控制

2. 示例代码

其中全屏显示的UIViewController对象为_playerVC,悬浮窗显示的UIViewController对象为_floatVC,播放器对象为player

  • 在全屏显示UIViewController对象_playerVC中:

创建播放器对象player以及悬浮窗_floatVC,并将_playerVC设置给_floatVC,以便_floatVC得到_player对象

- (void)viewDidLoad {
    [super viewDidLoad];
    
    ......

    _floatVC = [[KSYFloatVC alloc] init];
    _floatVC.playerVC = self;
}

  • 在悬浮窗的UIViewController对象_floatVC中:

将播放器对象player的view大小设置为悬浮窗大小,并将player.view添加至悬浮窗的UIView上即可

- (void)viewDidAppear:(BOOL)animated {
    if(_playerVC && _playerVC.player)
    {
        [_playerVC.player.view setFrame: videoView.bounds];
        [videoView addSubview: _playerVC.player.view];
    }
}
Clone this wiki locally