2

ストーリーボードを使用してスライダーのコンテンツをデザインしたいのですが、オフスクリーン コンテンツをデザインする簡単な方法は、childViewController を使用することです。だから私はこれをやった

myViewController = [[UIStoryboard storyboardWithName:@"ipad" bundle:NULL] instantiateViewControllerWithIdentifier:@"keyPadOffScreen"];

[self addChildViewController:myViewController];
[myViewController didMoveToParentViewController:self];
newView = myViewController.view;
[self.view addSubview:newView];

これにより、ビュー コントローラー全体がルート ビューの上に追加されます。問題は、ビュー全体ではなく、サブビューの 1 つだけを表示することです。ルート ビューを追加する方法を知っていれば、アニメーションを処理できます。ビュー全体ではなく、サブビュー(sliderViewは必要なサブビューの名前です)を追加するだけでこれを試しましたが、何もしませんでした

newView = myViewController.sliderView;
[self.view addSubview:newView];

別の戦略を使用する必要がありますか?

編集:これは機能しますが、ばかげているようです-ビューのサイズをサブビューのサイズに設定します。

  newView.frame = CGRectMake(newView.frame.origin.x, newView.frame.origin.y, newView.frame.size.width, **myViewController.sliderView.frame.size.height**);
4

2 に答える 2

1

ビューだけでは少しやり過ぎのようです。多くのカスタムビュー/アニメーション/トランジションを開始すると、多くの場合、コードで実装するのが簡単になります.

しかし、ストーリーボードに固執したいかもしれません。私はそれを尊重します。また、これに取り組んでいる開発者が数人いる場合は、UI のセットアップ方法を一定に保つことが重要です。

別のビュー コントローラーに保持して、画面上でアニメーション化する必要があるときに追加する代わりに、既存のビュー コントローラーに追加して、非表示に設定するか、IB でアルファを 0.0 に設定します。次に、アニメーションでそれを元に戻し、表示できるようにします。

于 2013-12-20T00:47:25.410 に答える
0

たとえば、ここでカスタムセグエを使用できます。

@implementation FRPresentEnteringPopupSegue

- (void)perform
{
    FirstVC *toVC = self.destinationViewController;
    SecondNavigationController *fromVC = self.sourceViewController;
    toVC.view.frame = CGRectMake(0.0, 0.0, 300.0, 135.0);
    toVC.view.center = CGPointMake(fromVC.view.bounds.size.width/2, fromVC.view.bounds.size.height + toVC.view.bounds.size.height/2);
    [fromVC.view addSubview:toVC.view];
    [toVC viewWillAppear:YES];
    [UIView animateWithDuration:0.5
                          delay:0.0
         usingSpringWithDamping:0.7
          initialSpringVelocity:0.5
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         toVC.view.center = CGPointMake(fromVC.view.bounds.size.width/2, fromVC.view.bounds.size.height/2);
                     }completion:^(BOOL finished) {
                         [toVC viewDidAppear:YES];
                     }];
}

@end
  • UIStoryboardSegue サブクラスを作成します
  • - (void)performカスタム ビューの外観コードでメソッドをオーバーライドする
  • セグエの通常の方法を使用する
于 2013-12-20T01:22:24.703 に答える