我想在这里实现的只是在两个方向上将图像宽度适合屏幕,并使用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未设置为完整图像大小。但是当我滚动弹跳时,我可以看到图像是全尺寸的。
问题:
为什么我需要手动调整大小?
在横向模式中我如何以及在哪里“移动”imgView,所以imgView.frame.origin是(0,0)并且可以正常使用滚动视图?
我补充说:
imgView.clipsToBounds = YES;
并以横向模式查找图像边界小于屏幕高度。
所以问题变成了如何让图像视图在旋转到横向时保持原始比例(因此始终显示完整图像)?我需要在再次旋转后手动调整大小吗?
答案 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];
也可以调整子视图的大小。