为啥每次都加载新的 xib 文件?为啥不替换前一个?

Posted

技术标签:

【中文标题】为啥每次都加载新的 xib 文件?为啥不替换前一个?【英文标题】:why every time new xib file is loading?why it is not replace the previous one?为什么每次都加载新的 xib 文件?为什么不替换前一个? 【发布时间】:2017-09-07 07:22:07 【问题描述】:

我的vc代码是这样的。这里的showClick函数是一个按钮点击函数。点击这个按钮我想加载一个xib文件。这是一个音乐播放器。

//
//  PlayerTestOneVC.swift
//  rapapediaPlayer
//
//  Created by rumy hasan on 9/3/17.
//  Copyright © 2017 rumyhasan. All rights reserved.
//

import UIKit
import Jukebox


var viewOne = UIView()
var viewTow = UIView()
var playerMainView: UIView?
var viewOfAll: UIView?

class PlayerTestOneVC: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    


    @IBAction func showClick(_ sender: Any) 
        if let keywindow = UIApplication.shared.keyWindow
            if var viewtag = keywindow.viewWithTag(50)
                viewtag.removeFromSuperview()

            
            if let player = Bundle.main.loadNibNamed("Player", owner: self, options: nil)?.first as? Player
                viewOne = player.viewOne
                viewTow = player.viewTow
                //player.bellowBtn.addTarget(self, action: #selector(change), for: .touchUpInside)
                //playerMainView = player

                player.ppBtnOut.isHidden = true

                player.frame = keywindow.frame
                playerMainView = player
                viewOfAll = player
                viewOfAll?.tag = 50
                playerMainView = player
                keywindow.addSubview(viewOfAll!)

            


        
    




我的 xib 文件如下所示。

点击下方视图后是这样的

没关系,可以正常工作并播放歌曲,但现在如果我再次单击显示按钮,它会在现有视图上方创建一个新视图,并且两个播放器都播放自己的音频,我可以同时听到拖车声,但我需要用新的替换第一个。我该怎么做?

我的 xib 文件下面的按钮点击代码在这里。

@IBAction func belowClick(_ sender: Any) 
    if dropDown
        UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: 

            viewOfAll?.frame = (UIApplication.shared.keyWindow?.frame)!
        , completion:  (completedAnimation) in

        )

    else
        UIView.animate(withDuration: 0.5, animations: 
            viewOfAll?.frame = self.viewOne.frame
            viewOfAll?.frame = CGRect(x: 0 , y: (UIApplication.shared.keyWindow?.frame.height)! - 70, width: (UIApplication.shared.keyWindow?.frame.width)!, height: 70)
        )

    
    dropDown = !dropDown

【问题讨论】:

【参考方案1】:

我认为您的player 应该开始在其他线程中播放音频文件。每当您单击显示按钮时,您都会创建一个新的player,而不会停止以前的player。您只是删除了 viewtag.removeFromSuperview() 的视图,因为它会继续一起播放以前的和新的音频文件。

我认为,您可以创建一个stop 函数并在删除它的视图之前调用它。

【讨论】:

但是我这里也可以看到之前的视图,点击下方可以稍微显示一下。

以上是关于为啥每次都加载新的 xib 文件?为啥不替换前一个?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段代码不能加载我的 NIB/XIB

我装了office2013,为啥每次打开文件时,都加载好长时间?

为啥我必须在自定义 NIB / XIB 中连接 IBOutlet 两次?

3dsmax开启慢为啥?

为啥我的 xib 文件在 Xcode 5 中没有任何作用? [关闭]

为啥我的约束在我的 xib 文件中不起作用