4

親愛なるコア アニメーション/iOS エキスパートへ

以下の質問と同様の効果を得ようとしています。

レイヤーを水平方向に反転するコア アニメーション

受け入れられた回答は、私が必要とするものを正確に説明しているようですが、この回答にはコードがなく、私が書いたコードを動作させることができません。

これがまさに私がやろうとしていることです:
1)1つのマスタービューコントローラー/ビューがあり、メインビューの一部に2つのUIViewが重なっており、1つだけが表示されています(「前面」に1つ、「」に1つ) back')
2) 別の UIControl/UIButton が押されると、3D フリップ トランジションが発生し、前面 (表示されている) ビューがビューの外に回転し、同時に背面 (非表示) ビューが前面に回転します... 見るのと同じようにトランプの裏返し。
3) UIControl を押し続けて 2 つのビューを切り替える
ことができることタップ)

私はこれに間違った方法でアプローチしている可能性があるので、私に知らせてください。理想的には、フリップ トランザクションに組み込まれている UIView ではなく、Core Animation を使用したいと考えています。これは、アニメーションを 3D にしたいためであり、このタスクをより複雑な CA 処理を実行するための足がかりとして使用したいからです。

現時点では、正面図をうまく反転させることができます (1 回だけ) が、背面図は表示されません。

乾杯、
アンディ

ここに私が持っているコードがあります:

MainViewController.h

@interface MainViewController : UIViewController
    - (IBAction)changeViewTapped:(UITapGestureRecognizer *)recognizer;
@end

MainViewController.m

#import "MainViewController.h"
#import <QuartzCore/QuartzCore.h>

@interface MainViewController ()

@property (weak, nonatomic) IBOutlet UIView *detailView;
@property (weak, nonatomic) IBOutlet UIView *listView;
@property (nonatomic) CATransform3D rotationAndPerspectiveTransform;

@end

@implementation MainViewController

@synthesize detailView = _detailView;
@synthesize listView = _listView;
@synthesize rotationAndPerspectiveTransform = _rotationAndPerspectiveTransform;

- (void)viewDidLoad {
    [super viewDidLoad];

    CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
    rotationAndPerspectiveTransform.m34 = 1.0 / -500;
    rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, M_PI, 0.0f, 1.0f, 0.0f);
    self.rotationAndPerspectiveTransform = rotationAndPerspectiveTransform;

    CALayer *listLayer = self.listView.layer;
    listLayer.doubleSided = NO;
    listLayer.transform = self.rotationAndPerspectiveTransform;
}

- (IBAction)changeViewTapped:(UITapGestureRecognizer *)recognizer {
    CALayer *detailLayer = self.detailView.layer;
    CALayer *listLayer = self.listView.layer;

    detailLayer.doubleSided = NO;
    listLayer.doubleSided = NO;

    [UIView animateWithDuration:0.5 animations:^{
        detailLayer.transform = self.rotationAndPerspectiveTransform;
        listLayer.transform = self.rotationAndPerspectiveTransform;
    } completion:^(BOOL finished){
        // code to be executed when flip is completed
    }];
}

@end
4

2 に答える 2

0
- (void)perform
{
   UIViewController *src = (UIViewController *) self.sourceViewController;
   UIViewController *dst = (UIViewController *) self.destinationViewController;    

  [UIView beginAnimations:@"LeftFlip" context:nil];
  [UIView setAnimationDuration:0.8];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
  [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft    forView:src.view.superview cache:YES];
  [UIView commitAnimations];

  [src presentViewController:dst animated:NO completion:nil];
 }
于 2014-10-16T08:02:37.707 に答える