Dailycode.info

Short solution for short problems

iOS: Performing a segue using a splash screen.

My application was using a dash board, from where the user navigates through the application. Works file until some large forms take more then a second or so to load. Then it might appear that the form is doing nothing. So a simple solution is to show a waiting screen while performing the segue. The only little trick is that you call the perform segue with a delay and before you do that show your waiting screen. Else the thread will wait to output to GUI until the segue is done and you will not see the splash screen.

So here just a little piece of code:

-(void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath

{

    @try

    {

        NSString * label = [store.HomeButtonsArray objectAtIndex:indexPath.item];

        //Show the waiting popup (Change it here to match your waiting popup)

        hud = [GeneralFunctionsGetMBProgressHUDForView:self.view];

        hud.detailsLabelText = [[storeTranslate: @"$MOB$Loading"] stringByAppendingString:[@" : "stringByAppendingString:label]];

        AudioServicesPlaySystemSound(0x450);

        

        [self performSelector:@selector(segueWithLabel:) withObject:label afterDelay:0.2];

        //[self performSegueWithIdentifier:[NSString stringWithFormat:@"DashB%@",label] sender:nil];

    }

    @catch (NSException *exception) {

        

    }

    @finally {

        

    }

}

 

-(void) segueWithLabel:(id) label

{

    [selfperformSegueWithIdentifier:[NSStringstringWithFormat:@"DashB%@",label] sender:nil];

}

 
if a collection view item is pressed, the segue starts after 0.2 seconds, but first a waiting popup will be send to the screen.
Then when the view disappears, I hide the waiting popup:
 

-(void) viewDidDisappear:(BOOL)animated

{

    [MBProgressHUDhideAllHUDsForView:self.viewanimated:YES];

}




How to write a simple Splash Screen

Just a quick post to guide you to write a good and very simple splash screen.
First create a simple screen with useful information and some visual indication the system is loading. Then come a simple trick. Op the Splash screen in a separate thread and close the thread when the loading is done. It’s that Simple:
'Show Splash Screen 
Dim myWorkerThread As Thread
myWorkerThread = New Thread(New ThreadStart(AddressOf StartUp))
myWorkerThread.Name = "Splash screen startup"
myWorkerThread.Start()
Then there is the simple function that will open the splash screen:
    Private Shared Sub StartUp()
        Dim frmStartUp As frmGalvaClientSplash
        frmStartUp = New frmGalvaClientSplash()
        frmStartUp.ShowDialog()
    End Sub
 
Then Simply close the plash with the following command:
myWorkerThread.Abort()