iOS的QuickTime Plugin

当UIWebView播放视频时,可以看到viewhierarchy里有FigPluginView的身影。这个类来自于QuickTimePlugin,plugin的路径为:/Application

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

当UIWebView播放视频时,可以看到view hierarchy里有FigPluginView的身影。这个类来自于QuickTime Plugin,plugin的路径为:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Internet Plug-Ins/QuickTime Plugin.webplugin

这是个文件夹,里面还有链接库以及文件和图片资源。
QuickTime Plugin这个名字起得很响亮,其实代码并不多,Objective-C类只有9个,也就只是FigPluginView为主了。与WebKit.framework有耦合,或者说就是为了封装视频播放控件来给WebKit.framework用的。类关系如下图:

iOS的QuickTime Plugin

UIWebDocumentView会以成员变量struct __CFDictionary *_plugInViews来配对FigPluginView和UIWebPlugInView,其中FigPluginView为key,UIWebPlugInView为value。
UIWebPlugInView有成员变量UIView *_uiView指向FigPluginView,
FigPluginView有成员变量WAKView *_wakView指向UIWebPlugInView。

当然,视频只是PluginView的一种,UIWebPlugInView还会管理别的种类的plugin。

渲染流程中会有这样的关系:

iOS的QuickTime Plugin

RenderLayerBacking在更新layer树时,从RenderWidget出发通过几层关系得到UIWebPlugInView,调用其函数attachPluginLayer把FigPluginView添加到UIWebDocumentView中。注意这个“添加”是通过好多层CALayer间接实现的,UIWebPlugInView还会创建一个hostLayer作为MediaLayer。调用链的末端实现代码如下:

- (void)_connectPluginLayers  
{  
    WebThreadLock();  
    if (!_hostingLayer)  
    {  
        _hostingLayer = [[CALayer alloc] init];  
    }  
    [_webView.layer insertSublayer:_hostingLayer atIndex:0];  
    if ([[_webView webView] _setMediaLayer:_hostingLayer forPluginView:self])  
    {  
        self.parentedInLayer = YES;  
        [_uiView retain];  
        [_hostingLayer addSublayer:_uiView.layer];  
        [_uiView release];  
        [_webView _setSubviewCachesNeedUpdate:YES];  
        [self _reshapeOnMainThread];  
    }  
}  /* 何问起 hovertree.com */

这里只列个大概了,类间网状依赖,好难画图和用文字说明。总之可以更确定,WAKView就是替代了NSView,以求和Mac的WebView共用代码,但iOS application是单进程程序,只能用CALayer树来代替NSView树做组合了。

推荐:http://www.cnblogs.com/roucheng/p/3528371.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120479.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 云服务器高io是什么_云主机购买

    云服务器高io是什么_云主机购买1:数据读取速度ucloud云主机最低224.8MB/S,最高508.8MB/S,平均410.7MB/S阿里云主机最低17.4MB/S,最高189.6MB/S,平均170.6MB/S万根云主机最低

    2022年8月3日
    4
  • ser-u服务器安装和使用(创建ftp服务器)

    ser-u服务器安装和使用(创建ftp服务器)

    2021年9月23日
    66
  • Gradle DSL method not found: ‘google()’

    Gradle DSL method not found: ‘google()’

    2021年10月1日
    35
  • linux 下gz文件解压命令,Linux解压gz文件的命令怎么写

    linux 下gz文件解压命令,Linux解压gz文件的命令怎么写Linux解压gz文件的命令怎么写发布时间:2020-11-1713:39:53来源:亿速云阅读:122作者:小新小编给大家分享一下Linux解压gz文件的命令怎么写,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!gz文件是一种压缩文件,以.gz或者.tar.gz(.tgz)为扩展名,在Linux、UNIX和OSX下常见…

    2022年5月20日
    41
  • zencart的html文件,zencart模板 哪儿有zencart免费模版?

    zencart的html文件,zencart模板 哪儿有zencart免费模版?才接触zencart,但是代码,css+div都懂,毕竟自己不是美工。现在有个B2教你一个方法,把模板down下来,然后先通过CSS+div修改成适合zencart的标签。哪里有漂亮的zencart模板?免费的如果作者只是玩玩,建议你去zencart国内论坛的模板下载区看看如果是商用,免费模板一般都是拿来作为基础模板进行修改的。哪儿有zencart免费模版?zencart模板里,如何实现在商…

    2022年7月27日
    8
  • STM32与S3C2440的区别

    STM32与S3C2440的区别在学习嵌入式的路上,我们可能会接触到这两个比较典型的MCU。其中最大的区别就是S3C2440能跑linux操作系统,常常作为学习嵌入式linux的硬件平台。可能大家会问既然S3C2440能跑linux操作系统,似乎比stm32厉害多了,为什么不直接去学习S3C2440呢?下面我就大概解释一下大家遇到的困惑:1.先来说说stm32stm32是ST公司推出的基于Cortex-M3内核的

    2022年4月30日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号