Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用自动布局和CGAffineTransform_Ios_Swift_Rotation_Autolayout_Transform - Fatal编程技术网

Ios 使用自动布局和CGAffineTransform

Ios 使用自动布局和CGAffineTransform,ios,swift,rotation,autolayout,transform,Ios,Swift,Rotation,Autolayout,Transform,我在使用自动布局和旋转时遇到问题。 在我的应用程序中,我得到了一个轮子,上面有几个视图需要旋转以适应圆圈(可以平移、滚动) 暗正方形是菜单视图的背景,其中包含一个ui标签、两个ui图像视图和三个ui按钮。所有约束均由XIB文件中指定的约束固定到位 一切正常,直到我将视图旋转到除0、90、180、270以外的其他位置。。。其中菜单视图的所有内容都得到x偏移量 我不知道如何摆脱这种抵消。也许它与翻译自动调整大小GMaskintoConstraints有关,但我无法在正确的视图中正确使用它。希望有人能

我在使用自动布局和旋转时遇到问题。 在我的应用程序中,我得到了一个轮子,上面有几个视图需要旋转以适应圆圈(可以平移、滚动)

暗正方形是
菜单视图的背景,其中包含一个
ui标签
、两个
ui图像视图
和三个
ui按钮
。所有约束均由
XIB
文件中指定的约束固定到位

一切正常,直到我将视图旋转到除0、90、180、270以外的其他位置。。。其中
菜单视图的所有内容都得到x偏移量

我不知道如何摆脱这种抵消。也许它与
翻译自动调整大小GMaskintoConstraints
有关,但我无法在正确的视图中正确使用它。希望有人能帮我解决这个问题

代码

//Menu View Holder
let menuViewHolder = UIView(frame: self.bounds)
self.addSubview(menuViewHolder)
viewHolders.append(menuViewHolder)

//Menu View
let menuView = self.addView(MenuView.self, fromNib: "MenuView")
menuView.colorSet = UIColorSet.getDefaultSet()
menuView.translatesAutoresizingMaskIntoConstraints = true
menuViewHolder.addSubview(menuView)
views.append(menuView)

//Frame
let screenWidth:CGFloat = 320.0
let width:CGFloat = screenWidth
let height:CGFloat = 300.0
menuView.frame = CGRect(x: (self.bounds.width-width)/2.0, y: 0.0, width: width, height: height)

//Rotation
let angle = CGFloat(menuViewIndex)*CGFloat(viewAngle);
//menuViewHolder.transform = CGAffineTransformMakeRotation(angle + CGFloat(M_PI/2.0))
menuViewHolder.layer.transform = CATransform3DMakeRotation(angle + CGFloat(M_PI/2.0), 0, 0, 1)
视觉


好吧,我把它修好了

我在我的
UIViewController
viewDidLoad
中设置了所有帧、旋转和添加子视图。
当我在
视图中旋转时,一切正常。设置帧和在代码中一个接一个地旋转会相互影响,这有点奇怪。在等待视图完全设置(通过
viewdide
完成)时,修复了这些问题。

我不确定您到底希望发生什么,您应该在哪里显示什么?通常,自动布局会完全忽略这些变换,它们在完全不同的级别上运行。由于
MenuView
中的所有标签和按钮都设置为保持在其边界内,因此我假设它们在旋转后也保持在其边界内。正如您在图中所看到的,30°和60°的情况并非如此。您正在转换CoreGraphics
,这与UIKit或布局几乎没有关系-它根本不关心它。但它是如何做到的。或者,这个补偿应该从哪里来?为什么它也要工作90度呢。我没有触摸标签和按钮框架或位置。正如你所看到的,包含所有这些的视图框架是非常好的。只是为了演示(因为我现在要走了):如果你有两个大小相等的正方形相互重叠,并且你旋转上面的一个,那么它的角总是位于下方正方形的区域之外,除非你旋转90度、180度或270度。