无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站虚位以待
虚位以待广告联系 QQ:184822951 微信:wuyouceoidc大全★服务器租用★香港/5M/450元
查看: 2701|回复: 2

AVPlayerViewController 结构分析

[复制链接]
发表于 2016-1-5 10:23:59 | 显示全部楼层 |阅读模式
av.view — UIView - 7个子视图

0        无法播放的视频格式显示这一视图,如
        <AVUnsupportedContentIndicatorView: 0x13c6ce0e0; frame = (0 0; 320 568); hidden = YES; layer = <CALayer: 0x13c6c4ce0>>
- UIImageView (是播放图片按钮,带有一斜扛,s0)

1        只播放音频文件时显示
        <AVAudioOnlyIndicatorView: 0x13c6e51d0; frame = (0 0; 320 568); hidden = YES; layer = <CALayer: 0x13c6e5590>>
- UIImageView(可能是中间无视频,只播放音频时的图片,s1)

2        只显示一个电脑图标,可能是airplay状态类似
        <AVExternalPlaybackIndicatorView: 0x13c552cf0; frame = (0 0; 320 568); hidden = YES; layer = <CALayer: 0x13c551950>>
        - <UIView: 0x126ec1710; frame = (160 213.5; 0 97); layer = <CALayer: 0x126eb3d40>>
                <UIImageView: 0x126ec1880; frame = (-65.5 0; 131 90); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x126eb2540>>   playBack.png
                <UILabel: 0x1455a9aa0; frame = (0 97.5; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1455a95e0>>
                <UILabel: 0x1455a9d90; frame = (0 100.5; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x14558bd00>>

3        从网络载入
        <AVLoadingIndicatorView: 0x13c6c8010; frame = (0 0; 320 568); hidden = YES; tintColor = UIDeviceRGBColorSpace 0.556863 0.556863 0.576471 1; layer = <CALayer: 0x13c62c9b0>>
        - <UIView: 0x137d9f430; frame = (141.5 265.5; 37 37); layer = <CALayer: 0x137d9f5a0>>
                <UIActivityIndicatorView: 0x15f5e6120; frame = (0 0; 37 37); hidden = YES; layer = <CALayer: 0x15f5e6570>>

4        UIView  4是内容视图,下面有两个子视图
                        0         <__AVPlayerLayerView: 0x1365e2740; frame = (0 0; 320 568); layer = <AVPlayerLayer: 0x1365df2a0>>
                        1         <UIView: 0x1365e3730; frame = (0 0; 320 568); layer = <CALayer: 0x1365e3230>>   //  playerViewController.view.subviews[0].subviews[4].subviews[1]     此视图 === AVPlayerViewController的 .contentOverlayView 属性

5        <UIView: 0x145749de0; frame = (0 0; 320 568); layer = <CALayer: 0x14574afa0>>             // playerViewController.view.subviews[0].subviews[5]          此视图是可触摸区
                <AVAlphaUpdatingView: 0x1456f6c60; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x1456cbad0>>
                        <UIView: 0x127dcd050; frame = (0 0; 320 50); layer = <CALayer: 0x127dab920>>
                                <_UIBackdropView: 0x1376cbbe0; frame = (0 0; 320 50); opaque = NO; layer = <_UIBackdropViewLayer: 0x137650de0>>
                        <UIView: 0x127f1b0a0; frame = (0 488; 320 80); layer = <CALayer: 0x127edc730>>
                                <_UIBackdropView: 0x13771ca20; frame = (0 0; 320 80); opaque = NO; layer = <_UIBackdropViewLayer: 0x1375fb700>>

6        <AVTouchIgnoringView: 0x12ceaf1d0; frame = (0 0; 320 568); layer = <CALayer: 0x12ceaf580>>
发表于 2016-7-27 16:20:41 | 显示全部楼层
已举报。
我觉得这种老虎嘴里拔牙的行为应该留作纪念。
回复

使用道具 举报

 楼主| 发表于 2016-11-27 23:36:56 | 显示全部楼层
今天终于用上这个,纪念一下。
经验总结:

自定义AVPlayerViewController ,给视图添加手势,要通过 playerViewController.view.subviews[0].subviews[5] 这个view 可操作视图来添加手势,
而实际视频的显示的图层在 playerViewController.view.subviews[0].subviews[4].subviews[0] ,要控制缩放就要操作这个视图。
playerViewController.view.subviews[0].subviews[4].subviews[1]    === AVPlayerViewController的 .contentOverlayView 属性,只可添加不可操作的、只显示的控件,如 label  image

要增加主视图的可以响应事件的按钮,只可以通过 playerViewController.view.addSubview ( 或  playerViewController.view.subviews[0].subviews[5].addSubview ,不推荐) 来添加
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2020-1-20 23:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表