2013-08-26 3 views
0

У меня есть UIViewController, который я редактирую с помощью IB. Я положил UINavigationBar и UISegmentedControl наверху и 3 UIViews под ними. Я хочу иметь возможность переключаться между UIViews с помощью анимации, но я хочу только оживить UIViews, я хочу, чтобы navigationBar и athe segmentedControl не двигались. Я покажу код, как я это делаю сейчас.iOS UIView переход, не меняйте навигационную панель

Любая идея, как я мог перемещать только 3 вида?

- (IBAction)segmentedControlValueChanged:(id)sender { 

    UISegmentedControl* segmentedControl = sender; 

    if(lastSelectedViewIndex != [segmentedControl selectedSegmentIndex]) { 

     CATransition *transition = [CATransition animation]; 
     transition.duration = 0.4; 
     transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
     transition.type = kCATransitionMoveIn; 

     if(lastSelectedViewIndex < [segmentedControl selectedSegmentIndex]) 
      transition.subtype = kCATransitionFromLeft; 
     else 
      transition.subtype = kCATransitionFromRight; 

     transition.removedOnCompletion = YES; // force removal of animation when completed. 
     { 
      switch ([segmentedControl selectedSegmentIndex]) { 

       case 0: 

        [self.usageScenarioView setHidden:NO]; 
        [self.loginCredentialsView setHidden:YES]; 
        [self.whatItCoversView setHidden:YES]; 

        [self.pageControl setCurrentPage:0]; 
        break; 

       case 1: 
        [self.usageScenarioView setHidden:YES]; 
        [self.loginCredentialsView setHidden:NO]; 
        [self.whatItCoversView setHidden:YES]; 

        [self.pageControl setCurrentPage:1]; 
        break; 

       case 2: 
        [self.usageScenarioView setHidden:YES]; 
        [self.loginCredentialsView setHidden:YES]; 
        [self.whatItCoversView setHidden:NO]; 

        [self.pageControl setCurrentPage:2]; 

        break; 

      } 
     } 

     lastSelectedViewIndex = [segmentedControl selectedSegmentIndex]; 
     [self.view.layer addAnimation:transition forKey:nil]; 

    } 
} 

ответ

1

Скажите, что ваши 3 вида называются view1, view2, view3. Если вы хотите удалить view1 и шоу view2 или View3, просто сделать существующий код, но изменить

[self.view.layer addAnimation:transition forKey:nil]; 

в

[view1.layer addAnimation:transition forKey:nil]; 

, который будет анимировать view1 только не весь вид. Точно так же вы можете попробовать,

[view2.layer addAnimation:transition forKey:nil]; 
[view3.layer addAnimation:transition forKey:nil]; 

более точно, сделайте как

transition.removedOnCompletion = YES; // force removal of animation when completed. 
    { 
     switch ([segmentedControl selectedSegmentIndex]) { 

      case 0: 

       [self.usageScenarioView setHidden:NO]; 
       [self.loginCredentialsView setHidden:YES]; 
       [self.whatItCoversView setHidden:YES]; 

       [self.pageControl setCurrentPage:0]; 

       [self.usageScenarioView.layer addAnimation:transition forKey:nil]; 
       break; 

      case 1: 
       [self.usageScenarioView setHidden:YES]; 
       [self.loginCredentialsView setHidden:NO]; 
       [self.whatItCoversView setHidden:YES]; 

       [self.pageControl setCurrentPage:1]; 

       [self.loginCredentialsView.layer addAnimation:transition forKey:nil]; 
       break; 

      case 2: 
       [self.usageScenarioView setHidden:YES]; 
       [self.loginCredentialsView setHidden:YES]; 
       [self.whatItCoversView setHidden:NO]; 

       [self.pageControl setCurrentPage:2]; 

       [self.whatItCoversView.layer addAnimation:transition forKey:nil]; 
       break; 

     } 
    } 

    lastSelectedViewIndex = [segmentedControl selectedSegmentIndex]; 


} 
0

можно определить UIView * containerView в IB ниже вашего UISegmentedControl * segmentedControl, которая имеет координаты и положение видов, которые вы хотите. Тогда вы можете в этом окне вы можете сделать переход между тремя UIViews вы хотите с помощью этой функции:

-(void) replacePreviousViewInContainerViewWith:(UIView*) newView { 
[UIView transitionWithView:_containerView duration:0.7 
        options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionCurveEaseIn 
       animations:^ { 
        [_containerView.subviews[0] removeFromSuperview]; 
        [_containerView addSubview:newViewVC.view]; 
       } 
       completion:^(BOOL finished) { 
        if (finished) { 
         NSLog(@"Now displaying %@.", [newView class]); 
        } 
       }]; 
[UIView commitAnimations]; 
} 

и вы вызываете эту функцию, как это от того, где вы хотите изменить Просмотров:

UIViewController *newViewVC = [[UIViewController alloc] [email protected]"YOURNAME"]; 
newViewVC.view.frame = _containerView.frame; 

[self replacePreviousViewInContainerViewWith: newViewVC.view]; 
Смежные вопросы