Swift UIImageView始终为空

时间:2017-01-30 22:23:43

标签: ios swift uiimageview uiimage viewcontroller

我的UIImageView始终为空白。加载图像视图后,我将图像和图像视图打印出来。这是代码第一部分中print的输出: UIImage:0x170898010>,{4032,3024} UIImageView:0x14bb077e0; frame =(0 64; 375 554); 这是代码第二部分中print的输出: autoresize = RM + BM; userInteractionEnabled = NO; layer = CALayer:0x170a31240 它似乎存储了图像,但它没有出现。

这里是下载并转换正确保存到CloudKit的图像的地方:

if let asset = record["Picture"] as? CKAsset,
       let data = NSData(contentsOf: asset.fileURL),
       let image1 = UIImage(data: data as Data)
       {
           let eventPageViewController:EventPageViewController = self.storyboard?.instantiateViewController(withIdentifier: "EventPage") as! EventPageViewController
           eventPageViewController.toPass = image1
           print(image1)
       }

以下是显示UIImageView的ViewController的代码:

class EventPageViewController: UIViewController {
    @IBOutlet weak var eventPic: UIImageView!
    var toPass: UIImage!

    override func viewDidLoad() {
        super.viewDidLoad()

        eventPic.image = toPass
        print(eventPic)
    }

这里是eventPageViewController出现的地方:

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {

        let eventPageViewController:EventPageViewController = storyboard?.instantiateViewController(withIdentifier: "EventPage") as! EventPageViewController

        self.present(eventPageViewController, animated: true, completion: nil)
    }

2 个答案:

答案 0 :(得分:0)

来自Apple有关图片属性的文档:

  

此属性设置为您在初始化时指定的图像。如果您没有使用init(image :)或init(image:highlightedImage :)方法初始化图像视图,则此属性的初始值为nil。

https://developer.apple.com/reference/uikit/uiimageview/1621069-image

答案 1 :(得分:0)

OP并没有使用segues,但我被问到这是否可以解决问题。这是我使用segue工作的描述和代码。

基线:

我的应用程序有两个视图控制器(选择和编辑),它们之间有一个segue(ShowEditView)。这是我在IB中定义的全部。其他一切都在代码中。

有一个区别似乎没有问题 - 我使用UIImagePickerController来获取OP从资产中提取它的图像。 这似乎没有问题,因为源VC有图像。所以从这里拾取它(两个带有IB中定义的segue,UIImage实例中的图像的VC) #39;我可以根据OP的代码编写代码。

在源VC中:

func imageAttained() {

    // here's where you move the image into image1

    // this is the segue - make sure you've named it in IB
    self.performSegue(withIdentifier: "ShowEventView", sender: self)
}

// this is an override in the source VC and passes the image

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ShowEventView" {
        if let vc = segue.destination as? EventPageViewController {
            vc.toPass = image1
        }
    }
}

在目标VC(EventPageViewController)中:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    eventPic.image = toPass
}