gpt4 book ai didi

ios - CGAffineTransform Make Translation 在 iOS 6 上导致 View 旋转

转载 作者:行者123 更新时间:2023-11-28 20:26:39 25 4
gpt4 key购买 nike

我创建了一个空项目,它只允许横向使用 Storyboard,其中仅包含一个 UIViewController 作为 rootViewController,中间有一个按钮。

landscape orientation only

- (IBAction)onClick:(UIButton *)sender {
sender.superview.transform = CGAffineTransformMakeTranslation(-320, 0);
}

预期的是,当单击该按钮时, View 向左移动了 320,但不幸的是, View 逆时针旋转并同时向左移动。应用程序似乎以某种方式认为它被设置为纵向 View ,并且考虑到这一点来转换 View ,这就是发生的事情:

rotating instead moving left

我确定我在这里遗漏了一些东西,但我不知道它是什么。

我尝试在 viewController 上定义方法,例如 - (BOOL)shouldAutorotate- (NSUInteger)supportedInterfaceOrientations 但它并没有改变这种行为。

如有任何帮助,我们将不胜感激。

提前致谢

最佳答案

您的应用程序有一个 UIWindow,其中包含您的 Root View Controller 的 View ,其中包含按钮:

  • 用户界面窗口
    • 你的 Root View
      • UIButton

您不明白的是,UIWindow 通过对您的根应用旋转变换来旋转用户界面。查看界面处于横向左方向时的 View 层次结构:

(lldb) po [[UIApp keyWindow] recursiveDescription]
(id) $1 = 0x0922ee80 <UIWindow: 0x942c280; frame = (0 0; 768 1024); layer = <UIWindowLayer: 0x942c380>>
| <UIView: 0x9432b30; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x9432be0>>
| | <UIRoundedRectButton: 0x942f7a0; frame = (476 352; 73 44); opaque = NO; layer = <CALayer: 0x942f8c0>>
| | | <UIGroupTableViewCellBackground: 0x94300b0; frame = (0 0; 73 44); userInteractionEnabled = NO; layer = <CALayer: 0x9430180>>
| | | <UIImageView: 0x9430af0; frame = (1 1; 71 43); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9431340>>
| | | <UIButtonLabel: 0x94319c0; frame = (12 12; 49 19); text = 'Button'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9431d10>>

查看 UIWindow 的 subview (UIView: 0x942c380) 如何转换为 [0, -1, 1, 0, 0, 0] ?该转换将顶层 View 逆时针旋转 90˚。如果您将设备(或模拟器)旋转到横向右方向,您将看到变换变为 [0, 1, -1, 0, 0, 0]:

(lldb) po [[UIApp keyWindow] recursiveDescription]
(id) $2 = 0x07436d90 <UIWindow: 0x942c280; frame = (0 0; 768 1024); layer = <UIWindowLayer: 0x942c380>>
| <UIView: 0x9432b30; frame = (0 0; 748 1024); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x9432be0>>
| | <UIRoundedRectButton: 0x942f7a0; frame = (476 352; 73 44); opaque = NO; layer = <CALayer: 0x942f8c0>>
| | | <UIGroupTableViewCellBackground: 0x94300b0; frame = (0 0; 73 44); userInteractionEnabled = NO; layer = <CALayer: 0x9430180>>
| | | <UIImageView: 0x9430af0; frame = (1 1; 71 43); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9431340>>
| | | <UIButtonLabel: 0x94319c0; frame = (12 12; 49 19); text = 'Button'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9431d10>>

当您重置 View 的变换时,您将失去旋转,因此 View 恢复到其“默认”旋转 0˚,即纵向旋转。

Adam Lockhart 的回答将暂时解决这个问题,但如果用户旋转设备,UIWindow 将重置您的 View 转换,丢失您应用的转换。

处理此问题的正确方法是将您自己的转换应用到您的顶级 View 。给你的顶级 View 一个你可以转换的 subview ,然后把你的按钮放在里面:

  • 用户界面窗口
    • 你的 Root View
      • 你的可变形 View
        • UIButton

关于ios - CGAffineTransform Make Translation 在 iOS 6 上导致 View 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13687310/

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