V2EX 首页   注册   登录
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/
iOS 开发实用书单
iPhone App Development: The Missing Manual
Cocoa and Objective-C: Up and Running
Cocoa Programming for Mac OS X
深入浅出设计模式 Head First Design Patterns
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
V2EX  ›  iDev

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

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




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

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

    先谢谢各位大哥了~
    10 回复  |  直到 2017-03-21 19:54:07 +08:00
        1
    kevinroot   98 天前
    我记得设计屏幕方向就好
    // 全屏按钮点击
    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];
        2
    pheyer   98 天前 via iPhone
    一个不是办法的办法:可以逆向一下新浪微博 app 看看。
        3
    sobigfish   98 天前
    截屏》隐藏 player 》动画》显示 player ?
        4
    kera0a   98 天前
    @kevinroot 谢谢大兄弟,好像不行~

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


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

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

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

    不过总算知道个大概路线了,我先自己慢慢试吧,看看 ASVideoNode 的源码先折腾下。
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1621 人在线   最高记录 2607   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 57ms · UTC 12:09 · PVG 20:09 · LAX 05:09 · JFK 08:09
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1