Start Bild Splash Screen Animation in SWIFT
Ich möchte erstellen Sie eine twitter-wie starten Bild für meine ios-app in swift.
Ich verstehe das Allgemeine problem mit animierten starten Bilder, und ich im Grunde wissen die Schritte zum erstellen einer solchen animation:
- Fügen Sie eine neue Ansicht direkt nachdem Sie die app gestartet, mit dem genau gleichen Inhalt wie der launchimage
- Animieren, anzeigen
- Lassen Sie den Blick verschwinden
Fand ich dieses geniale Quelle: http://iosdevtips.co/post/88481653818/twitter-ios-app-bird-zoom-animation
Aber dieser Kerl verwendet eine Maske, und ich bin nicht in der Lage zu ändern, seinen code, um die "echten" twitter-wie animation, ohne eine Maske, aber nur ein animiertes (zoom-in) Bild.
Also wie füge ich eine neue Ansicht der aktuellen Ansicht? Wenn ich eine Untersicht, wie kann ich erkennen, dass die Ansicht später auf die Fortschritte, wenn ich löschen müssen, um die Untersicht in animationDidStop?
Oh, und ich würde gerne alles tun, was in der AppDelegate.
Hier ist mein Aktueller Ansatz:
Einrichten der anzeigen im 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
}
}
Für die 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()
}
Bekomme ich immer eine fatal error: unerwartet gefunden nil while unwrapping ein Optionaler Wert, ich denke, dies ist wegen der
var emoji: CALayer {
return viewForLayer.layer
}
Ich auf jeden Fall stecken und brauchen die Hilfe von stackoverflow-community, bitte nicht beurteilen, da ich hier neu bin und Sie einfach lernen, wie man code swift 😉
Dank,
jo
InformationsquelleAutor Jo F.T. | 2015-04-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu verwenden, Schichten, erreichen Sie Ihre zoom-Effekt einfach über
UIView
s undUIView
animation Blöcke.Erstellen Sie eine benutzerdefinierte view-controller mit nur einem image-anzeigen Hinzugefügt, um die anzeigen, zuweisen, view-controller, wie ein Fenster
rootViewController
. Verwenden Sie eineUIView
animationsblock zu erhöhen Sie die Größe des Bildes-Ansicht (überCGAffineTransform
). In der animation Fertigstellung blockieren, können Sie Ihrem eigentlichen initial view controller, um das FensterrootViewController
.rounak? Oder hat jemand wissen, wie man dieses Problem beheben?
hast du richtig zugeordnet, der / die Delegierte für die animation?
was genau meinst du? Die animation geschieht in der AppDelegate. Ich bin momentan dabei, ein UINavigationController als "splashScreen" für die animation in der AppDelegate. Die animation geschieht auch in der AppDelegate. Meinst du so etwas wie splashScreen.delegate = self ?
Im Grunde, wenn Sie setzen einen Haltepunkt in animationDidStop, hat Xcode Pause über es?
InformationsquelleAutor rounak
Es ist schwer zu replizieren und Ihre Fehler hier, aber ich kann vor Ort die Quelle.
Beim schreiben
und anschließend Aufruf auf diese variable mit selbst.emoji, oder
sind Sie eigentlich implizit Auspacken die variable viewForLayer, die einen Typ einer implizit unwrapped optional UIView:
Die einzige Erklärung ist meiner Meinung nach, dass aus irgendeinem Grund viewForLayer ist null, wenn Sie es nennen, die genau einen Fehler verursachen, wenn implizit unwrapped (d.h. in irgendeiner Weise verwendet). Ich weiß nicht, in deinem code auch, aber ich kann nicht sehen, wo Sie initialisiert viewForLayer, von denen ich meine, geben Sie eine nicht-null-Wert.
InformationsquelleAutor Richard Birkett