Paresh Masani
Paresh Masani

Reputation: 7504

iOS: UITableView reload animation

I have implemented nested UITableViews such that, on selecting a particular row from parent Data list, gets child nodes data from server and reloads them in same UITableview. I have given provision to go back to parent nodes using dictionary and everything working fine. I want Navigation Style animation when I move parent data list to child data list. Could someone please help me how to do this.

I have tried using following code UIViewAnimationOptionTransitionFlipFromLeft and UIViewAnimationOptionTransitionFlipFromRight animations it flips the view - I am looking for similar but without flip - simple navigation style animation like I want to pretend I am pushing another UITableView.

[UIView transitionWithView: self.listTableView
                   duration: 0.35f
                   options: UIViewAnimationOptionTransitionFlipFromLeft
                   animations: ^(void) {
                        [self.listTableView reloadData];
                    } completion: ^(BOOL isFinished){
                    }];

Upvotes: 1

Views: 1901

Answers (1)

Mohammad Kamar Shad
Mohammad Kamar Shad

Reputation: 6067

Here is Logic with Code.

you need to import QuartzCore framework in.h` for using below piece of Code. AS #import

// Method to replace a given subview with another using a specified transition type, direction, and duration
-(void)replaceSubview:(UIView *)oldView withSubview:(UIView *)newView transition:(NSString *)transition direction:(NSString *)direction duration:(NSTimeInterval)duration
     {
  // Set up the animation
  CATransition *animation = [CATransition animation];
  // Set the type and if appropriate direction of the transition, 
  if (transition == kCATransitionFade)
       {
        [animation setType:kCATransitionFade];
   } 
  else
     {
  [animation setType:transition];
  [animation setSubtype:direction];
 }
// Set the duration and timing function of the transtion -- duration is passed in as a parameter, use ease in/ease out as the timing function
 [animation setDuration:duration];
 [animation setTimingFunction:[CAMediaTimingFunction   functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
 [[oldView layer] addAnimation:animation forKey:@"transitionViewAnimation"];    
   }  

Call Above method when TableView row gets Clicked as below.

     [self replaceSubview:thisTableView 
                 withSubview:thisTableView 
                  transition:kCATransitionPush
                   direction:kCATransitionFromLeft
                    duration:0.3];


 //thisTableView is instance of UItableView.

Upvotes: 2

Related Questions