当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用的。类关系如下图:

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

当然,视频只是PluginView的一种,UIWebPlugInView还会管理别的种类的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:];
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

iOS的QuickTime Plugin的更多相关文章

  1. ionic cordova plugin for ios

    源代码结构目录: payplugin: |_src |_android |_PayPlugin.java |_ios |_CDVPayPlugin.h |_CDVPayPlugin.m |_www | ...

  2. [Cordova] Plugin开发入门

    [Cordova] Plugin开发入门 Overview Cordova的设计概念,是在APP上透过Web控件来呈现Web页面,让Web开发人员可以操作熟悉的语言.工具来开发APP.使用Web页面来 ...

  3. Building Plugins for iOS

    This page describes Native Code Plugins for the iOS platform. Building an Application with a Native ...

  4. OSG-3.4.0 简要说明(Readme)

    欢迎来到OpenSceneGraph(OSG)世界. Welcome to the OpenSceneGraph (OSG). 对于项目最新信息, 以及如何编译和运行库和示例的更多细节, 可以查看OS ...

  5. 新MBP使用git命令时启用xcode的终端log

    Last login: Mon Oct 22 12:41:33 on consoleuser:~ me$ git Agreeing to the Xcode/iOS license requires ...

  6. Jenkins常用插件说明(持续更新)

    本文主要记录在学习以及使用Jenkins过程中常用的对我们有帮助的插件,同时本文将会持续进行更新.如果大家发现有其他野很好用的插件,也欢迎参照下面的格式,在评论中进行回复反馈. 一.通用插件 1.Em ...

  7. plugin-barcodescanner 报错

    https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/418 ionic cordova platform rm andr ...

  8. weex安装失败,按照官网步骤多次失败后成功

    在安装Weex Toolkit之前,需要确保安装了node, npm. yangfeifei:~ yff$ node -v v6.10.2 yangfeifei:~ yff$ npm -v 3.10. ...

  9. [CocoaPods]如何使用CocoaPods插件

    CocoaPods +插件 CocoaPods是一个由极少数维护者运营的社区项目,需要维护大量的表面区域.可以肯定地说CocoaPods永远不会支持Xcode支持的每个功能,即使这样,团队也必须对许多 ...

随机推荐

  1. 《30天自制操作系统》笔记(06)——CPU的32位模式

    <30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...

  2. 创建Cookie,简单模拟登录,记录登录名,购物车记录先前添加内容,session控制登录

     工作任务:模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站, ...

  3. jQuery_03之事件、动画、类数组操作

    一.事件: 1.模式触发事件:  ①DOM:elem.onXXX();只能触发直接用onXXX绑定的事件处理函数:用addEventistener添加的事件监听无法模拟出发触发:  ②jQuery:$ ...

  4. 学习bootstrap遇到的问题--001 关于bootstrap中类.disabled不禁用默认行为

    自学bootstrap遇到的疑惑篇: 按钮状态--禁用 在Bootstrap框架中,要禁用按钮有两种实现方式: 方法1:在标签中添加disabled属性 方法2:在元素标签中添加类名"dis ...

  5. 关于OpenVPN的入门使用

    关于OpenVPN的入门使用 1.1源代码编译安装的初步了解 1.2 安装OpenVPN 1.3 生成证书.服务器端证书.客户端证书 1.4 关于server.ovpm & client.ov ...

  6. Constraint1:主键约束,唯一性约束和唯一索引

    1,主键约束创建索引 作为Primay Key的列是唯一的,非空的,Sql Server在创建主键约束时,自动为主键列创建一个唯一索引,并且索引列不允许为null. create table dbo. ...

  7. 理解模板引擎Razor 的原理

    Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目.Razor Pad是一 ...

  8. word-wrap: break-word; break-word: break-all;区别

    word-break:break-all和word-wrap:break-word都是能使其容器如DIV的内容自动换行. 它们的区别就在于: 1,word-break:break-all 例如div宽 ...

  9. 分享一个 C# Winfrom 下的 OutlookBar 控件的使用

    最近在上网的时候,发现了这个C# 下的 OutlookBar 控件,看了一下感觉还真不错,特此记录一下. using System; using System.Drawing; using Syste ...

  10. Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

    模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...