ios - 如何在 iOS 应用程序中处理自动旋转,其中一个 View 不应自动旋转,而一个 View 应该自动旋转?

标签 ios ipad uiview uiviewcontroller

比如说,如果是iPad上的一个简单的绘图程序,当用户在纵向模式下画一条从(0,0)到(730, 1000)的线时,这条线会被完整地显示出来。但是如果用户将iPad旋转90度,如果我们允许自动旋转,那么底部的线就会被切断。

因此包含 Canvas 的 View 不应自动旋转。

另一方面,如果屏幕上有撤销按钮,或者滑出面板,那么这部分实际上应该根据 iPad 的旋转状态自动旋转。

如何最好地实现这一点?因为通常我们对所有内容都自动旋转,或者根本不自动旋转,但这种情况需要一半一半。

最佳答案

我必须同意 lnafziger 的观点,我很难想象用户在旋转设备时会希望他们的绘图不旋转。绘图时,图像的上下和左右方面对于创意绘图过程来说是如此不可或缺,以至于我认为看到 View 上的控件旋转但图像不旋转会很奇怪。最重要的是,我认为即使用户旋转设备,您也确实希望保留图像的上下和左右。但我认为你是绝对正确的,如果用户旋转设备时图像的长宽比发生变化(即,如果你压扁图像),用户会发现它会迷失方向。

现在,您已经提到了一种防止宽高比受到干扰的解决方案,即保持绘图图像为正方形,例如 768x768,并且可能使用额外的空间来布置一些控件/工具。更好的是,您可能想引入由用户可以在其上平移/滚动的页面组成的绘图的概念。这样,您可以将图像设置为用户想要的任何尺寸,并且当用户旋转设备时,图像的“页面”不会改变,只是 iPad 屏幕所代表的该页面上的小视口(viewport)。如果您确信用户想要旋转图像,请为他们提供旋转页面的功能,无论设备方向如何。您可以轻松地将他们想要的所有东西的坐标映射到新空间中。该映射应该非常简单。

但是,如果您决定在旋转设备时不旋转图像(尽管我们坚持认为这似乎不是一个好主意),那么似乎有两种方法(假设您不会考虑最简单的解决方案,仅允许应用程序中的一个方向):

首先,您可以重新映射用户绘制的对象的所有坐标,然后在旋转完成后重新绘制对象。同样,旋转 90 度时重新映射所有 x,y 坐标非常简单。

其次,您可以将绘图放在它自己的图层上,然后执行 CGAffineTransformRotate设备旋转时(例如,如果用户将设备顺时针旋转 90 度或 PI/2 弧度,则您将逆时针旋转图层 PI/2)。让我惊讶的是,当您在变换后绘制新的线条或其他对象时,这可能会令人困惑,因为您可能必须将新坐标映射到变换后的图层,但我怀疑您可以让它工作。请参阅 CGAffineTransformRotate 的文档了解更多信息。如果你用谷歌搜索一下,就会发现有大量的例子。

关于ios - 如何在 iOS 应用程序中处理自动旋转,其中一个 View 不应自动旋转,而一个 View 应该自动旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777053/

相关文章:

ios - 如何强制将 NSDateFormatter 用作 12 小时或 24 小时格式?

iphone - iOS 文本字段验证

iphone - 如何进行抛物线转换?

iOS:如何确定 ScrollView 中对象的 CGPoint

ios - 出现此播放符号时如何启动进程

iphone - NSString 值在 -(id)init 之后更改

iphone - 检测 iAd 何时不出现

ios - 在模拟器中尝试 iPad 快捷方式

iphone - 如何在没有已知框架的情况下初始化 View ?

ios - Xamarin 通知服务扩展问题