标签:
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: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
标签:
原文地址:http://www.cnblogs.com/roucheng/p/iosPlugin.html