ios - Swift:关闭在当前上下文中显示图片的 ViewController 时,屏幕有时会卡住

标签 ios swift uiviewcontroller uicollectionviewcell photo

我遇到了一些麻烦:关闭在当前上下文中显示图片的 ViewController 时,屏幕有时会卡住。

有人可以就如何解决这个问题向我提供一些见解吗?

下面是我的代码示例:

导入 UIKit

类 ViewControllerCell:UICollectionViewCell {

override init(frame: CGRect) {
    super.init(frame: frame)

    backgroundColor = UIColor.white

    addSubview(showPhotoButton)

    showPhotoButton.leftAnchor.constraint(equalTo: leftAnchor, constant: 200).isActive = true
    showPhotoButton.bottomAnchor.constraint(equalTo: topAnchor, constant: 160).isActive = true
    showPhotoButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
    showPhotoButton.widthAnchor.constraint(equalToConstant: 70).isActive = true

}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}


lazy var showPhotoButton: UIButton = {
    let button = UIButton(type: .system)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setTitle("Show", for: .normal)
    button.addTarget(self, action: #selector(showSale), for: .touchUpInside)
    button.setTitleColor(UIColor(r: 120, g: 80, b: 255), for: .normal)
    return button
}()


@objc func showSale() {
    let popupViewController = PopupViewController()
    popupViewController.modalPresentationStyle = .overCurrentContext
    popupViewController.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
    window!.rootViewController?.present(PopupViewController, animated: true, completion: nil)
}

导入 UIKit

类 SalePopupViewController: UIViewController {

override func viewDidLoad() {
    view.backgroundColor = UIColor(white: 1, alpha: 0.60)
    view.isOpaque = false

    view.addSubview(rebateImage)
    view.addSubview(dismissButton)

    dismissButton.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    dismissButton.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    dismissButton.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    dismissButton.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true

    rebateImage.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    rebateImage.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: -35).isActive = true
    rebateImage.heightAnchor.constraint(equalToConstant: 290).isActive = true
    rebateImage.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1).isActive = true


}

let dismissButton: UIButton = {
    let button = UIButton(type: .system)
    button.addTarget(self, action: #selector(dismissPopup), for: .touchUpInside)
    button.translatesAutoresizingMaskIntoConstraints = false
    return button
}()

let rebateImage: UIImageView = {
    let image = UIImageView()
    image.translatesAutoresizingMaskIntoConstraints = false
    image.layer.masksToBounds = false
    image.layer.cornerRadius = 2
    image.contentMode = .scaleAspectFill
    image.clipsToBounds = true
    image.image = UIImage(named: "SaleCostco")
    return image
}()

@objc func dismissPopup() {

    DispatchQueue.global(qos: .userInitiated).async {
        DispatchQueue.main.async {
            self.dismiss(animated: true, completion: nil)
        }
    }


}

最佳答案

您的异步代码没有意义。您分派(dispatch)到一个全局队列,然后立即返回到主线程。尝试简单地将 dismissPopup() 的实现更改为:

@objc func dismissPopup() {
   dismiss(animated: true, completion: nil)
}

关于ios - Swift:关闭在当前上下文中显示图片的 ViewController 时,屏幕有时会卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47780926/

相关文章:

ios 从 ViewController 中的表中删除行

ios - 尽管不使用 Core Plot,但核心动画无法分配字节

iphone - 裁剪和缩放 CGContext - iOS

ios - 如何在tableview cell swift 3.0中设置选中的复选标记

swift - 保存文件但隐藏文件扩展名 - Cocoa with Key Value Coding

swift - 与无效的迭代器/索引一起使用时,快速集合的安全性如何?

iphone - 在 iPad 上 [MFMessageComposeViewCont canSendText] 返回 YES?

ios - 如何检查用户是否在 Pinterest IOS SDK 中获得授权?

ios - UIViewController subview 存在不变性

iPhone:如何设置 UIViewController 框架?