iOS/Swift:保持“全局”视图平移不重置其他对象的位置,开启自动布局?
Posted
技术标签:
【中文标题】iOS/Swift:保持“全局”视图平移不重置其他对象的位置,开启自动布局?【英文标题】:iOS/Swift: Keep "global" view pan from resetting other objects' positions, w/ AutoLayout ON? 【发布时间】:2015-08-16 21:40:07 【问题描述】:刚开始学习 Swift,跟随优秀的UIGestureRecognizer tutorial on Ray Wenderlich's site。它有两个图像,您可以四处移动(平移)和缩放(捏合)和旋转。工作正常。
但后来我尝试通过在主视图中添加一个平移手势识别器来扩展它,这样我就可以一次平移“场景”。以与两个图像相同的方式将其连接到 ViewController。哪个有效,但每次您在主视图中平移时,它重置其他对象的位置,即它们移回运行开始时的位置,忘记您可能移动的位置他们去。
这是一个 AutoLayout 问题(如线程 UILabel causing other objects to reset position on ios 中所述)。 (虽然我觉得这很奇怪,因为根本没有限制。无论如何。)
关闭自动布局确实可以防止任何重置发生,但是...... 最终出于其他原因我想使用 AutoLayout 构建应用程序,所以我想使用 AutoLayout 来做。
所以,根据UIView frames reset when using autolayout 向 viewDidLoad() 添加了一些代码, 即在情节提要中,我从“主视图”对象控制拖动到 ViewController.swift 的助手编辑器中,一行显示
@IBOutlet var mainView: UIView!
然后在我的 viewDidLoad 中,我添加了
mainView.translatesAutoresizingMaskIntoConstraints = true
但这没有任何效果,即重置行为仍然发生。 :-( 不会生成有关“无法同时满足约束”的警告。
有什么帮助吗?谢谢。运行 XCode 7 beta 5。
【问题讨论】:
如果问题已经解决,为什么还要发布?如果您认为它可能对其他人有所帮助,请仅发布问题(作为真实问题)并发布答案和实际答案。 好的,将尝试进行相应的编辑... 【参考方案1】:解决了!啊。因此,需要此代码的是其他对象,而不是主视图!即代码现在读取...
@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
通过这些更改,不会发生不必要的重置,但自动布局仍处于启用状态! :-)
【讨论】:
以上是关于iOS/Swift:保持“全局”视图平移不重置其他对象的位置,开启自动布局?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS Swift 中使用键盘平移手势处理文本输入视图移动
IOS Swift : UIPanGestureRecognizer 在 2 个不同的视图上
为啥当我在平移单元格时更改 UIImageView 的图像时,整个视图会重置一秒钟?