0

UIViewControllerIBを使用して編集したものがあります。上にaUINavigationBarとa 、その下UISegmentedControlに3を置きUIViewsました。アニメーションを使用して切り替えることができるようにしたいのですUIViewsが、アニメーション化するだけでUIViews、navigationBar と 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];

    }
}
4

2 に答える 2

1

3 つのビューの名前が view1、view2、view3 だとします。view1 を削除して view2 または view3 を表示したい場合は、既存のコードを実行するだけで変更できます

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

の中へ

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

ビュー全体ではなく、ビュー1のみをアニメーション化します。同様に、試すことができます。

[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];


}
于 2013-08-26T08:23:59.600 に答える
0

必要なビューの座標と位置を持つ UISegmentedControl* segmentedControl の下の IB で UIView* containerView を定義できます。次に、そのビュー内で、この関数を使用して、必要な 3 つの 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];
于 2013-08-26T08:35:09.257 に答える