旋转UIView;如何在旋转过程中防止裁剪?

问题描述:

假设我有一个UIView,它的标准配置跨越了容器的全部宽度和高度。为了这个问题的目的,我们假设它的尺寸是320x400。假设这个视图包含的内容可能(通常是)大于其标准尺寸(因此它滚动浏览内容)。旋转UIView;如何在旋转过程中防止裁剪?

现在,如果这个UIView具有与之相关联的UIRotationGestureRecognizer,用于使用其transform属性来旋转视图,我如何确保其帧大小/绘制区域一直是其目前的定位足够大(由“足够大“我的意思是渲染的内容应该始终延伸到原始边界,并且在到达原始边界的边缘之前不会被剪切)?例如,如果我将它旋转90度,视图需要了解它的“宽度”现在可能消耗多达400个像素,而其高度限制为320个像素。

请注意,我不想将视图缩放为旋转操作的一部分。任何由于当前旋转而变得可用的“额外”空间应当用于显示附加内容(如果可用),而不是仅以较高缩放级别显示相同内容。

旋转时,您不希望出现任何空白空间。解决方案是让子视图包含足够大的背景以在旋转期间覆盖整个视口。我会说一个400 400的观点应该做的。这个视图可以是你的contentview的父视图,但是这会给你带来一点定位的麻烦。

更容易的是在你的当前视图中添加一个子视图。把(大)背景放在这个子视图上,确保这个视图位于视图堆栈的底部,并且在你的当前视图中放入clipsToBounds = NO。

请注意,禁用剪切可能会对性能产生影响,尤其是如果视图层次结构变得复杂。