簡體   English   中英

iOS UIView過渡,請勿更改導航欄

[英]iOS UIView transition, don't change the navigationbar

我有一個使用IB編輯的UIViewController 我在頂部放置了一個UINavigationBar和一個UISegmentedControl在其下面放置了3個UIViews 我希望能夠給之間切換UIViews使用動畫,但我只想動畫UIViews ,我要的導航欄和athe segmentedControl就挪不動。 我顯示代碼現在如何執行。

任何想法我怎么只能移動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];

    }
}

假設您的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];


}

您可以在UISegmentedControl * segmentedControl下面的IB中定義一個UIView * containerView,該容器具有所需視圖的坐標和位置。 然后,您可以在該視圖內使用此功能在三個UIView之間進行轉換:

-(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] initWithNibName@"YOURNAME"];
newViewVC.view.frame = _containerView.frame;

[self replacePreviousViewInContainerViewWith: newViewVC.view];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM