[英]SwiftSpinner no longer working
我一直在尋找一種使用Storyboards以編程方式設置初始視圖控制器的方法。 我找到了這個解決方案: 使用Storyboards以編程方式設置初始視圖控制器
這就像我想要的那樣工作,但是在使用了該主題中提供的Swift答案之后:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var exampleViewController: ExampleViewController = mainStoryboard.instantiateViewControllerWithIdentifier("ExampleController") as! ExampleViewController
self.window?.rootViewController = exampleViewController
self.window?.makeKeyAndVisible()
return true
}
首次加載視圖時,以前可以正常工作的框架不再起作用:SwiftLoader。 https://github.com/leoru/SwiftLoader
但是,當我第二次加載相同的視圖時,SwiftLoader插件確實被激活。
我像這樣加載SwiftLoader:
SwiftLoader.show(title: "Loading...", animated: true)
我感覺這與上面創建UIWindow的代碼有關,而不是與Storyboard以前用來做的任何事情(UIView?)有關,但是我不知道如何解決此問題?
SwiftLoader使用應用程序的鍵窗口顯示。 參見此源代碼 :
var currentWindow : UIWindow = UIApplication.sharedApplication().keyWindow!
// […snip…]
loader.coverView = UIView(frame: currentWindow.bounds)
loader.coverView?.backgroundColor = UIColor.clearColor()
if (loader.superview == nil) {
currentWindow.addSubview(loader.coverView!)
currentWindow.addSubview(loader)
loader.start()
} else {
loader.coverView?.removeFromSuperview()
}
因此,您的問題一定是第一次激活SwiftLoader時另一個窗口是關鍵窗口。
要檢查此內容,請檢查UIApplication.sharedApplication().keyWindow
並將其與UIApplication.sharedApplication().windows
數組進行比較,以查看應用程序中所有當前窗口是什么。 最前面的UIWindow
將是此數組的最后一個元素。
非按鍵窗口可能是iOS鍵盤,警報視圖等。
我通過實現以下代碼解決了SVProgressHUD庫中的類似問題:
NSEnumerator *frontToBackWindows = [UIApplication.sharedApplication.windows reverseObjectEnumerator];
for (UIWindow *window in frontToBackWindows){
BOOL windowOnMainScreen = window.screen == UIScreen.mainScreen;
BOOL windowIsVisible = !window.hidden && window.alpha > 0;
BOOL windowLevelNormal = window.windowLevel == UIWindowLevelNormal;
if (windowOnMainScreen && windowIsVisible && windowLevelNormal) {
[window addSubview:self.overlayView];
break;
}
}
您可能想要更新SwiftLoader以使用像這樣的更智能的邏輯(移植到Swift),或者允許您手動指定一個窗口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.