【发布时间】:2018-06-15 04:21:45
【问题描述】:
我有一个名为sampleImage 的图像,我正试图将它沿x 和y axis 拉伸,如下所示,当它位于landscape 时它根本不起作用
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
{
if (UIDevice.current.orientation == UIDeviceOrientation.portrait)
{
sampleImage.frame = CGRect(x: 0, y: 0, width: 220, height: 120)
}
else
{
sampleImage.frame = CGRect(x: 0.2, y: 0.2, width: 220, height: 120)
}
}
然后,我在viewDidLayoutSubviews()做了如下,
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if (UIDevice.current.orientation == UIDeviceOrientation.portrait)
{
sampleImage.frame = CGRect(x: 0, y: 0, width: 220, height: 120)
}
else
{
sampleImage.frame = CGRect(x: 0.2, y: 0.2, width: 220, height: 120)
}
}
如果设备位于landscape 中,则此方法有效,但是一旦将其旋转到portrait 并返回,所有更改都将消失。如何确保这些尺寸在旋转时保持不变?
【问题讨论】:
-
需要注意的一点是,在 viewWillTransition 方法中,当您获得当前方向时,您将获得设备旋转之前的方向。
-
那么如何检测方向变化呢?
-
您没有检测到方向变化。 UIViewController 会收到大小更改和大小类更改的通知。请记住,旋转设备并不是 UIViewController 唯一可以改变大小的时候。你应该尽量避免考虑方向。话虽如此,您可以检查新尺寸的宽度与高度。在横向类型方向中,宽度较大,但在纵向类型方向中,高度较大。
-
感谢您的解释,这比在 x 和 y 轴上拉伸要好
标签: ios swift xcode uiimageview uiimage