Ios UIImageView中未显示大UIImage

Ios UIImageView中未显示大UIImage,ios,swift,uiimageview,uiimage,Ios,Swift,Uiimageview,Uiimage,我正在捕获UIWebView的全页屏幕截图,并通过一个segue传递图像: // WebViewController.swift override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "captureSegue" { var captureViewcontroller:CaptureViewController = segue

我正在捕获UIWebView的全页屏幕截图,并通过一个segue传递图像:

// WebViewController.swift
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "captureSegue" {
        var captureViewcontroller:CaptureViewController = segue.destinationViewController as! CaptureViewController
        captureViewcontroller.tempCaptureImage = image
    }
}
UIImage随后被保存到应用程序目录中的
文档/图像中。如果我从文件系统打开它,它在预览中显示得很好。但是,如果屏幕截图非常大,图像将不会显示在UIImageView中。UIImageView呈现为空白。添加断点表明图像数据在那里,而不是渲染

// CaptureViewController.swift
var tempCaptureImage: UIImage?

@IBOutlet weak var imageScrollView: UIScrollView!
@IBOutlet weak var captureImageView: UIImageView!
@IBOutlet weak var titleField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    self.automaticallyAdjustsScrollViewInsets = false
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    if let image = tempCaptureImage {
        captureImageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: image.size)
        captureImageView.image = image
        imageScrollView.contentSize = image.size

        let scrollViewFrame = imageScrollView.bounds
        let scaleWidth = scrollViewFrame.size.width / imageScrollView.contentSize.width
        let scaleHeight = scrollViewFrame.size.height / imageScrollView.contentSize.height
        let minScale = min(scaleWidth, scaleHeight);
        imageScrollView.minimumZoomScale = minScale;

        imageScrollView.maximumZoomScale = 1.0
        imageScrollView.zoomScale = minScale;

    }
}
这可能是因为图像太大了吗?如果我捕获的页面较小,则图像显示效果良好。在iDevices上查看大图像有什么推荐的技术吗

编辑:

下面是带有断点的Variables视图的输出。也许你看到了我遗漏的东西


您没有提供任何有关图像实际大小的信息,因此无法确定您可能达到的极限。但是请记住,与单比例图像相比,三比例图像将基本位图内存大小乘以9。这是一个数量级!我完全可以相信,如果你试图访问一个太大的图像,你会很快超过应用程序的内存容量,甚至崩溃。因此,第一步肯定是将图像加载为单尺度图像;请参阅ImageIO框架以了解如何做到这一点。如果您想知道如何显示非常大的图像,请参阅CATiledLayer上的文档。

您没有提供任何关于图像实际大小的信息,因此无法确定您可能达到的限制。但是请记住,与单比例图像相比,三比例图像将基本位图内存大小乘以9。这是一个数量级!我完全可以相信,如果你试图访问一个太大的图像,你会很快超过应用程序的内存容量,甚至崩溃。因此,第一步肯定是将图像加载为单尺度图像;请参阅ImageIO框架以了解如何做到这一点。如果您想知道如何显示非常大的图像,请参阅CATiledLayer上的文档。

对于有类似问题的人,可能尝试在真实设备中进行测试。对我来说,尺寸为1000 x 7000的图像不会显示在模拟器或界面生成器中,但可以显示在iPhone 6s plus中


此外,如果图像大小大于10000 x 10000,Interface Builder会抱怨。

对于有类似问题的人,可能会尝试在真实设备中进行测试。对我来说,尺寸为1000 x 7000的图像不会显示在模拟器或界面生成器中,但可以显示在iPhone 6s plus中


此外,如果图像大小大于10000 x 10000,Interface Builder会投诉。

您是否尝试过
captureImageView.contentMode=.ScaleSpectFill
?@DharmeshKheni感谢您的建议!这似乎没有改变什么。奇怪的是,scrollView获得了适当的图像高度,但UIImage子视图只有在图像较小时才会显示。您是否尝试过
captureImageView.contentMode=.ScaleSpectFill
?@DharmeshKheni感谢您的建议!这似乎没有改变什么。奇怪的是,scrollView获得了适当的图像高度,但是UIImage子视图只有在图像很小的情况下才会显示。我将
ViewDidDisplay
覆盖更改为下面的代码,它成功了!很高兴看到你在这方面有所进展;这当然是正确的,您不应该使用比实际显示所需的更大的图像比例或大小。不过,我仍然认为使用ImageIO会更好,因为过大的位图在任何时候都不会保存在内存中,而代码会将高比例图像作为图像加载到内存中,并可能在设备上崩溃。啊,我明白了。这是有道理的。我将更新为使用ImageIO,因为即使它在模拟器中工作,它确实仍会在设备上崩溃。ImageIO与Core Image相同吗?不,它与ImageIO相同。:“”“”“”)我将
viewdide
覆盖更改为下面的代码,它成功了!很高兴看到你在这方面有所进展;这当然是正确的,您不应该使用比实际显示所需的更大的图像比例或大小。不过,我仍然认为使用ImageIO会更好,因为过大的位图在任何时候都不会保存在内存中,而代码会将高比例图像作为图像加载到内存中,并可能在设备上崩溃。啊,我明白了。这是有道理的。我将更新为使用ImageIO,因为即使它在模拟器中工作,它确实仍会在设备上崩溃。ImageIO与Core Image相同吗?不,它与ImageIO相同。:“”“”“”)