1

次のコードを使用して、CATransition でビューを切り替えています。

CATransition *applicationLoadViewIn = [CATransition animation];

    [applicationLoadViewIn setDuration:20];

    [applicationLoadViewIn setType:kCATransitionPush];

    [applicationLoadViewIn setSubtype:kCATransitionFromTop];

    [applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];

    ViewToSwitchTo *myviewcontroller = [[ViewToSwitchTo alloc] init];

    [self.view.layer addAnimation:applicationLoadViewIn forKey:kCATransitionPush];

    [self.view addSubview:myviewcontroller.view];

それはほとんど私が望むように機能します。本来なら上から押すのだが、なぜか挙動がおかしくなる。まず、切り替え先のビューが下から入ってきますが、何らかの理由で、切り替え元のビューが不透明度の低い上に表示されるため、両方が表示されます。ただし、入ってくるビューも、それ自体と他のビューの上に 100 ピクセルほど上に移動し、再び不透明度が低くなります。移行の中間点の直前に、すべてが正常に機能し、入ってくるビューと出ていくビューだけが表示され、本来行うべきことを実行します。しかし、中間点の少し後、切り替え元のビューの下に、切り替え先のビューが最終目的地に表示され、切り替え元のビューの不透明度が低下します。

ここで何が起こっているのですか?

4

2 に答える 2

0

こんな使い方もできます

CATransition *applicationLoadViewIn = [CATransition animation];
    [applicationLoadViewIn setDuration:1.5];
    [applicationLoadViewIn setType:kCATransitionPush];
    [applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
    //[applicationLoadViewIn setRepeatCount:114];

    productVC=[[PoductViewController alloc]initWithNibName:@"PoductViewController" bundle:[NSBundle mainBundle]];

    [[productVC.view layer] addAnimation:applicationLoadViewIn forKey:kCATransitionPush];
    [self.view addSubview:productVC.view];

ただし、代わりにNavigation Controllerを使用することをお勧めします

[self.view addSubview:productVC.view];

ただ使う

[self.navigationController pushViewController:productVC animated:YES];

これを使用すると、背景ビューがなくなり、現在のビューの白い画面が表示されます。ただし、サブビューを追加した場合は、サブビューを手動で削除する必要があります。

于 2010-12-24T07:20:55.763 に答える
0

あなたが何を望んでいるのか本当にわかりませんが、このコードが実装に役立つことを願っています。そうでない場合は、あなたについてもっと教えてください CATransition

-(void) startAnimation {
    fullImageView.alpha = 0.50;
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationRepeatCount:1];
    [UIView setAnimationRepeatAutoreverses:NO];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(pulseAnimationDidStop:finished:context:)];
    fullImageView.alpha = 1.0;
    [UIView commitAnimations];
}

- (void)pulseAnimationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    if(hasFocus) {
        [self startAnimation];
    } else {
        fullImageView.alpha = 1.0;
    }
}

-(void) setHasFocus:(BOOL)_hasFocus {
    hasFocus = _hasFocus;
    if(hasFocus) {
        [self startAnimation];
    }
}
于 2010-12-24T07:07:44.680 に答える