2015-07-28 37 views
0

我試圖在啓動應用程序時在AppDelegate中執行動畫。 (從本教程:http://iosdevtips.co/post/88481653818/twitter-ios-app-bird-zoom-animation在AppDelegate動畫後不顯示HomeViewController

,我想就我的HomeViewController面具

這是我的AppDelegate

import UIKit 
import QuartzCore 

@UIApplicationMain 

class AppDelegate: UIResponder, UIApplicationDelegate { 

var window: UIWindow? 
var mask: CALayer? 
var imageView: UIImageView? 


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 

    let imageView = UIImageView(frame: self.window!.frame) 
    imageView.image = UIImage(named: "portfolioscreen") 
    self.window!.addSubview(imageView) 

    self.mask = CALayer() 
    self.mask!.contents = UIImage(named: "BearLogo.png")!.CGImage 
    self.mask!.contentsGravity = kCAGravityResizeAspect 
    self.mask!.bounds = CGRect(x: 0, y: 0, width: 100, height: 100) 
    self.mask!.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
    self.mask!.position = CGPoint(x: imageView.frame.size.width/2, y: imageView.frame.size.height/2) 
    imageView.layer.mask = mask 
    self.imageView = imageView 

    animateMask() 

    if(NSUserDefaults.standardUserDefaults().integerForKey("visits") > 0) 
    { 
     var navigationController = UINavigationController(rootViewController: HomeViewController()) 
     window?.rootViewController = navigationController 
    } 
    else 
    { 
     window?.rootViewController = ViewController() 
     NSUserDefaults.standardUserDefaults().setInteger(1, forKey: "visits") 
    } 
    //window?.makeKeyAndVisible() 

    self.window!.backgroundColor = UIColor(red: 70/255, green: 154/255, blue: 233/255, alpha: 1) 
    self.window!.makeKeyAndVisible() 
    UIApplication.sharedApplication().statusBarHidden = true 
    return true 

} 


func applicationWillResignActive(application: UIApplication) { 
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
} 

func applicationDidEnterBackground(application: UIApplication) { 
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 
} 

func applicationWillEnterForeground(application: UIApplication) { 
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 
} 

func applicationDidBecomeActive(application: UIApplication) { 
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
} 

func applicationWillTerminate(application: UIApplication) { 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 
} 

func animateMask() { 
    let keyFrameAnimation = CAKeyframeAnimation(keyPath: "bounds") 
    keyFrameAnimation.delegate = self 
    keyFrameAnimation.duration = 1 
    keyFrameAnimation.beginTime = CACurrentMediaTime() + 1 //add delay of 1 second 
    let initalBounds = NSValue(CGRect: mask!.bounds) 
    let secondBounds = NSValue(CGRect: CGRect(x: 0, y: 0, width: 90, height: 90)) 
    let finalBounds = NSValue(CGRect: CGRect(x: 0, y: 0, width: 1500, height: 1500)) 
    keyFrameAnimation.values = [initalBounds, secondBounds, finalBounds] 
    keyFrameAnimation.keyTimes = [0, 0.3, 1] 
    keyFrameAnimation.timingFunctions = [CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut), CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)] 
    self.mask!.addAnimation(keyFrameAnimation, forKey: "bounds") 
} 

override func animationDidStop(anim: CAAnimation!, finished flag: Bool) { 
    self.imageView!.layer.mask = nil //remove mask when animation completes 

    var homeViewController = HomeViewController(nibName: "HomeViewController", bundle: NSBundle.mainBundle()) 

    self.window?.rootViewController = homeViewController 
    self.window!.makeKeyAndVisible() 



} 


} 

當我開始崩潰模擬器,並在底部有錯誤右上角。我寫錯了?

幫助將不勝感激

+0

那麼錯誤是什麼? – pbush25

+0

2015-07-28 14:31:57.654投資組合[1055:50883] ***由於未捕獲異常'NSInternalInconsistencyException',原因:'無法在捆綁中加載NIB:'NSBundle(已加載)'名稱'HomeViewController'' – Vale

+0

* **第一擲調用堆棧: ( \t 0的CoreFoundation 0x000000010e75da75 __exceptionPreprocess + 165 \t 1 libobjc.A.dylib 0x0000000110581bb7 objc_exception_throw + 45 \t 2的CoreFoundation 0x000000010e75d9ad + [NSException提高:格式:] + 205 \t 3的UIKit 0x000000010f 583133 - [UINib instantiateWithOwner:選擇:] + 552 \t 4的UIKit 0x000000010f3e1a88 - [UIViewController中_loadViewFromNibNamed:束:] + 242 – Vale

回答

0

請把執行此塊在completionHandler在 動畫的方法和嘗試?

if(NSUserDefaults.standardUserDefaults().integerForKey("visits") > 0) 
    { 
     var navigationController = UINavigationController(rootViewController: HomeViewController()) 
     window?.rootViewController = navigationController 
    } 
    else 
    { 
     window?.rootViewController = ViewController() 
     NSUserDefaults.standardUserDefaults().setInteger(1, forKey: "visits") 
    } 
+0

我不明白。在AnimateMask()中我已經有了這串代碼 – Vale

+0

@sriram hegde建議你在animate方法的完成塊內部試試這個,而不是'applicationDidFinishLaunching' – pbush25

+0

@ pbush25正確! –