親愛的核心動畫/ iOS專家,UIView核心動畫翻轉動畫
我想獲得類似於下面的問題的效果。
Core animation animating the layer to flip horizontally
接受的答案似乎來形容正是我需要,但有這樣的回答沒有代碼,我不能讓我寫工作的任何代碼。 1)有1個主視圖控制器/視圖,並且在主視圖的一部分上有2個重疊的UIView,只顯示一個(1在前面',在'後面'有1個)
2)單獨的UIControl/UIButton被按下,然後發生3D翻轉過渡,將前部(可見)視圖旋轉到視野之外,同時將後部(隱藏)視圖旋轉到前面......就像看到撲克牌的反面一樣。
3)能夠繼續按壓UIControl在兩個視圖之間切換
4)只能與前視圖上的控件進行交互(即按下前一層不會無意中觸發後面的控件)恰好在水龍頭下面)
我可能正在接近這個錯誤的方式讓我知道。理想情況下,我想使用核心動畫,而不是使用翻轉事務構建的UIView,因爲我希望動畫是3D,並且還希望將此任務用作執行更復雜的CA事務的墊腳石。
目前,我可以正視圖很好地翻轉(只有一次),但後視圖不顯示。
乾杯,
安迪
這裏是我已經得到了代碼:
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
不應該這是'[self performSelector:@selector(performFlip)withObject:nil afterDelay:0.1];'使用performFlip而不是flipTile? – DelightedD0D
好的。固定。 – Axeva
謝謝,它適合我。 –