考えられるアプローチの 1 つは、2 つUIImageView
の s を作成し、それらをアニメーション化することです。あなたがしなければならないことは次のとおりです。
- アニメーション ブロックの前に、新しい
UIImageView
を作成して現在の の後ろに配置しUIImageView
ますが、回転が 180 であることを確認してください。
- 2 つのアニメーション ブロックを作成します。1 つは最初のビューを半分の時間 (つまり 0.5 秒) で90度回転させ、もう 1 つのブロックはビューを完全な時間 (つまり 1.0 秒) でアニメーション化します。
CATransform3DIdentity
必要に応じてコードを追加します。
または、 のisDoubleSided
プロパティをCALayer
に設定しますNO
。次に、両方のビューを 180 度回転します。両面ではないため、上面図は非表示になります。
新しいシングルビュー プロジェクトを作成しUIButton
、フリップを実行するために を追加しました。残りのコードは次のとおりです。
ヘッダー ファイル:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
UIImageView* _imageView1;
UIImageView* _imageView2;
}
- (IBAction)flip:(id)sender;
@end
実装ファイル:
#import "ViewController.h"
#import <QuartzCore/QuartzCore.h>
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIImage* image1 = [UIImage imageNamed:@"gaara1.png"];
_imageView1 = [[UIImageView alloc] initWithImage:image1];
[_imageView1 setFrame:CGRectMake((CGRectGetWidth(self.view.bounds) - 300)/2, 100.f, 300, 75)];
UIImage* image2 = [UIImage imageNamed:@"gaara2.png"];
_imageView2 = [[UIImageView alloc] initWithImage:image2];
[_imageView2 setFrame:CGRectMake((CGRectGetWidth(self.view.bounds) - 300)/2, 100.f, 300, 75)];
// the second imageView is in the back
[self.view addSubview:_imageView2];
[self.view addSubview:_imageView1];
}
- (IBAction)flip:(id)sender {
[_imageView1.layer setDoubleSided:NO];
[_imageView2.layer setDoubleSided:NO];
[_imageView1.layer setZPosition:10.f];
[_imageView1.layer setTransform:CATransform3DIdentity];
[_imageView2.layer setTransform:CATransform3DMakeRotation(-M_PI, 1.f, 0.f, 0.f)];
[UIView animateWithDuration:1.0
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction
animations:^{
_imageView1.layer.transform = CATransform3DMakeRotation(M_PI, 1.f, 0.f, 0.f);
_imageView2.layer.transform = CATransform3DIdentity;
}
completion:NULL];
}
@end
画像: