子View Controllerをインスタンス化するView Controllerがあり、そのフレーム原点xを親のviewdidloadから50に設定して正常に動作しますが、子viewcontroller viewdidloadがトリガーされると、親を参照して子ビューのフレームを取得したいビューコントローラーのビューですが、0を取得します。取得したい親ではなく、子ビューコントローラーを参照してフレームを取得していると思います。
基本的に、私はパン ジェスチャを実装して子を親の周りに移動しようとしています。そのため、親のジオメトリにそのフレームが必要です。出来ますか?
最終結果は、facebook アプリのようなテーブル ビューである topview コントローラーの背面にあるテーブル ビューです。
根
- (void)viewDidLoad
{
[super viewDidLoad];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboardAlpha" bundle:nil];
self.topViewController = [storyboard instantiateViewControllerWithIdentifier:@"Prime"];
_layerPosition1 = _topViewController.view.frame.origin.x;
}
- (void)setTopViewController:(UIViewController *)topViewController
{
CGRect topViewFrame = _topViewController ? _topViewController.view.frame : self.view.bounds;
topViewFrame.origin.x += 50;
[_topViewController.view removeFromSuperview];
[_topViewController willMoveToParentViewController:nil];
[_topViewController removeFromParentViewController];
_topViewController = topViewController;
[self addChildViewController:self.topViewController];
[self.topViewController didMoveToParentViewController:self];
[_topViewController.view setAutoresizingMask:self.autoResizeToFillScreen];
[_topViewController.view setFrame:topViewFrame];
_topViewController.view.layer.shadowOffset = CGSizeZero;
_topViewController.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.layer.bounds].CGPath;
[self.view addSubview:_topViewController.view];
}
- (NSUInteger)autoResizeToFillScreen
{
return (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleBottomMargin |
UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleRightMargin);
}
子
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
SoulPrimeOmegaViewController *parent = (SoulPrimeOmegaViewController *)self.parentViewController;
_layerPosition2 = parent.topViewController.view.frame.origin.x;
}