最近刚开始跟着cs193学iOS开发,今天在做Assignment 4的时候碰到了一个问题。这个作业的目标大致就是从Flickr上获取Top Place信息到TableView上,然后点击cell显示对应的图片。为了防止图片缩小过头弄的很难看,所以我想对minimumZoomScale和图片初始显示状态做下设置,以下是部分相关代码:
- (void)setPhoto:(NSDictionary *)photo
{
_photo = photo;
[self refresh];
}
- (void) refresh
{
dispatch_queue_t downloadQueue = dispatch_queue_create("download",NULL);
dispatch_async(downloadQueue, ^{
NSURL *url = [FlickrFetcher urlForPhoto:self.photo format:FlickrPhotoFormatLarge];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
dispatch_async(dispatch_get_main_queue(), ^{
self.scrollView.zoomScale = 1;
self.imageView.image = image;
self.scrollView.contentSize = self.imageView.image.size;
self.imageView.frame = CGRectMake(0,0,self.imageView.image.size.width,self.imageView.image.size.height);
[self zoomSet];
});
});
dispatch_release(downloadQueue);
}
-(void) zoomSet
{
CGRect bounds = self.scrollView.bounds;
self.scrollView.minimumZoomScale = MAX(bounds.size.width/self.imageView.image.size.width, bounds.size.height/self.imageView.image.size.height);
self.scrollView.zoomScale = self.scrollView.minimumZoomScale;
}
现在的问题是当minimumZoomScale小于1的时候没有问题,而大于1的时候只有显示第一张图片的时候正常,之后的图片初始位置和缩放状态都不对。
是不是光设置self.scrollView.zoomScale = 1不够?
- (void)setPhoto:(NSDictionary *)photo
{
_photo = photo;
[self refresh];
}
- (void) refresh
{
dispatch_queue_t downloadQueue = dispatch_queue_create("download",NULL);
dispatch_async(downloadQueue, ^{
NSURL *url = [FlickrFetcher urlForPhoto:self.photo format:FlickrPhotoFormatLarge];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
dispatch_async(dispatch_get_main_queue(), ^{
self.scrollView.zoomScale = 1;
self.imageView.image = image;
self.scrollView.contentSize = self.imageView.image.size;
self.imageView.frame = CGRectMake(0,0,self.imageView.image.size.width,self.imageView.image.size.height);
[self zoomSet];
});
});
dispatch_release(downloadQueue);
}
-(void) zoomSet
{
CGRect bounds = self.scrollView.bounds;
self.scrollView.minimumZoomScale = MAX(bounds.size.width/self.imageView.image.size.width, bounds.size.height/self.imageView.image.size.height);
self.scrollView.zoomScale = self.scrollView.minimumZoomScale;
}
现在的问题是当minimumZoomScale小于1的时候没有问题,而大于1的时候只有显示第一张图片的时候正常,之后的图片初始位置和缩放状态都不对。
是不是光设置self.scrollView.zoomScale = 1不够?