vc2 が vc1 の下にあり、vc1 が邪魔にならないようにスライドしてそれを明らかにしたい場合に、vc1 から vc2 への移行を行っていると言っても過言ではありませんか?
もしそうなら、sdk の観点から異常または危険なことをしなくても、それは実行可能です。秘訣は、通常のインスタンス化と提示の手順を実行することですが、vc1 では、vc2 を提示する前に、vc1 のように見える UIImage を渡します。Vc2 は、その画像が表示される前にその画像で自分自身を覆い、画像を邪魔にならないようにスライドさせて自分自身を明らかにします。
手順は次のとおりです。
1) vc1 で、この投稿のメソッドを実装します。ビューのイメージをキャプチャします。
2) vc2 を提示したくなるアクションがいくつかあります。このようにしてください...
- (void)presentVc2:(id)sender {
UIImage *image = [self makeImage]; // it was called makeImage in the other post, consider a better name
MyViewController2 *vc2 = [[MyViewController2 alloc] initWithNibName:@"MyViewController2" bundle:nil];
vc2.presentationImage = image; // more on this later
// this line will vary depending on if you're using a container vc, but the key is
// to present vc2 with NO animation
[self presentViewController:vc2 animated:NO completion:^{}];
}
3) MyViewController2 に presentationImage という UIImage プロパティを作成し、セッターを公開します。次にMyViewController2で...
// before we appear, cover with the last vc's image
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
UIImageView *imageView = [[UIImageView alloc] initWithImage:self.presentationImage];
imageView.frame = self.view.bounds;
imageView.tag = 128;
[self.view addSubview:imageView];
}
// after we appear, animate the removal of that image
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:128];
[UIView animateWithDuration:0.5 animations:^{
imageView.frame = CGRectOffset(imageView.frame, -self.frame.size.width, 0);
}];
}