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