微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UIView没有出现

如何解决UIView没有出现

我正在开发一个基于地图的应用程序,用户可以选择地图注释,然后UIView必须与数据库中的照片一起出现,但是我按注释没有任何反应

这是代码

import UIKit
import MapKit
import CoreLocation
import Firebase
import FirebaseStorage

class MapViewController: UIViewController,CLLocationManagerDelegate {
    
    
    @IBOutlet weak var MapButton: UITabBarItem!
    @IBOutlet weak var mapView: MKMapView!

> Here is the UIView that must appear after user selected an annotation

    @IBOutlet var addView: UIView!
    @IBOutlet weak var URLImageView: UIImageView!

     override func viewDidLoad() {
           addView.layer.cornerRadius = 5
     }

    func animateIn() {
        self.view.addSubview(addView)
        addView.center = self.view.center
        
        addView.transform = CGAffineTransform.init(scaleX: 1.3,y: 1.3)
        addView.alpha = 0
        
        UIView.animate(withDuration: 0.3) {
            self.addView.alpha = 1
            self.addView.transform = CGAffineTransform.identity
        }
    }
    
    func animateOut() {
        UIView.animate(withDuration: 0.3) {
            self.addView.transform = CGAffineTransform.init(scaleX: 1.3,y: 1.3)
            self.addView.alpha = 0
        } completion: { (success:Bool) in
            self.addView.removeFromSuperview()
        }

    }

这是当用户选择注释时激活方法方法。它在数据库中查找图像并将其检索,我尝试使用一个简单的UIInageView并使其工作出色,它检索了该图像并将其放入图像视图,但是我需要对其进行自定义,因此我创建了一个必须出现的自定义UIView当用户按下注释时

   func mapView(_ mapView: MKMapView,didSelect view: MKAnnotationView) {
        var coord = self.selectedAnnotation
        coord = view.annotation as? MKPointAnnotation
        let codeLat = coord?.coordinate.latitude
        let codeLon = coord?.coordinate.longitude

        animateIn()
        
        let db = Firestore.firestore()
        
        db.collection("locations").getDocuments() { [self] (querySnapshot,err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                for document in querySnapshot!.documents {
                    if let coords = document.get("pinLocation") {
                        let point = coords as! GeoPoint
                        let lat = point.latitude
                        let lon = point.longitude
                        if codeLat == lat && codeLon == lon {
                            let imageUrl = document.data()["url"]
                            print(imageUrl!)
                            let er = "not found"
                            let url = URL(string: "\(imageUrl ?? er)")!
                            dispatchQueue.global().async {
                                if let data = try? Data(contentsOf: url) {
                                    dispatchQueue.main.async {
                                        self.ecoURLImageView.image = UIImage(data: data)
                                        URLImageView.layer.cornerRadius = 10
                                        URLImageView.clipsToBounds = true
                                        URLImageView.layer.borderColor = UIColor.systemGreen.cgColor
                                        URLImageView.layer.borderWidth = 3
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

}

解决方法

您似乎没有为视图设置框架。

尝试

self.myView.frame = CGRect(X:0,y:0,width:100,height:100)
self.view.addSubview(myView)
,

如果已在Storyboard中添加了UI元素,则 希望将其重新添加到视图层次结构或从视图层次结构中删除。

尝试这样:

class MapViewController: UIViewController,CLLocationManagerDelegate {
    
    
    @IBOutlet weak var MapButton: UITabBarItem!
    @IBOutlet weak var mapView: MKMapView!
    
    // > Here is the UIView that must appear after user selected an annotation
    
    @IBOutlet var addView: UIView!
    @IBOutlet weak var URLImageView: UIImageView!
    
    override func viewDidLoad() {
        addView.layer.cornerRadius = 5
        
        // hide addView on load
        self.addView.isHidden = true
    }
    
    func animateIn() {

        // un-hide addView
        self.addView.isHidden = false
        
        // it's already in the view hierarchy - so don't add it!!!
        //self.addView.removeFromSuperview()
        //self.view.addSubview(addView)
        
        addView.center = self.view.center
        
        addView.transform = CGAffineTransform.init(scaleX: 1.3,y: 1.3)
        addView.alpha = 0
        
        UIView.animate(withDuration: 0.3) {
            self.addView.alpha = 1
            self.addView.transform = CGAffineTransform.identity
        }
    }
    
    func animateOut() {
        UIView.animate(withDuration: 0.3) {
            self.addView.transform = CGAffineTransform.init(scaleX: 1.3,y: 1.3)
            self.addView.alpha = 0
        } completion: { (success:Bool) in
            // hide addView
            self.addView.isHidden = true
            
            // don't remove it from superview
            //self.addView.removeFromSuperview()
        }
        
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。