【发布时间】:2015-12-27 13:02:53
【问题描述】:
我在使用自动布局和旋转时遇到问题。 在我的应用程序中,我有一个轮子,上面有几个视图需要旋转以适应圆圈(可以平移、可滚动)。
黑色方块是MenuView 的背景,其中包含一个UILabel、两个UIImageViews 和三个UIButtons。全部由约束固定,在XIB 文件中指定。
一切正常,直到我将视图旋转到 0、90、180、270 以外的其他值...其中MenuView 的所有内容都得到一个 x 偏移量。
我不知道如何摆脱这种偏移。也许它与translatesAutoresizingMaskIntoConstraints 有关,但我无法弄清楚在正确视图上正确使用它。希望有人能帮我解决这个问题。
代码
//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)
视觉
【问题讨论】:
-
我不确定您到底希望发生什么,应该在哪里显示什么?通常,自动布局会完全忽略变换,它们在完全不同的级别上运行。
-
好吧,因为
MenuView中的所有标签和按钮都设置为保持在其范围内,我假设它们在旋转后也保持在其范围内。正如您在图像中看到的那样,30° 和 60° 的情况并非如此 -
否。您正在转换 CoreGraphics
layer,这与 UIKit 或布局无关 - 它根本不关心它。 -
但它是如何做到的。或者这个偏移量应该从哪里来?以及为什么它也应该工作 90°。我没有触摸标签和按钮框架或位置。正如你所看到的那样,包含所有这些的视图框架非常好。
-
只是为了演示(因为我现在必须走了):如果您有两个相同大小的正方形彼此叠放并且旋转顶部的正方形,则其角将始终位于除非您旋转 90、180 或 270 度,否则较低的正方形。
标签: ios swift rotation autolayout transform