V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
kera0a
V2EX  ›  iDev

求大神指点一个 iOS 视频全屏的细节实现。

  •  
  •   kera0a · 2017-03-20 16:14:41 +08:00 · 3337 次点击
    这是一个创建于 2805 天前的主题,其中的信息可能已经有所发展或是发生改变。
    iOS 做视频全屏旋转动画时, AVPlayer 并不会跟随 Frame 动画,
    而是直接变成设置的 frame 值。如图,黑色是全屏时的大小。退出全屏动画刚开始, AVPlayer 就变成了最终大小,没有跟随 frame 动画




    动画代码只有两行 设置 transform 和 frame

    下了不下 10 个开源库读代码,均存在此问题。但是新浪微博的实现很完美,所以知道应该是可以实现的,就是没什么头绪。希望大神们指点一下,或者如果你知道有哪个开源实现可以告诉我。

    先谢谢各位大哥了~
    10 条回复    2017-03-21 19:54:07 +08:00
    kevinroot
        1
    kevinroot  
       2017-03-20 16:43:31 +08:00
    我记得设计屏幕方向就好
    // 全屏按钮点击
    if ([UIDevice currentDevice].orientation != UIDeviceOrientationPortrait) {
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
    } else {
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
    }

    // 可能用的是事件通知
    [[NSNotificationCenter defaultCenter] postNotificationName:MPMoviePlayerWillEnterFullscreenNotification object:nil];
    pheyer
        2
    pheyer  
       2017-03-20 16:45:26 +08:00 via iPhone
    一个不是办法的办法:可以逆向一下新浪微博 app 看看。
    sobigfish
        3
    sobigfish  
       2017-03-20 16:49:53 +08:00
    截屏》隐藏 player 》动画》显示 player ?
    kera0a
        4
    kera0a  
    OP
       2017-03-20 17:30:28 +08:00
    @kevinroot 谢谢大兄弟,好像不行~

    @pheyer 逆向到这个地步,应该很难很难吧~ 我觉得我应该做不到 囧~~


    @sobigfish 谢谢!不过这就出现了另外一个问题,动画期间 视频不动了~
    sobigfish
        5
    sobigfish  
       2017-03-20 17:54:42 +08:00
    @kera0a #4 直播? 录像视频播放的话暂停也好啊,不会遗漏(可能的)重要画面。
    https://github.com/BrikerMan/BMPlayer
    https://github.com/easyui/EZPlayer
    看他们的截图,转屏好像是有过渡的
    kera0a
        6
    kera0a  
    OP
       2017-03-20 18:12:49 +08:00
    @sobigfish 谢谢大兄弟~不是直播。
    如果不追求这个的细节的话,效果也还可以(动画太快用户留意不到),只是对别人的完美实现感到好奇。

    看了你这两个库,也没有过渡动画。囧
    HelveticaNeue
        7
    HelveticaNeue  
       2017-03-20 20:37:12 +08:00 via iPhone
    能否给个 demo ,我可以帮着调一下
    kera0a
        8
    kera0a  
    OP
       2017-03-21 10:50:01 +08:00
    @wuyuehyang 谢谢大兄弟! ZFPlayer 存在这个问题,并且他的全屏逻辑非常简单适合调试。如果你有兴趣的话可以调试下这个库。
    HelveticaNeue
        9
    HelveticaNeue  
       2017-03-21 18:57:06 +08:00
    @kera0a
    我看了一眼 ZFPlayer 的代码,质量实在太差,眼疼不想看。
    我写了一个 demo ,转屏时没有发现你说的问题,你看一下是不是这个效果
    https://github.com/WuYuehYang/TestAVPlayerRotation
    kera0a
        10
    kera0a  
    OP
       2017-03-21 19:54:07 +08:00
    @wuyuehyang 非常感谢,你这个没有问题。
    我自己测试后发现
    AVPlayer 改变方向动画 跟随 ViewController 横竖屏动画时没问题。
    我的实现是自己做 transform 动画改变角度(不做一些处理会有上面的问题,普通的 AVPlayer 做一些处理也能显示完美)

    不过可惜的是 我用的不是单纯的 AVPlayer ,是 AsyncDisplayKit 的 ASVideoNode ,并且加了很多 flex 布局(这些布局倒是动画正常), 这个控件用你的方法还是会有问题

    不过总算知道个大概路线了,我先自己慢慢试吧,看看 ASVideoNode 的源码先折腾下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:08 · PVG 03:08 · LAX 11:08 · JFK 14:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.