gpt4 book ai didi

ios - 在不支持旋转的iOS应用程序中旋转UIImageView

转载 作者:行者123 更新时间:2023-11-29 04:20:14 25 4
gpt4 key购买 nike

我有一个应用程序,它被硬编码为仅支持 1 个方向(纵向)。肖像是通过项目设置设置的。

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

在此 View Controller 中,有多个 View 、按钮、标签和其他标准 iOS 控件。对于此 View Controller 中的所有控件,所需的行为是当用户旋转 iOS 设备时,应用程序中的任何内容都不会旋转。

但是,在上述所有 View 之下,充当“背景”的是嵌入 UIScrollView 中的 UIImageView。这是最底部的 View 。用户可以随时通过启动照片选择器的按钮来更改背景。 UIImageView 嵌入到 UIScrollView 中,因为所需的行为是允许捏合缩放背景图像。

虽然应用程序不支持旋转,但我希望 ImageView 的内容在加载时始终能够正确定向。

例如 - 请记住,唯一支持的方向是 UIInterfaceOrientationPortrait,用户启动应用程序,将 iOS 设备旋转到景观位置。在纵向中,用户选择新的背景图像。预期的行为是根据当前方向选择定向且宽高比正确的图像。

本质上,我正在寻找在被选择时始终对地球具有“重力”的背景图像。如果用户选择新图像后旋转 iOS 设备,则背景图像不会旋转。只有在最初选择图像时,它才会正确定位。

我可以使用 CGAffineTransformMakeRotation 旋转图像,但是通过捏合放大会出现不良行为,因为图像本身内的像素并没有真正改变方向。

我想当用户选择图像时我可能需要实际创建一个新图像,类似于......

UIImage * RightLandscapeImage = [[UIImage alloc] initWithCGImage: userSelectedImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];

我没有看到这个问题有任何简单的解决方案。也许我忽略了一些简单的事情?

FOLLOW UP 这是似乎需要的代码。考虑到当前方向和启动方向。

UIImage * newImage;
if( startUpOrientation == UIInterfaceOrientationLandscapeRight )
{
switch (currentOrientation) {
case UIInterfaceOrientationLandscapeLeft:
newImage = [[UIImage alloc] initWithCGImage: bgImage.CGImage
scale: 1.0
orientation: UIImageOrientationDownMirrored];

[self.backgroundImageView setImage:newImage];
break;
case UIInterfaceOrientationLandscapeRight:
[self.backgroundImageView setImage:bgImage];
break;
case UIInterfaceOrientationPortraitUpsideDown:
newImage = [[UIImage alloc] initWithCGImage: bgImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];

[self.backgroundImageView setImage:newImage];

break;
default:
newImage = [[UIImage alloc] initWithCGImage: bgImage.CGImage
scale: 1.0
orientation: UIImageOrientationLeft];
[self.backgroundImageView setImage:newImage];
break;
}
}

最佳答案

您可以将变换应用于您想要在 willRotateToInterfaceOrientation 中旋转的任何 View

你可以试试这段代码:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
switch (toInterfaceOrientation) {
case UIInterfaceOrientationLandscapeLeft:
yourview.transform = CGAffineTransformMakeRotation(M_PI_2); // 90 degress
break;
case UIInterfaceOrientationLandscapeRight:
yourview.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2); // 270 degrees
break;
case UIInterfaceOrientationPortraitUpsideDown:
yourview.transform = CGAffineTransformMakeRotation(M_PI); // 180 degrees
break;
default:
yourview.transform = CGAffineTransformMakeRotation(0.0);
break;
}
}

关于ios - 在不支持旋转的iOS应用程序中旋转UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com