Splash screen related in iphone
Hi I am trying to splash screen with the help of timer. but it can't. IS any suggestion regarding this code.........
SplashViewController.h:-
#import <UIKit/UIKit.h>
#import "MainMenu.h"
@interface SplashViewController : UIViewController {
    UIImage *imgSplash;
    NSTimer *timer;
    MainMenu *objMainMenuView;
}
@property (nonatomic,retain) NSTimer *timer;
@property (nonatomic,retain) UIImage *imgSplash;
@property (nonatomic,retain) MainMenu *objMainMenuView;
@end
SplashViewController.m:-
#import "SplashViewController.h"
@implementation SplashViewController
@synthesize timer,imgSplash,objMainMenuView;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    timer = [[NSTimer alloc] init]; 
    UIImageView *splashImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,460)];
    imgSplash = [[UIImage alloc] init];
    imgSplash = [UIImage imageNamed:@"chicocredit_splash.png"];
    [splashImageView setImage:imgSplash];
    [self.view addSubview:splashImageView];
    timer = [NSTimer timerWithTimeInterval:2.0 target:self.timer selector:@selector(fadeScreen) userInfo:nil repeats:NO];
    if([timer isValid]==1)
    {       
        [timer fire];
        //self.view.alpha = 0.0;
        objMainMenuView = [[MainMenu alloc] initWithNibName:@"MainMenu" bundle:nil];
        [self.navigationController pushViewController:objMainMenuView animated:YES];
    }   
}
-(void) onTimer{
    NSLog(@"LOAD");
}
- (void)fadeScreen
{
    [UIImageView beginAnimations:nil context:nil]; 
    [UIImageView setAnimationDuration:2.0];       
    [UIImageView setAnimationDelegate:self];
    [UIImageView commitAnimations];
    //[UIView setAnimationDidStopSelector:@selector(finishedFading)];  
    //self.view.alpha = 0.0;       
    //[UIView commitAnimations];   
}
/*开发者_如何学编程
- (void) finishedFading
{   
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:5.0];
    //self.view.alpha = 1.0;   
    //viewController.view.alpha = 1.0;
    //self.objMainMenuView.view.alpha = 1.0;
    [UIView commitAnimations];   
    //[splashImageView removeFromSuperview];
}*/
- (void)dealloc {
    [super dealloc];
}
@end
Use this It may be solution for that.
- (void)viewDidLoad {
timer = [[NSTimer alloc] init]; 
CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 460.0f);
splashImageView = [[UIImageView alloc] initWithFrame:myImageRect]; 
[splashImageView setImage:[UIImage imageNamed:@"image3.jpg"]];
splashImageView.opaque = YES; 
[self.view addSubview:splashImageView];
[splashImageView release]; 
[self performSelector:@selector(doTHis) withObject:nil afterDelay:2.0];
[super viewDidLoad];
}
-(void)doTHis{
objMainMenuView = [[MainMenu alloc] initWithNibName:@"MainMenu" bundle:nil];
[self.navigationController pushViewController:objMainMenuView animated:YES];
}
Good Luck
Looks like your MianMenu is getting pushed before you can see the fade effect. Its because you are firing the timer and pushing the Main Menu immediately.
// Schedule the timer here.
[NSTimer timerWithTimeInterval:2.0f target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:NO];
// Timer fire method.
-(void) timerFireMethod:(NSTimer *) theTimer {
[UIView beginAnimations:nil context: nil];
[UIView setAnimationDuration:2.0f];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector: @selector(animationDidStop: finished: context:)];
// Put animation code.
[UIView commitAnimations];
}
// Called when animation finishes.
-(void) animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
// Called when animation finishes.
// Push the Main menu here.
}
Keep break point in the timer fire method. It should get called after 2 seconds as specified. Then keep break point in the animationDidStopSelector method. It will get called after your fade animation of 2 seconds.
Your code is leaked:
1:
timer = [[NSTimer alloc] init]; //Leak here, remove this line
.
.
.
timer = [NSTimer timerWithTimeInterval:2.0 target:self.timer selector:@selector(fadeScreen) userInfo:nil repeats:NO];
2:
imgSplash = [[UIImage alloc] init];//Leak here, remove this line
imgSplash = [UIImage imageNamed:@"chicocredit_splash.png"];
3:
   UIImageView *splashImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,460)];
    ...
    [splashImageView setImage:imgSplash]; //Leak here, should release splashImageView
Why not, do everything else after timer expired and fading is done.
- (void) finishedFading
{   
        objMainMenuView = [[MainMenu alloc] initWithNibName:@"MainMenu" bundle:nil];
        [self.navigationController pushViewController:objMainMenuView animated:YES];
}
short cut: use another viewController with imageView present it modally and dismiss with animation dissolve.
You should present view in viewWillAppear.Start timer on viewLoad of second viewController.When timer fires dismiss it.   
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论