ios漂亮的启动动画

摘要:
1、动画类型typedefenum{CircleFromCenter,//从中间像四周消失ClearFromCenter,//从中间像左右消失ClearFromLeft,//左到右ClearFromRight,//右到左ClearFromTop,//上到下ClearFromBottom,//下到上}TransitionDirection;2、委托@protocolSplashScreenViewC

1、动画类型

typedefenum{
CircleFromCenter, //从中间像四周消失
ClearFromCenter,//从中间像左右消失
ClearFromLeft, //左到右
ClearFromRight, //右到左
ClearFromTop, //上到下
ClearFromBottom, //下到上
}TransitionDirection;
2、委托

@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

//SplashScreenViewController.m
//Createdbyjasonon12-12-30.
//Copyright(c)2012年jason.Allrightsreserved.
#import"SplashScreenViewController.h"
#import<QuartzCore/QuartzCore.h>
#defineDURATION0.75
NSString*constPRPSplashScreenFadeAnimation=@"SplashScreenFadeAnimation";
@interfaceSplashScreenViewController()
-(void)animate;
@end
@implementationSplashScreenViewController
@synthesizesplashImage;
@synthesizemaskImage;
@synthesizedelegate;
@synthesizetransition;
@synthesizemaskImageName;
@synthesizedelay;
@synthesizeanchor;
-(void)showInWindow:(UIWindow*)window{
[windowaddSubview:self.view];
}
-(void)viewDidLoad{
self.view.layer.contentsScale=[[UIScreenmainScreen]scale];
self.view.layer.contents=(id)self.splashImage.CGImage;
self.view.contentMode=UIViewContentModeScaleAspectFill;
}
-(UIImage*)splashImage{
if(splashImage==nil){
splashImage=[UIImageimageNamed:@"Default.png"];
}
returnsplashImage;
}
-(UIImage*)maskImage{
if(maskImage!=nil)[maskImagerelease];
NSString*defaultPath=[[NSBundlemainBundle]
pathForResource:self.maskImageName
ofType:@"png"];
maskImage=[[UIImagealloc]
initWithContentsOfFile:defaultPath];
returnmaskImage;
}
-(void)setMaskLayerwithanchor{
CALayer*maskLayer=[CALayerlayer];
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.delegaterespondsToSelector:@selector(splashScreenDidAppear:)]){
[self.delegatesplashScreenDidAppear:self];
}
switch(self.transition){
caseCircleFromCenter:
self.maskImageName=@"mask";
self.anchor=CGPointMake(0.5,0.5);
break;
caseClearFromCenter:
self.maskImageName=@"wideMask";
self.anchor=CGPointMake(0.5,0.5);
break;
caseClearFromLeft:
self.maskImageName=@"leftStripMask";
self.anchor=CGPointMake(0.0,0.5);
break;
caseClearFromRight:
self.maskImageName=@"RightStripMask";
self.anchor=CGPointMake(1.0,0.5);
break;
caseClearFromTop:
self.maskImageName=@"TopStripMask";
self.anchor=CGPointMake(0.5,0.0);
break;
caseClearFromBottom:
self.maskImageName=@"BottomStripMask";
self.anchor=CGPointMake(0.5,1.0);
break;
default:
return;
}
[selfperformSelector:@selector(animate)
withObject:nil
afterDelay:self.delay];
}
-(void)animate{
if([self.delegaterespondsToSelector:@selector(splashScreenWillDisappear:)]){
[self.delegatesplashScreenWillDisappear:self];
}
[selfsetMaskLayerwithanchor];
CABasicAnimation*anim=[CABasicAnimation
animationWithKeyPath:@"transform.scale"];
anim.duration=DURATION;
anim.toValue=[NSNumbernumberWithInt:self.view.bounds.size.height/8];
anim.fillMode=kCAFillModeBoth;
anim.removedOnCompletion=NO;
anim.delegate=self;
[self.view.layer.maskaddAnimation:animforKey:@"scale"];
}
-(void)animationDidStop:(CAAnimation*)theAnimationfinished:(BOOL)flag{
self.view.layer.mask=nil;
[self.viewremoveFromSuperview];
if([self.delegaterespondsToSelector:@selector(splashScreenDidDisappear:)]){
[self.delegatesplashScreenDidDisappear:self];
}
}
-(void)dealloc{
[splashImagerelease],splashImage=nil;
[maskImagerelease],maskImage=nil;
[maskImageNamerelease],maskImageName=nil;
[superdealloc];
}
@end
5.使用
1)隐藏状态栏
info.plist--->Statusbarisinitiallyhidden=YES
2)AppDelegate : UIResponder <UIApplicationDelegate,SplashScreenViewControllerDelegate>
3)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
[self addTabView];//加载tabbar
[self addTabBarArrow];//给tabbar加小箭头
[self addSplashScreen];//启动动画
[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];

}

免责声明:文章转载自《ios漂亮的启动动画》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇7-5 表格输出代码自动生成工具,2小时搞定智能硬件产品Demo下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章