在 iPhone 旋转时缩放图像以适应屏幕
我有一个包含 UIImageView 的 UIScrollView,当 iPhone 旋转时,我很难获得正确的行为。
目标:从纵向转到横向时,我试图获得以下结果:
_________
|AAAAAAA|
|BBBBBBB| _________________
|CCCCCCC| | AAAAAA |
|DDDDDDD| --> | CCCCCC |
|EEEEEEE| | EEEEEE |
|FFFFFFF| |_____GGGGGG_____|
|GGGGGGG|
---------
这里,当 iPhone 旋转时,纵向视图中的整个图像会缩放以适合横向视图。也是居中的。我还试图保持纵横比。用户交互也已开启,用户应该能够使用整个屏幕来平移/缩放图像。
目前我在滚动视图上有以下autoresizingMask
:
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
但这给出了以下内容
_________
|AAAAAAA|
|BBBBBBB| _________________
|CCCCCCC| |AAAAAA |
|DDDDDDD| --> [BBBBBB |
|EEEEEEE| [CCCCCC |
|FFFFFFF| [DDDDDD__________|
|GGGGGGG|
---------
此设置保留了左上角的比例和偏移量。
问题: 是否可以使用合适的 autoresizingMask 来获得此行为?如果没有,您可能应该
scrollView.autoresizingMask = UIViewAutoresizingNone;
在旋转时为 UIScrollView 设置并手动设置 zoomScale
和 contentOffset
。但是,应该在哪里做呢?那么如何动画化这个变化呢?
解决方案: 通过稍微修改下面的答案,我得到了上述行为 下面的代码:
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth
| UIViewAutoresizingFlexibleHeight);
imageView.contentMode = UIViewContentModeScaleAspectFit;
scrollView.contentMode = UIViewContentModeCenter;
I have a UIScrollView containing an UIImageView and I have some trouble to get the correct behavior when the iPhone rotates.
Goal: I am trying to obtain the following when going from portrait to landscape:
_________
|AAAAAAA|
|BBBBBBB| _________________
|CCCCCCC| | AAAAAA |
|DDDDDDD| --> | CCCCCC |
|EEEEEEE| | EEEEEE |
|FFFFFFF| |_____GGGGGG_____|
|GGGGGGG|
---------
Here the entire image in the portrait view is scaled to fit in the landscape view when the iPhone rotates. It is also centered. I am also trying to preserve the aspect ratio. User interaction is also on, and the user should be able to use the entire screen to pan/zoom the image.
Currently I have the following autoresizingMask
on the scrollView:
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
But this gives the following
_________
|AAAAAAA|
|BBBBBBB| _________________
|CCCCCCC| |AAAAAA |
|DDDDDDD| --> [BBBBBB |
|EEEEEEE| [CCCCCC |
|FFFFFFF| [DDDDDD__________|
|GGGGGGG|
---------
This setting preserves scale and offset from upper left corner.
Question:
Is it possible to obtain this behaviour using suitable autoresizingMask
? If not, one should probably set
scrollView.autoresizingMask = UIViewAutoresizingNone;
and manually set zoomScale
and contentOffset
for the UIScrollView on rotation. But, where should that be done? What about animating that change?
Solution:
By very slightly modifying the answer below I got the above behaviour using
the below code:
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth
| UIViewAutoresizingFlexibleHeight);
imageView.contentMode = UIViewContentModeScaleAspectFit;
scrollView.contentMode = UIViewContentModeCenter;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试试这个:
我不确定 imageView 是否会在 UIScrollView 中自动调整大小,因此如果自动调整大小不起作用,您可以尝试自己将旋转框架设置为等于滚动视图的大小。
Try this:
I'm not sure if the imageView will get automatically resized within a UIScrollView, so if the autoresizing doesn't work, you could try setting the frame yourself on rotate to equal the size of the scrollview.
我也遇到过类似的情况,一个非常简单的滚动视图,带有 3 个 imageView(“上一张”、“当前”和“下一张”)来显示一系列照片。
这些照片的尺寸均适合 iPad,但混合了横向和纵向方向。我希望它们适合屏幕(即必要时加黑框),并保留纵横比。我发现我只需要对 3 个 imageView 执行此操作即可使其工作:
I had a similar situation, a very simple scrollView with 3 imageViews ('previous', 'current', and 'next') to display a series of photos.
The photos were all sized for the iPad, but a mix of landscape and portrait orientations. I wanted them to fit into the screen, (i.e. letterboxed if necessary), with aspect ratio retained. I found I only needed to do this to the 3 imageViews for it to work: