iOS/Swift:保持 "global" 视图平移重置其他对象的位置,启用 AutoLayout?

iOS/Swift: Keep "global" view pan from resetting other objects' positions, w/ AutoLayout ON?

刚开始学习Swift,关注优秀UIGestureRecognizer tutorial on Ray Wenderlich's site。它有两个图像,您可以四处移动(平移)和缩放(捏合)和旋转。工作正常。

但后来我尝试通过在主视图中添加一个平移手势识别器来扩展它,这样我就可以一次平移所有 "scene"。以与两个图像相同的方式将其连接到 ViewController。哪个有效,但每次在主视图中平移时,它 重置 其他对象的位置,即它们移回 运行 开始时的位置,忘记了您可能将它们移动到的位置。

这是一个 AutoLayout 问题(如线程 UILabel causing other objects to reset position on iOS 中所述)。 (虽然我觉得这很奇怪,因为根本没有任何限制。随便吧。)

关闭 AutoLayout 确实可以防止任何重置发生,但是...... 出于其他原因,最终我想使用 AutoLayout 构建一个应用程序,所以我想在启用 AutoLayout 的情况下进行。

因此,根据 UIView frames reset when using autolayout,向 viewDidLoad() 添加了一些代码, 即在 Storyboard 中,我从 "Main View" 对象控制拖动到 ViewController.swift 的助理编辑器中,一行内容为

@IBOutlet var mainView: UIView!

然后在我的 viewDidLoad 中,我添加了

mainView.translatesAutoresizingMaskIntoConstraints = true

但这没有任何效果,即重置行为仍然存在。 :-( 不会生成关于 "Unable to simultaneously satisfy constraints" 的警告。

有什么帮助吗?谢谢。 运行 XCode 7 测试版 5.

已解决!啊。所以是其他对象,而不是主视图,需要这段代码!即代码现在读取...

@IBOutlet var mainView: UIView!
@IBOutlet weak var monkeyView: UIImageView!
@IBOutlet weak var bananaView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    //self.mainView.translatesAutoresizingMaskIntoConstraints = true // not needed
    self.monkeyView.translatesAutoresizingMaskIntoConstraints = true
    self.bananaView.translatesAutoresizingMaskIntoConstraints = true
}

进行这些更改后,不会发生不必要的重置,而且 AutoLayout 已启用! :-)