2

カスタムSegueTransition内でCATransitionを使用できるかどうか疑問に思いました。CustomSegueTransition.mファイルを作成し、遷移を発生させたいカスタムsegueクラスでそれを参照しました。

これは、CustomSegueTransition.mファイルの私のコードです。

#import "CustomSegueTransition.h"
#import "QuartzCore/QuartzCore.h"

@implementation CustomSegueTransition

-(void) perform {

    // set up an animation for the transition the content
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.25];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromRight];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.25];

    [UIView commitAnimations];
}

@end

エラー警告は表示されませんが、ボタンを押してセグエ遷移を発生させた場合、遷移は実行されません。CATransitionコードに何かが欠けていますか、それとも不可能ですか?

ありがとう!

4

4 に答える 4

1

@許す

私はあなたに完全な答えを持っていませんが、あなたが新しいビューを呼び出すことは決してないので、移行がないことに気づきました。プッシュ、ポップ、モーダルのいずれで撮影しているかはわかりませんが、追加する必要のあるコードの種類は次のとおりです。

UIViewController *src = (UIViewController *) self.sourceViewController;
UIViewController *dst = (UIViewController *) self.destinationViewController;   
[src presentModalViewController:dst animated:YES];

また

    [src presentViewController:<#(UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>];

カスタムアニメーションの設定には他にも問題があると思いますが、解決策には興味がありますが、答えはありません。

于 2011-12-18T18:54:41.257 に答える
0

何をしようとしているのかわかりませんが、問題が見つかりました。

トランジションアニメーションを作成しましたが、使用したことはありません。アニメーション化するビューのレイヤーにアニメーションを追加する必要があります。

また、下部レバーのCoreAnimation関数を使用する場合は、[UIView beginAnimation] ...[UIViewcommitAnimation]を使用する必要はありません。

必要に応じて、[CATransaction begin] ...[CATransactioncommit]を使用してください。

于 2011-12-18T20:46:16.327 に答える
0

これが機能する完全なコードです

-(void)perform {

__block UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
__block UIViewController *destinationController = (UIViewController*)[self destinationViewController];                    

CATransition* transition = [CATransition animation];
transition.duration = .25;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionMoveIn; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom  

[sourceViewController.navigationController.view.layer addAnimation:transition
                                            forKey:kCATransition];

[sourceViewController.navigationController pushViewController:destinationController animated:NO];

 }
于 2012-06-28T10:05:04.133 に答える
0

QuartzCoreフレームワークをインポートします。

- (void)pushViewWithCustomTranstion {
    CATransition* transition = [CATransition animation];
    transition.duration = 0.4f;
    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromRight;
    [self.navigationController.view.layer addAnimation:transition
                                                forKey:kCATransition];
    YourDestinataionController *yourVC = [[YourDestinataionController alloc] init];
    [self.navigationController pushViewController:yourVC animated:NO];
}

カスタムトランジション効果を使用して、ビューコントローラーをナビゲーションコントローラーにプッシュするのは簡単で簡単なコードです。

于 2015-09-04T13:15:53.510 に答える