Swift预加载视图控制器在显示之前?

时间:2014-12-10 03:22:22

标签: ios objective-c swift uiscrollview

我有viewController将一堆图片加载到scrollView。首次输入时需要花费一些时间才能加载,因此会降低UI的速度。我正在努力寻找最好的解决方法。也许我一次只能加载一定数量的图像,但我想我可以在它在前一个视图控制器中显示之前加载它。

以下是viewController中需要很长时间才能加载的功能:

    func loadImages() {
    var documentPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
    var files: NSArray = NSFileManager.defaultManager().contentsOfDirectoryAtPath(documentPath, error: nil)!

    var currentX: CGFloat = 0.0

    for image in files {
        var im : NSString = image as NSString
        var imagePath = documentPath.stringByAppendingPathComponent(im)
        var image = UIImage(contentsOfFile: imagePath)
        var imageView = UIImageView(image: image)

        var rect = imageView.frame
        rect.origin.x = currentX
        imageView.frame = rect
        //            imageView.contentMode = .ScaleAspectFill
        imageView.frame.size.width = UIScreen.mainScreen().bounds.width
        imageView.frame.size.height = UIScreen.mainScreen().bounds.height

        currentX += imageView.frame.size.width

        self.scrollView.addSubview(imageView)
    }

//        currentX += UIScreen.mainScreen().bounds.width

    self.scrollView.contentSize = CGSizeMake(currentX, self.scrollView.frame.size.height)
    self.scrollView.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleRightMargin
}

在我之前的视图控制器中,我尝试过:

var imageView = ImagesViewController().view

但似乎没有这样做。我得到:fatal error: unexpectedly found nil while unwrapping an Optional value

有什么办法吗?或者你会推荐另一种解决方案?

感谢。

2 个答案:

答案 0 :(得分:1)

我认为你的问题不在UI中。你在哪里调用loadImage方法? (最好不要在主队列中加载图像)为了更快速地处理图像,你可以解压缩它们。

UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0);
[image drawInRect:CGRectMake(0, 0, 1, 1)];
UIGraphicsEndImageContext();

答案 1 :(得分:0)

在init()或您正在使用的任何自定义初始化程序中调用loadImages()。