12

私のゲームでは、メインのUIViewでホストされている小さなUIViewのグリッドがあります。ランダムにボックスが異なる色に変わります。この時点で、ユーザーはボックスに触れてポイントを獲得できます。彼らがボックスに触れたとき、私はある種のアニメーション、理想的にはXCodeがネイティブに提供するモーダル水平フリップセグエに似たものを表示したいと思います。実際に別のUIViewに移行せずに、このアニメーションを実行するにはどうすればよいですか?

4

5 に答える 5

26

次のように、ビュー変換を簡単に試してアニメーション化できます(垂直反転の場合)。

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) {
                     view.transform = CGAffineTransformMakeScale(1, -1);
                 }
                 completion:nil];

または、より適切に制御するために、 iOS-Flip-Transformを調べることができます。

編集:

影のことについては、これを試してください:

    view.layer.shadowColor = [UIColor blackColor].CGColor;
    view.layer.shadowOpacity = 0.75;
    view.layer.shadowRadius = 15.0;
    view.layer.shadowOffset = (CGSize){0.0,20.0};

[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) {
                     view.transform = CGAffineTransformMakeScale(1, -1);
                 }
                 completion:^(BOOL b) {
    view.layer.shadowColor = [UIColor clearColor].CGColor;
    view.layer.shadowOpacity = 0.0;
    view.layer.shadowRadius = 0.0;
    view.layer.shadowOffset = (CGSize){0.0, 0.0};
                 }];

これがうまくいくことを願っています。シャドウ設定は好きなように変更できます。QuartzCore/QuartzCore.hをインポートすることを忘れないでください。

于 2013-01-20T16:05:29.740 に答える
16

UIViewはと呼ばれるメソッドを提供します

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion

オプションには、UIViewAnimationOptionTransitionFlipFromLeftおよび...が含まれます。Right

于 2013-01-20T17:07:16.793 に答える
6

反転する必要のあるボックスごとに、コンテナUIViewを使用できます。このコンテナに両側を追加します。

if (side1Visible) {
    UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState |     
    UIViewAnimationTransitionFlipFromRight;  

    [UIView transitionWithView:containerView  
                  duration:1.0  
                   options:options  
                animations:^{ side1.hidden = YES; side2.hidden = NO; }  
                completion:NULL];  
} else {
    UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState |     
    UIViewAnimationTransitionFlipFromLeft;  

    [UIView transitionWithView:containerView  
              duration:1.0  
               options:options  
            animations:^{ side1.hidden = NO; side2.hidden = YES; }  
            completion:NULL]; 
}
于 2013-01-20T16:07:58.583 に答える
0

これは、Swift3.0の次のコードで実行できます。

    UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveEaseInOut, animations: { 
        self.view.transform = CGAffineTransform(scaleX: 1, y: -1)
    }, completion: nil)

このアクションはメインスレッドで発生するため、実行中にアプリがブロックされることに注意してください。

完了ハンドラーが必要な場合は、いくつかのオプションがあります

于 2017-01-24T06:39:30.987 に答える
0

これは、 Ilker Baltaciの回答に基づいて( Swift 3で)私が最終的に得たものです:

@IBAction func flipViews() {

    // declare variables for transition
    let duration = 0.5
    var animationOptions: UIViewAnimationOptions
    var animations: () -> Void
    var completion: ((Bool) -> Void)?

    if view2.isHidden {
        animationOptions = [.beginFromCurrentState, .transitionFlipFromTop]
        animations = {
            self.view2.isHidden = false
            self.view1.isHidden = true
        }
        completion = { success in
            if success {
                self.updateSomeContentOfView2()
            }
        }
    } else {
        animationOptions = [.beginFromCurrentState, .transitionFlipFromBottom]
        animations = {
            self.view2.isHidden = true
            self.view1.isHidden = false
        }
    }

    UIView.transition(with: containerView,
                      duration: duration,
                      options: animationOptions,
                      animations: animations,
                      completion: completion)
}

containerViewview1view2​​(すべてカスタムViewControllerクラスにあります)のビュー階層IBOutletsは次のとおりです。

  • containerView
    • view1
    • view2
于 2017-09-23T14:18:42.763 に答える