正确填充大于屏幕的图像

时间:2010-12-23 15:19:57

标签: iphone

我想在这里实现的只是在两个方向上将图像宽度适合屏幕,并使用UIScrollView只允许垂直滚动以查看整个图像。

viewController和view都是实用的。

在宽度和高度上加载的图像大于屏幕。

以下是我的viewController中的相关代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;    
}

- (void)loadView {
    UIScreen *screen = [UIScreen mainScreen];
    CGRect rect = [screen applicationFrame];
    self.view = [[UIView alloc] initWithFrame:rect];
    self.view.contentMode = UIViewContentModeScaleAspectFill;
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    UIImage *img=[[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"]];
    UIImageView *imgView =[[UIImageView alloc] initWithImage:img];
    [img release];

    imgView.contentMode = UIViewContentModeScaleAspectFill;
    imgView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    [self.view addSubview:imgView];
    [imgView release];
}

我尝试了上面两个contentMode的所有组合,但没有给我正确的结果。

我现在最接近:我在loadView中手动调整imgView,肖像模式会正确显示,因为应用程序始终以纵向模式启动,但在横向模式下,宽度适合正确,但图像垂直居中而不是顶部对齐

如果我将imgView添加到scrollView,则在横向模式下,它看起来像contentSize未设置为完整图像大小。但是当我滚动弹跳时,我可以看到图像是全尺寸的。

问题:

  1. 为什么我需要手动调整大小?

  2. 在横向模式中我如何以及在哪里“移动”imgView,所以imgView.frame.origin是(0,0)并且可以正常使用滚动视图?

  3. 更新

    我补充说:

    imgView.clipsToBounds = YES;
    

    并以横向模式查找图像边界小于屏幕高度。

    所以问题变成了如何让图像视图在旋转到横向时保持原始比例(因此始终显示完整图像)?我需要在再次旋转后手动调整大小吗?

3 个答案:

答案 0 :(得分:0)

这里的代码中没有使用任何scrollView。

您需要将该imageView添加到ScrollView。并将scrollView框架设置为与主视图相同,并将contentSize设置为imageView或图像尺寸。

答案 1 :(得分:0)

而不是手动处理方向更改并更改视图详细信息。我打算关注Apple文档,为每个方向制作单独的视图控制器。

参见P42 @ ViewControllerProgrammingGuide:

  

创建备用横向界面

答案 2 :(得分:0)

如果你在应用程序中使用滚动视图,那么你也调整了滚动视图和子视图的大小,你的代码也很好,只是尝试调整子视图的大小。

我使用以下代码来执行此操作。

self.homescroll.autoresizingMask=UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;// | UIViewAutoresizingFlexibleRightMargin |UIViewAutoresizingFlexibleLeftMargin;
    self.homescroll.autoresizesSubviews=YES;
    [self.homescroll setNeedsLayout];
    [self.view addSubview:homescroll];

也可以调整子视图的大小。