设置UIImageView的尺寸?

3
我有个问题:我在UIScrollView中生成包括UIImageView的子视图UIView。
NSArray *bilder = [[NSArray alloc] initWithObjects:@"lol.jpg", @"lol2.jpg", nil];
NSArray *added = [[NSMutableArray alloc] init];
UIImageView *tmpView;

for (NSString *name in bilder) {
    UIImage *image = [UIImage imageNamed:name];
    tmpView = [[UIImageView alloc] initWithImage:image];
    tmpView.contentMode = UIViewContentModeScaleAspectFit;
    tmpView.frame = CGRectMake(0, 0, 300, 300);

    [added addObject:tmpView];

    [tmpView release];
}

CGSize framy = mainFrame.frame.size;

NSUInteger x = 0;

for (UIView *view in added) {
    [mainFrame addSubview:view];
    view.frame = CGRectMake(framy.height * x++, 0, framy.height, framy.width);
}

mainFrame.scrollEnabled = YES;
mainFrame.pagingEnabled = YES;
mainFrame.contentSize = CGSizeMake(framy.height * [added count], framy.width);
mainFrame.backgroundColor = [UIColor blackColor];

我从一个数组中获取图像文件名。现在我想将ImageView调整为特定大小,但它不起作用。有什么建议吗?

谢谢 + 致意

3个回答

4

将tmpView.frame更改为使用新的CGRect:

tmpView.frame = CGRectMake(tmpView.frame.origin.x,
                           tmpView.frame.origin.y,
                           newWidth,
                           newHeight);

好吧,那其实是我之前用过的同样代码,不是吗?还是不起作用 :( - trnc
尝试使用CGRectOffset来简单地向下移动框架。这应该可以保持原始大小不变。另一个可能有帮助的方法是暂时设置所有视图的背景颜色,以确保除UIImageView之外的所有内容都显示在您想要的位置。 - MrHen
1
尝试使用[[UIImageView alloc] initWithFrame:...]并稍后设置图像。这不应该影响视图的框架(http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIImageView_Class/Reference/Reference.html#//apple_ref/occ/instp/UIImageView/image)。 - Christian Schnorr

4

UIImage 没有 setSize: 方法,NSImage 却有此方法,但是这篇文章似乎通过在 UIImage 上使用类别添加了一个 scaleToSize: 方法。


我尝试了一下,图片调整大小可以正常工作,但是图片浏览仍然全屏显示。我该如何将ImageView的大小调整为调整大小后的图像大小? - trnc
你在调用 [[UIImageView alloc] initWithImage:image] 之前是否对图像进行了调整大小?根据我阅读的 initWithImage: 文档,它应该会使 UIImageView 的尺寸与图像大小相匹配。 - Isaac
是的,实际上我创建了UIImage *image = [UIImage imageNamed:name];,然后UIImage *smallImage = [image scaleToSize:CGSizeMake(100,100)];,最后我使用tmpView = [[UIImageView alloc] initWithImage:smallImage];来分配UIImageView。但是UIImageView仍然保持全屏状态,通过设置背景颜色进行了检查! - trnc
有三件事情可能会导致这个问题(虽然它们似乎不太可能):1. 你正在制作100x100的图像,但是图像视图是300x300;2. tmpView.contentMode = UIViewContentModeScaleAspectFit; (我认为在使用 UIImage scaleToSize: 时不需要);3. 当 UIImageView 作为子框架添加时,mainFrame 可能会对错误大小负责。由于我自己不做任何 UIKit/iPhone 的东西(只是 AppKit/MacOSX),所以除此之外我基本上没有更多的想法了。 - Isaac
哦,实际上,还有一个想法可以尝试隔离问题,如果其他方法都不行的话:在initWithImage:之后,tmpView.frame = ...之后,[mainFrame addSubview:view];之前和之后以及view.frame = ...之后立即记录UIImageView的框架,并查看是否能够得出任何关于视图最终全屏显示的线索。 - Isaac

0

我看到的是:

view.frame = CGRectMake(framy.height * x++, 0, framy.height, framy.width);

但是如果你看一下CGRectMake...

Declaration: CGRect CGRectMake (
   CGFloat x,
   CGFloat y,
   CGFloat width,
   CGFloat height
);

你正在设置 X 值,而不是 Y 值。根据你后面的调用,我的预期是:

mainFrame.contentSize = CGSizeMake(framy.height * [added count], framy.width);

你的意图是让这些图片重叠显示,而不是并排显示。

建议:

view.frame = CGRectMake(framy.height * x++, 0, framy.height, framy.width);

view.frame = CGRectMake(0,framy.height * x++, framy.height, framy.width);

它是横屏模式,它们并排显示,但全屏显示。但我不想要全屏,我想要300x300! - trnc
然后它引导我到: mainFrame.contentSize = CGSizeMake(framy.height * [added count], framy.width);难道你不想要这样吗: mainFrame.contentSize = CGSizeMake(framy.height, framy.widtht * [added count]; - gnasher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接