Lancement de l'Image de l'Écran de démarrage de l'Animation en SWIFT

Je veux créer un compte twitter comme image de lancement de mon application ios en swift.

Je comprends le problème général d'animation avec le lancement des images, et j'ai en fait connaître les étapes à suivre pour créer une animation:

  1. Ajouter un nouveau point de vue, juste après l'application lancée, avec exactement le même contenu que la launchimage
  2. Animer ce point de vue
  3. Laisser la vue disparaître

J'ai trouvé cette brillante source: http://iosdevtips.co/post/88481653818/twitter-ios-app-bird-zoom-animation

Mais ce gars utilise un masque et je ne suis pas capable de modifier son code pour obtenir la "vraie" twitter comme l'animation sans masque, mais juste un animé (zoom avant) de l'image.

Alors, comment puis-je ajouter une nouvelle vue pour la vue en cours? Si j'utilise une sous-vue, comment puis-je identifier ce point de vue, plus tard, sur le progrès, quand j'ai besoin de supprimer la sous-vue dans animationDidStop?

Oh, et j'aimerais faire tout ça dans l'AppDelegate.

Voici mon approche actuelle:

La configuration de la vue en AppDelegate:

import UIKit
import QuartzCore

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var viewForLayer: UIView!
    var window: UIWindow?

    var emoji: CALayer {
      return viewForLayer.layer
    }

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

      self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
      //step 1: recreate the launch image

      self.emoji.backgroundColor = UIColor(red: 52/255, green: 52/255, blue: 52/255, alpha: 0).CGColor
      self.emoji.contents = UIImage(named: "SplashScreenEmoji")!.CGImage

      self.emoji.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
      self.emoji.anchorPoint = CGPoint(x: 0.5, y: 0.5)
      self.emoji.position = CGPoint(x: self.window!.frame.size.width/2, y: self.window!.frame.size.height/2)

      //self.window!.addSubview(viewForLayer) or
      viewForLayer.layer.addSublayer(emoji)

      //step 2: add the animation to that view
      animateEmoji()

      self.window!.makeKeyAndVisible()
      UIApplication.sharedApplication().statusBarHidden = true
      return true
    }
}

Pour l'animation:

func animateEmoji() {
    let keyFrameAnimation = CAKeyframeAnimation(keyPath: "bounds")
    keyFrameAnimation.delegate = self
    keyFrameAnimation.duration = 1
    keyFrameAnimation.beginTime = CACurrentMediaTime() + 1 //add delay of 1 second
    let initalBounds = NSValue(CGRect: emoji.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.emoji.addAnimation(keyFrameAnimation, forKey: "bounds")
}

override func animationDidStop(anim: CAAnimation!, finished flag: Bool) {
    //step 3: remove the view
    self.viewForLayer.removeFromSuperview()
}

J'ai toujours une erreur fatale: de façon inattendue trouvé nulle, tandis que d'ôter une valeur Facultative, je suppose que c'est à cause de la

var emoji: CALayer {
   return viewForLayer.layer
}

J'ai vraiment coincé et besoin de l'aide de la stackoverflow de la communauté, s'il vous plaît ne pas juger puisque je suis nouveau ici et juste apprendre à code swift 😉

Grâce,
jo

OriginalL'auteur Jo F.T. | 2015-04-30