V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
Cwind
V2EX  ›  iDev

SplitView模式下ScrollView图片显示问题

  •  
  •   Cwind · 2012-07-15 23:47:08 +08:00 · 3366 次点击
    这是一个创建于 4517 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近刚开始跟着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不够?
    5 条回复    1970-01-01 08:00:00 +08:00
    ultragtx
        1
    ultragtx  
       2012-07-15 23:59:09 +08:00
    maximumzoomscale 是不也要设置一下
    Cwind
        2
    Cwind  
    OP
       2012-07-16 00:06:38 +08:00
    @ultragtx 这个我在Storyboard里直接设成100了,后面也没改过,应该没没关系吧
    Cwind
        3
    Cwind  
    OP
       2012-07-16 20:38:22 +08:00
    继续昨天的问题,更改zoomScale会影响imageView.frame对吧,问题是如果图片够大,这里的zoomScale小于1,那么之后执行self.scrollView.zoomScale = 1这句,imageView.frame又会放大回来,而如果zoomScale大于1比如1.5,那么之后再执行self.scrollView.zoomScale = 1对imageView.frame却没有影响,于是imageView.frame.size与imageView.bounds.size之间一直存在1.5的比例关系,导致图片显示缩水,这是为什么呢?
    现在我只能用一个很笨的办法,把self.imageView.image = image这句替换成
    [self.imageView removeFromSuperview];
    UIImageView *view = [[UIImageView alloc] initWithImage:image];
    self.imageView = view;
    [self.scrollView addSubview:self.imageView];
    这样虽然把问题解决了,但是很蛋疼啊
    zhigang1992
        4
    zhigang1992  
       2012-07-16 21:07:46 +08:00   ❤️ 1
    记得OffSet, 则个的确特别蛋疼。我也搞了好久,可以看看10年WWDC里面的例子,那个Photo的。。。
    Cwind
        5
    Cwind  
    OP
       2012-07-16 21:33:46 +08:00
    @zhigang1992 好的,我去看看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1163 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:50 · PVG 02:50 · LAX 10:50 · JFK 13:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.