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:
- Ajouter un nouveau point de vue, juste après l'application lancée, avec exactement le même contenu que la launchimage
- Animer ce point de vue
- 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
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin d'utiliser des calques, vous pouvez obtenir votre effet de zoom, simplement par le biais de
UIView
s etUIView
animation blocs.De créer une vue personnalisée contrôleur avec juste un affichage de l'image ajoutée à son point de vue, d'attribuer ce point de vue contrôleur comme une fenêtre
rootViewController
. Utiliser unUIView
bloc d'animation pour augmenter l'échelle de l'affichage de l'image (viaCGAffineTransform
). Dans l'animation d'achèvement du bloc, vous pouvez affecter votre vue initiale de contrôleur de la fenêtrerootViewController
.rounak? Ou quelqu'un d'autre sait comment résoudre ce problème?
avez-vous correctement attribué le délégué de l'animation?
que voulez-vous dire exactement? L'animation se passe à l'intérieur de l'AppDelegate. Je suis de la création d'un UINavigationController appelé "splashScreen" pour l'animation au sein de l'AppDelegate. L'animation se passe aussi dans les AppDelegate. Voulez-vous dire quelque chose comme écran d'accueil.delegate = self ?
Fondamentalement, si vous placez un point d'arrêt dans animationDidStop, ne Xcode pause là-bas?
OriginalL'auteur rounak
Il est difficile de reproduire votre erreur ici, mais je peux repérer la source.
Lorsque vous écrivez
et par la suite appel à cette variable avec auto.emoji, ou
vous sont effectivement implicitement de déballage de la variable viewForLayer, qui a un type de implicitement déballé en option UIView:
La seule explication que dans mon esprit, c'est que pour une raison viewForLayer est nul, quand vous l'appelez, qui sera précisément de provoquer une erreur lors implicitement déballé (c'est à dire utilisé de quelque façon). Je ne sais pas votre code bien mais je ne vois pas où vous avez initialisé viewForLayer, par qui je veux dire, donnez-lui un non-valeur nil.
OriginalL'auteur Richard Birkett