WebView加载出来的网页,一直处于应用的最上层,切换layer后webview加载的网页还是处于应用的最上层,直接覆盖了另一个层的内容,设置zorder无效,求解,谢谢
webview和videoplayerView都是另外一个surfaceview,和原来cocos其他的渲染窗口不是一个。。。所有修改morder是没有用的。
我切换layer后,webview的内容并没有被隐藏,一直处于应用的最上层,直接覆盖了下一个层的内容,这个怎么解决呢
没有自动隐藏,那你就手动把它隐藏呗= =
webView和Layer,node节点不是属于一个窗口创建出来的,通过layer去隐藏是完全无作用的,需要自己手动去隐藏掉webView或者让其不要绘制
并没什么用,用setVisible(false)和setPositionX(1000)都没用
我在onExit的时候,webview->setVisible(false)或者setPositionX(2000),都没用
把webVIew放到一个panel里面去,然后对panel设置setVisible(false)
哦哦,好的,谢谢哈
我用Layout试了,不行呢
我这边亲测是可以的……(这论坛的指定回复怎么总辣么奇怪)
我在onExit()的时候设置layout->setVisible(false),切换层的时候那个网页并没有隐藏。。不知道问题出在哪里,调试的时候这个方法明明是执行了的
你的“切换层”是什么意思,怎么做的?因为我的理解是旧层removeFromParent,新层add进来……这样即便不写onExit,网页也是会被干掉的。
并没有removeFromParent,我用的是LayerMultiplex,这个可以添加多个层到里面,然后用switchTo函数去切换,切换层的时候都会执行这个层的onEnter和onExit函数,我就在这里面设置layout->setVisible,webview是添加在layout上的,但是离开层后这个webview并没有被隐藏,还是处于界面的最上端,覆盖了新层的内容
我用layerMultiplex切换,还是可以正常移除webVIew啊……我甚至在webView所在的layer的onExit里面都没有对它进行隐藏,仅仅写了一句cc.log(“layer on Exit()”)
而且,事实上,API文档里写的也是,当调用layerMultiplex的swtichTo(n)方法时,The current (old) layer will be removed from it’s parent with ‘cleanup:YES’. 这个跟调用removeFromParent(true);道理应该是一样的。
能否加个Q详谈,471924174
没法用qq……
额。。。,当我手动remove的时候是可以移除,但是我不想移除它,我想切换回这个层的时候能重新显示网页,所以用了setVisible,只是怎么设置都没用
`var WebLayer = cc.Layer.extend({ panel: null, ctor: function () { this._super(); this.loadJson(); }, loadJson: function () { var root = ccs.load(res.WebTestLayer_json).node; this.panel = ccui.helper.seekWidgetByName(root, "panel"); var _web = new ccui.WebView("http://www.baidu.com"); _web.setContentSize(this.panel.width, this.panel.height); this.panel.addChild(_web); //_web.removeFromParent(); //_panel.setVisible(false); this.addChild(root); }, onExit: function () { cc.log("layer on Exit"); //这句不用写,切换时依旧可以正常“隐藏”webView,重新回来还可以看见webView //this.panel.setVisible(false); } });
var HelloWorldScene = cc.Scene.extend({ armature: null, layer: null, layerMultiplex: null, onEnter: function () { this._super(); var temp=this; var _layers = [new WebLayer(), new ProgressLayer()]; this.layerMultiplex = new cc.LayerMultiplex(_layers); this.layerMultiplex.switchTo(0); this.addChild(this.layerMultiplex); this.scheduleOnce(function () { temp.layerMultiplex.switchTo(1); temp.scheduleOnce(function () { temp.layerMultiplex.switchTo(0); }, 3); }, 2); } });`
看来只能上代码了……
你用的是js?我的用的是C艹,我switchTo到别的层的时候,old layer的其他控件是消失了的,就是这个webView的网页跟随着进了新的层,这是我关键部分代码,其他太多不方便贴出来
void JudgeLayer::publishJudge(std::string publishID)
{
auto layer = Layout::create();
layer->setTag(555);
// string ip = LogicManager::getInstance()->getIpAddress();
// string url = “http://” + ip + “/paperless_gfzq/index.php/apipage/judge_api_detail_table/” + publishID;
auto webView = WebView::create();
// webView->setTag(555);
webView->setPosition(this->getContentSize()/2);
webView->setContentSize(this->getContentSize());
webView->loadURL(“http://www.baidu.com”);
layer->addChild(webView);
webView->setScalesPageToFit(true);
this->addChild(layer);
}
void JudgeLayer::onEnter()
{
auto child = this->getChildByTag(555);
if(child)
child->setVisible(true);
}
void JudgeLayer::onExit()
{
auto child = this->getChildByTag(555);
if(child)
child->setVisible(false);
}
调试的时候child->setVisible(false);是执行了的,但是网页还是跟着进入到下一层并没有消失,如果把这句换成child->removeFromParent(),切换的时候倒是能让网页消失,只是再切换回来的时候就看不到网页了