图像加载时滚动卡住

时间:2015-03-22 23:53:34

标签: ios swift uiimageview scrollview

我的图片对于屏幕而言太大了,所以我已经让它能够向下滚动图像以查看全部,但是当我加载图像时,我无法向下滚动它。这听起来很奇怪,但我希望有人理解我的意思,并且可以告诉我我做错了什么。

这是我的代码:

class DetailViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var myDetailedImageView: UIImageView!

var myDetailedImageName: String?
var nameString: String?

override func viewDidLoad() {
    super.viewDidLoad()

    func minscale () {

    }
    //For setting max and min zoom
     scrollView.maximumZoomScale = 0.8
    scrollView.minimumZoomScale = 0.15

    scrollView.delegate = self

    //reset zoomzcale for new image
    self.scrollView.zoomScale = 0.15

    self.myDetailedImageView.image = UIImage(named: myDetailedImageName!)
}

@IBAction func actionButton(sender: AnyObject) {
    let firstActivityItem = NSString(string: myDetailedImageName!)

    let activityViewController = UIActivityViewController(activityItems: [firstActivityItem, self.myDetailedImageView.image!], applicationActivities: nil)
self.presentViewController(activityViewController, animated: true, completion: nil)
}

//Showing what to zoom/scroll

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {

    //returning image to reload it self

    return myDetailedImageView
}

2 个答案:

答案 0 :(得分:1)

问题是你在主线程上做了这两件事。这意味着您的代码说“当我完成加载此图像时,然后我可以继续向下滚动”。

这就是之前,您可能已经听说过这一点,多线程发挥作用。我建议你做一些自学并利用Apple的文档here。如果您在此之后仍然不明白,那么您可以从StackOverflow上学到很多其他示例。

哦,不要像使用上一个答案一样从StackOverflow复制/粘贴你的答案。你将不会学到任何东西,也不会因此而变得更好。 :)

答案 1 :(得分:0)

问题是图像是同步加载的,因为它是一个大图像,所以图像需要时间来完全加载和解码。在那个时候,正在使用主线程,并且没有传递滚动事件。

您可以加载your image asynchronously this way

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
    let img = UIImage(named: myDetailedImageName!)
    // Make a trivial (1x1) graphics context, and draw the image into it
    UIGraphicsBeginImageContext(CGSizeMake(1,1))
    let context = UIGraphicsGetCurrentContext()
    CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), img.CGImage)
    UIGraphicsEndImageContext()

    // Now the image will have been loaded and decoded and is ready to rock for the main thread
      dispatch_sync(dispatch_get_main_queue()) {
        self.myDetailedImageView.image = img
    });
});