Voglio creare un'immagine di lancio come Twitter per la mia app ios in modo rapido.Avvia immagine Splash Screen Animazione in SWIFT
faccio capire il problema generale con le immagini di lancio animate, e ho praticamente conosco la procedura per creare una tale animazione:
- aggiungere una nuova vista, subito dopo l'applicazione ha lanciato, con lo stesso esatto contenuto come il launchimage
- Animate che vista
- Lasciate che la vista sparire
ho trovato questo geniale fonte: http://iosdevtips.co/post/88481653818/twitter-ios-app-bird-zoom-animation
Ma questo ragazzo usa una maschera e io non sono in grado di cambiare il suo codice per ottenere il "vero" twitter come un'animazione senza maschera, ma solo un'immagine animata (ingrandita).
Quindi, come posso aggiungere una nuova vista alla vista corrente? Se utilizzo una sottoview, come posso identificare quella vista in un secondo momento sui progressi quando devo eliminare la sottoview in animationDidStop?
Oh e mi piacerebbe fare tutto ciò che è disponibile in AppDelegate.
Ecco il mio approccio attuale:
Impostazione della visualizzazione in 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
}
}
per l'animazione:
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()
}
ottengo sempre un errore fatale: inaspettatamente trovato nullo mentre scartando un valore facoltativo, suppongo che questo sia dovuto allo
var emoji: CALayer {
return viewForLayer.layer
}
Io sicuramente bloccato e hanno bisogno l'aiuto della comunità StackOverflow, si prega di non giudicare perché io sono nuovo qui e solo imparare a codice swift;)
Grazie, jo
Grande! Per me va bene. Ho solo un problema rimasto. Una volta che l'animazione è finita, questo codice dovrebbe mostrare il mio controller rootview iniziale: Override func animationDidStop (anim: CAAnimation !, bandiera finito: Bool) {! self.window .rootViewController = Nav1()} ma per qualche ragione posso vedere solo il nav1 viewController con un'ombra molto scura su di esso e senza alcun contenuto. –
rounak? O qualcun altro sa come risolvere questo problema? –
@ JoF.T. hai assegnato correttamente il delegato per l'animazione? – rounak