Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 旋转器don';我不想从superview中删除_Ios_Swift_Uiview_Uiactivityindicatorview - Fatal编程技术网

Ios 旋转器don';我不想从superview中删除

Ios 旋转器don';我不想从superview中删除,ios,swift,uiview,uiactivityindicatorview,Ios,Swift,Uiview,Uiactivityindicatorview,我有一个UIActivityIndicatorView,所以当我尝试在搜索栏中搜索时,它会在数据进入之前先加载。我使用UIViewController扩展中的微调器制作动画,并从视图中删除动画。但不知何故,当我尝试使用断点时,我无法理解为什么我想要删除的视图没有删除。我创建的函数dismissLoading没有被调用,为什么会发生这种情况?有人能帮我吗。这是我的密码 fileprivate var containerView: UIView! extension UIViewControlle

我有一个UIActivityIndicatorView,所以当我尝试在搜索栏中搜索时,它会在数据进入之前先加载。我使用UIViewController扩展中的微调器制作动画,并从视图中删除动画。但不知何故,当我尝试使用断点时,我无法理解为什么我想要删除的视图没有删除。我创建的函数dismissLoading没有被调用,为什么会发生这种情况?有人能帮我吗。这是我的密码

fileprivate var containerView: UIView!

extension UIViewController {

    func showLoadingView() {
        containerView = UIView(frame: view.bounds)
        view.addSubview(containerView)

        containerView.backgroundColor   = .systemBackground
        containerView.alpha             = 0.0

        UIView.animate(withDuration: 0.25) { containerView.alpha = 0.8 }

        let activityIndicator = UIActivityIndicatorView(style: .large)
        containerView.addSubview(activityIndicator)

        activityIndicator.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            activityIndicator.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            activityIndicator.centerXAnchor.constraint(equalTo: view.centerXAnchor)
        ])

        activityIndicator.startAnimating()
    }

    func dismissLoadingView() {
        DispatchQueue.main.async {
            containerView.removeFromSuperview()
            containerView = nil
        }
    }
}

// This is my PhotosViewController 
extension PhotosViewController: UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {
        guard let searchText = searchController.searchBar.text, !searchText.isEmpty else {
            dataSource.data.value.removeAll()
            viewModel.isSearching.value = false
            return
        }

        photoName = searchText

        viewModel.isSearching.value = true
        showLoadingView()
        if let photoName = photoName {
            viewModel.getPhoto(query: photoName) { [weak self] error in
                self?.dismissLoadingView()
                print(error)
            }
        }
    }
}

您不会看到它消失,因为每次搜索查询更改时,您都会添加容器视图和活动指示器的新实例。如果查询在第一个查询返回结果之前第二次更新,则对第一个
containerView
的引用将重新分配给新的视图实例


如果您试图在演示之前通过检查
containerView==nil
来解决此问题,那么如果您有多个搜索结果请求,其中一个返回,然后,尽管有其他请求,加载视图仍被取消。

尝试打印
self
以及内部错误,并告诉我您得到了什么。@Frankenstein没有打印任何内容,我在尝试打印(self)时使用断点,当我尝试按您的建议检查时,使用erroryes您是对的。在一段时间内,加载似乎比在透明背景下再次加载更容易被忽略,而且不会停止。以后怎么能去掉呢?