2010-12-23 50 views
0

我想在这里实现的只是在两个方向上将图像宽度适合屏幕,并使用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所有组合,没有给我正确的结果。

我现在得到的最接近:我手动调整imgView在loadView中的大小,纵向模式会正确显示,因为应用总是以纵向模式开始,但在横向模式下,宽度适合正确,但图像垂直居中而不是顶部对齐。

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

问题:

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

  2. 在景观模式中我和'我'可以'移动'imgView,所以imgView.frame.origin是(0,0)和正常工作与滚动视图?

谢谢!

更新: 我加了: imgView.clipsToBounds = YES;

在横向模式下找出图像边界比屏幕高度小。

所以问题变成如何让图像视图保持原始比率(从而显示完整图像总是)时旋转到风景?我是否需要在轮换后再手动调整它的大小?

回答

0

在代码中,您没有使用任何scrollView。

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

问候,

萨蒂亚

+0

我做到了这一点,仍然存在问题。上面的代码没有滚动,并且图像在横向上无法正确显示。 – madcat 2010-12-24 00:12:34

0

不用手动照顾方向的改变而改变看法的细节。我打算遵循Apple文档并为每个方向制作单独的视图控制器。

见P42 @ ViewControllerProgrammingGuide:

创建备用景观接口

0

好兄弟,如果你正在使用的应用程序滚动视图,那么你也调整滚动视图和子视图那么,你的代码如果可以的话就试着调整子视图的大小。 我使用这段代码来做到这一点,为此花了4个小时。

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

只是调整子视图以及.......... 希望这将帮助你。如果这样的话,不要忘记接受和投票了。

+1

稍后会尝试您的方法...谢谢! – madcat 2010-12-28 03:09:57