1、動畫類型
CircleFromCenter, //從中間像四周消失
ClearFromCenter,//從中間像左右消失
ClearFromLeft, //左到右
ClearFromRight, //右到左
ClearFromTop, //上到下
ClearFromBottom, //下到上
}TransitionDirection;
@protocol SplashScreenViewControllerDelegate <NSObject>
@optional
- (void)splashScreenDidAppear:(SplashScreenViewController *)splashScreen;
- (void)splashScreenWillDisappear:(SplashScreenViewController *)splashScreen;
- (void)splashScreenDidDisappear:(SplashScreenViewController *)splashScreen;
@end
3. h屬性方法
@property (nonatomic, retain) UIImage *splashImage;
@property (nonatomic, retain) UIImage *maskImage;
@property (nonatomic, assign) id <SplashScreenViewControllerDelegate> delegate;
@property (nonatomic, retain) NSString *maskImageName;
@property (nonatomic) TransitionDirection transition;
@property (nonatomic) CGFloat delay;
@property (nonatomic) CGPoint anchor;
- (void)showInWindow:(UIWindow *)window;
4.m
// Created by jason on 12-12-30.
// Copyright (c) 2012年 jason. All rights reserved.
#import "SplashScreenViewController.h"
#import <QuartzCore/QuartzCore.h>
#define DURATION 0.75
NSString *const PRPSplashScreenFadeAnimation = @"SplashScreenFadeAnimation";
@interface SplashScreenViewController ()
- (void)animate;
@end
@implementation SplashScreenViewController
@synthesize splashImage;
@synthesize maskImage;
@synthesize delegate;
@synthesize transition;
@synthesize maskImageName;
@synthesize delay;
@synthesize anchor;
- (void)showInWindow:(UIWindow *)window {
[window addSubview:self.view];
}
- (void)viewDidLoad {
self.view.layer.contentsScale = [[UIScreen mainScreen] scale];
self.view.layer.contents = (id)self.splashImage.CGImage;
self.view.contentMode =UIViewContentModeScaleAspectFill;
}
- (UIImage *)splashImage {
if (splashImage == nil) {
splashImage = [UIImage imageNamed:@"Default.png"];
}
return splashImage;
}
- (UIImage *)maskImage {
if (maskImage != nil) [maskImage release];
NSString *defaultPath = [[NSBundle mainBundle]
pathForResource:self.maskImageName
ofType:@"png"];
maskImage = [[UIImage alloc]
initWithContentsOfFile:defaultPath];
return maskImage;
}
- (void)setMaskLayerwithanchor {
CALayer *maskLayer = [CALayer layer];
maskLayer.anchorPoint = self.anchor;
maskLayer.frame = self.view.superview.frame;
maskLayer.contents = (id)self.maskImage.CGImage;
self.view.layer.mask = maskLayer;
}
- (void)viewDidAppear:(BOOL)animated {
if ([self.delegate respondsToSelector:@selector(splashScreenDidAppear:)]) {
[self.delegate splashScreenDidAppear:self];
}
switch (self.transition) {
case CircleFromCenter:
self.maskImageName = @"mask";
self.anchor = CGPointMake(0.5, 0.5);
break;
case ClearFromCenter:
self.maskImageName = @"wideMask";
self.anchor = CGPointMake(0.5, 0.5);
break;
case ClearFromLeft:
self.maskImageName = @"leftStripMask";
self.anchor = CGPointMake(0.0, 0.5);
break;
case ClearFromRight:
self.maskImageName = @"RightStripMask";
self.anchor = CGPointMake(1.0, 0.5);
break;
case ClearFromTop:
self.maskImageName = @"TopStripMask";
self.anchor = CGPointMake(0.5, 0.0);
break;
case ClearFromBottom:
self.maskImageName = @"BottomStripMask";
self.anchor = CGPointMake(0.5, 1.0);
break;
default:
return;
}
[self performSelector:@selector(animate)
withObject:nil
afterDelay:self.delay];
}
- (void)animate {
if ([self.delegate respondsToSelector:@selector(splashScreenWillDisappear:)]) {
[self.delegate splashScreenWillDisappear:self];
}
[self setMaskLayerwithanchor];
CABasicAnimation *anim = [CABasicAnimation
animationWithKeyPath:@"transform.scale"];
anim.duration = DURATION;
anim.toValue = [NSNumber numberWithInt:self.view.bounds.size.height/8];
anim.fillMode = kCAFillModeBoth;
anim.removedOnCompletion = NO;
anim.delegate = self;
[self.view.layer.mask addAnimation:anim forKey:@"scale" ];
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
self.view.layer.mask = nil;
[self.view removeFromSuperview];
if ([self.delegate respondsToSelector:@selector(splashScreenDidDisappear:)]) {
[self.delegate splashScreenDidDisappear:self];
}
}
- (void)dealloc {
[splashImage release], splashImage = nil;
[maskImage release], maskImage = nil;
[maskImageName release], maskImageName = nil;
[super dealloc];
}
@end
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
[self addTabView];//加載tabbar
[self addTabBarArrow];//給tabbar加小箭頭
[self.window makeKeyAndVisible];
return YES;
}
- (void)addSplashScreen {
SplashScreenViewController * splashView=[[SplashScreenViewController alloc] init];
splashView.delegate = self;
splashView.transition =CircleFromCenter;//這里選擇動畫樣式
splashView.delay = 2.0;
self.splashController=splashView;
[splashView release];
[self.splashController showInWindow:window];
}
4)通過委托顯示狀態欄
- (void)splashScreenDidDisappear:(SplashScreenViewController *)splashScreen {
//啟動動畫完成 顯示狀態欄
[self StatusBarHidden:NO];
}