表示されている画面の外側にビューを作成してプッシュしたいのですが (デフォルトの pushViewController アニメーションのように)、外側に UIView を作成できません。ここでこのコードを試していましたが、うまくいきません。ビューは常に作成され、現在の UIScreen 境界に表示されます。つまり、押し出されるビューと押し込まれるビューの両方の代わりに、外に出るビューだけが「移動」し、新しいビューはその場所に留まります。
表示するビューの .m で:
- (void)viewDidLoad
{
[super viewDidLoad];
// set the views frame off the screen
self.view.frame = CGRectMake(320, 0, 320, 460);
}
実際に遷移を行うメソッドでは:
-(void)showOverview:(UIViewController *)sender //sender = mapviewController
{
NSLog(@"overview");
// current view (frame) = mapviewCOntroller.view
CGRect outFrame = self.view.frame;
if (!self.overviewViewController) {
self.overviewViewController = [[UCOverviewViewController alloc] init];
self.overviewViewController.transitionDelegate = self;
// create a new View for the overview
[self.overviewViewController.view setCenter:self.view.center];
[self.view.window addSubview:self.overviewViewController.view];
[self.view.window bringSubviewToFront:self.mapViewController.view];
}
CGRect inFrame = self.overviewViewController.view.frame;
outFrame.origin.x = outFrame.origin.x-outFrame.size.width;
inFrame.origin.x = self.view.frame.origin.x;
[UIView animateWithDuration:0.5f animations: ^{
[self.view setFrame:outFrame];
}];
}
編集:これは私の最終的なコードであり、少なくとも重要な部分です。これで、現在表示されているビューは、オフスクリーン ビューがスライドインすると同時に、スライダーをオフスクリーンにします。
-(void)showOverview
{
if (!self.overviewViewController) {
NSLog(@"OverviewViewController created!");
self.overviewViewController = [[UCOverviewViewController alloc] init];
self.overviewViewController.transitionDelegate = self;
// add the subView
[self.view addSubview:self.overviewViewController.view];
[self.view sendSubviewToBack:self.overviewViewController.view];
}
CGRect outFrame = self.mapViewController.view.frame;
CGRect inFrame = self.overviewViewController.view.frame;
outFrame.origin.x -= outFrame.size.width;
inFrame.origin.x = self.view.frame.origin.x;
self.isOverviewViewVisible = YES;
[UIView animateWithDuration:0.5f animations: ^{
[self.mapViewController.view setFrame:outFrame];
[self.overviewViewController.view setFrame:inFrame];
}];
}