最近写的项目添加实时音乐频谱,需要弹出新的窗口
教程被应用在MediaStateT中
MediaStateT Github项目地址: https://github.com/taxue-alfred/MediaStateT
MediaStateT Gitee项目地址: https://gitee.com/MediaState/MediaStateT
问题引出
前几节讲到,我们实现了如下的窗口效果:
这个弹出的界面是主窗口,我们需要在此之上弹出一个新的窗口。但是随即发现一个问题。先来看看主窗口隐藏的代码:
//结束动画结束之后隐藏窗口
onFinished:{
show_timer.stop()
pop_window.hide() //这一行隐藏了窗口
}
可以看到这一行把主窗口在动画结束之后进行了隐藏。
我们此时创建新的窗口。但是当新建的窗口被关闭之后,发现整个程序被退出,随即发现程序的析构函数被执行。
于是总结出:当主窗口不处于活跃状态的时候,子窗口关闭会执行析构函数
解决思路
那么怎么解决?我们换个思路==> 既然想要达到隐藏效果,那么我们将主窗口的宽高设置为0,0是不是也可以达到隐藏的效果呢?我们来试一试:
//新建一个函数,pop_window指的是主窗口的动画模块,参照我前面的教程就知道这个模块具体是干嘛的了,这里不再赘述
function disattack(){
pop_window.width = 0
pop_window.height = 0
}
然后我们来修改onFinished
这个信号被触发时执行的语句:
//结束动画结束之后隐藏窗口
onFinished:{
show_timer.stop()
pop_window.disattack()
}
当然,在下次需要弹出的时候还需要恢复其原来的宽高:
//显示弹窗,这里函数我前面的教程也有写,这里不再赘述。
function showWindow(){
if(sign === 0){
//恢复大小
//content_loader为Loader的ID
pop_window.width = content_loader.width
pop_window.height = content_loader.height
show_anim.start()
sign = 1
}
}
按照这个思路,下次子窗口关闭之后主窗口如果被关闭就可以考虑你是不是隐藏了主窗口造成的。