比如说,如果是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/