0

子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;
}
4

0 に答える 0