ios - 使用自动布局和 CGAffineTransform

标签 ios swift rotation autolayout transform

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

深色方 block 是 MenuView 的背景,它包含一个 UILabel、两个 UIImageViews 和三个 UIButtons .所有这些都受到限制,在 XIB 文件中指定。

一切正常,直到我将 View 旋转到 0、90、180、270 以外的其他位置,... MenuView 的所有内容都获得了一个 x 偏移量。

我不知道如何摆脱这种偏移。也许它与 translatesAutoresizingMaskIntoConstraints 有关,但我无法在正确的 View 上正确使用它。希望有人能帮我解决这个问题。

代码

//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)

视觉

WheelView in 0, 30, 60, 90 degrees rotation

最佳答案

好吧,我有点修好了。

我在 UIViewControllerviewDidLoad 中设置所有框架、旋转和添加 subview 。 当我在 viewDidAppear 中旋转时,一切正常。有点奇怪的是,在代码中依次设置帧和旋转会相互影响。在等待 View 完全设置(通过 viewDidAppear 完成)期间修复了这些问题。

关于ios - 使用自动布局和 CGAffineTransform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480646/

相关文章:

ios - swift 2 : Type of expression is ambiguous without more context NSDictionary

ios - 基于平移手势翻译的滚动scrollview

ios - UIImage 类型的值必须为 bindTo

ios - 使用 populateCellWithBlock FirebaseUI 时出错

swift - 暂停和恢复 SKScene

iphone - 如何制作从 UIImagePickerController 返回的 UIImage 的精确副本?

swift - UICollectionView - 在设备旋转时调整单元格大小 - Swift

java - 使用 Display.getRotation() 进行屏幕旋转

ios - 手动验证 TLS 证书(ios Objective-c)

Swift - UInt 行为