親愛なるコア アニメーション/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