我想在Swift中为我的iOS应用程序创建一个类似Twitter的启动图像。
我了解动画启动图像的一般问题,并且基本上知道创建这样一个动画的步骤:
1. 在应用程序启动后立即添加一个新视图,其内容与启动图像完全相同。 2. 对该视图进行动画处理。 3. 让该视图消失。
我发现了这个出色的资源:http://iosdevtips.co/post/88481653818/twitter-ios-app-bird-zoom-animation。
但是,这个人使用了一个掩码,我无法更改他的代码以获得“真正”的类似Twitter的动画,而只是一个动画(放大)图像。
那么,我如何向当前视图添加一个新视图?如果我使用子视图,当我需要在animationDidStop中删除子视图时,我如何识别该视图?
哦,我很想在AppDelegate中完成所有这些操作。
以下是我的当前方法:
在AppDelegate中设置视图:
我常常会遇到致命错误:在解包可选值时意外发现了空值,我猜想这是由于...(需要补充更多上下文内容)
我了解动画启动图像的一般问题,并且基本上知道创建这样一个动画的步骤:
1. 在应用程序启动后立即添加一个新视图,其内容与启动图像完全相同。 2. 对该视图进行动画处理。 3. 让该视图消失。
我发现了这个出色的资源:http://iosdevtips.co/post/88481653818/twitter-ios-app-bird-zoom-animation。
但是,这个人使用了一个掩码,我无法更改他的代码以获得“真正”的类似Twitter的动画,而只是一个动画(放大)图像。
那么,我如何向当前视图添加一个新视图?如果我使用子视图,当我需要在animationDidStop中删除子视图时,我如何识别该视图?
哦,我很想在AppDelegate中完成所有这些操作。
以下是我的当前方法:
在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
}
}
针对动画:
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()
}
我常常会遇到致命错误:在解包可选值时意外发现了空值,我猜想这是由于...(需要补充更多上下文内容)
var emoji: CALayer {
return viewForLayer.layer
}
我肯定卡住了,需要stackoverflow社区的帮助,请不要判断我,因为我是新手,刚学习如何编写Swift ;)
谢谢, jo
self.window!.rootViewController = Nav1()
}但出于某种原因,我只能看到带有非常黑暗阴影且没有任何内容的nav1视图控制器。 - Jo F.T.