我写了一个使用多个视图的iOS应用程序。由于我不想使用故事板,我创建了一组Views(xib文件)和相应的ViewControllers(扩展UIViewController的swift文件)。
视图是使用所有"模拟指标"创建的。设置为推断,"使用自动布局"已打开并且"使用大小类"也是。对于每个元素,都设置了约束,没有错误。
在AppDelegate.swift的func application(application: UIApplication, didFinishLaunchingWithOptions ...)
中,我启动了我的ViewControllers,例如:通过
connectVC = ConnectViewController(nibName: "ConnectView", bundle: nil)
在用户操作(例如按钮点击)和网络操作(例如游戏开始)上,我通过更改AppDelegate.swift中的window.rootViewController,以及在Swift中完全like here,以编程方式切换视图。
到目前为止,这么好。但是每当我第一次显示视图时,视图就会像我的Xcode界面构建器一样显示缩放/大小,然后调整大约半秒到一秒钟后再调整到正确大小的设备屏幕。这种情况发生在iOS模拟器和我真正的iPhone上。
视图在UIImageViews中使用了不少图像,但降低图像的分辨率或数量并不会改变这种行为。
我想加快调整大小,理想情况下,用户不应该在我的视图中看到任何元素大小调整。我怎么能这样做?
答案 0 :(得分:0)
这发生在我身上。首先进入使用该应用程序启动的GameViewController。然后找到这段代码:
if let scene = GameScene(fileNamed:"GameScene") {
// Configure the view.
let skView = self.view as! SKView!
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
skView.showsFPS = false
skView.showsNodeCount = false
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .ResizeFill
skView.presentScene(scene)
}
将所有代码更改为:
if let skView = self.view as! SKView! {
let scene = GameScene(size: self.view.bounds.size)
skView.ignoresSiblingOrder = true
skView.showsFPS = false
skView.showsNodeCount = false
scene.scaleMode = .ResizeFill
scene.size = skView.bounds.size
skView.presentScene(scene)
}
如果您将GameScene更改为您的第一个场景,那应该可行。
答案 1 :(得分:0)
问题是我错误地使用了ViewController链。简单地更改window.rootViewController并执行UIView.transitionFromView并不是处理视图切换的缩进方式。
所以我创建了一个SuperViewController,它包含所有其他ViewControllers的实例,并使用下面的两个函数在视图之间切换。现在就像一个魅力。
来自Apple的Creating Custom Container View Controllers文章和View Controller Programming Guide for iOS给了我很多帮助。
func setViewController(vc: UIViewController) {
self.addChildViewController(vc)
vc.view.frame = self.view.bounds
self.view.addSubview(vc.view)
vc.didMoveToParentViewController(self)
self.currentViewController = vc
}
func switchViewController(from: UIViewController, to: UIViewController) {
from.willMoveToParentViewController(nil)
self.addChildViewController(to)
to.view.frame = self.view.bounds
self.transitionFromViewController(from, toViewController: to, duration: 0.5, options: .TransitionCrossDissolve, animations: nil) { finished in
from.removeFromParentViewController()
to.didMoveToParentViewController(self)
self.currentViewController = to
}
}