13

ユーザーが元のView Controllerのボタンをタップしたときに独自のカスタムビューを表示したいので、ユーザーがボタンをタップしたときに発生する次の関数を定義しようとしました:

func show() {
    vc = UIViewController()
    var button = UIButton(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
    button.backgroundColor = UIColor.redColor()
    button.addTarget(self, action: "hide", forControlEvents: UIControlEvents.TouchDown)
    vc.view.addSubview(button)

    self.addChildViewController(vc)
    self.view.addSubview(vc.view)
    vc.didMoveToParentViewController(self)
}

しかし、ユーザーがボタンをタップすると、コンテナビューが突然画面に表示されますが、よりスムーズに表示されるようにしたいと考えています。そこで次にアニメーションで書き直そうとしたのですが、アニメーションで表示するには何を書けばいいのかわからず壁にぶつかりました。

transitionFromViewController(self, toViewController: vc, duration: 0.5, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: {() -> Void in
        self.addChildViewController(self.vc)
        self.view.addSubview(self.vc.view)
        }, completion: {
        Bool -> Void in
        self.vc.didMoveToParentViewController(self)
})

これはエラーを返します: 'NSInvalidArgumentException', reason: 'Children view controllers <mmmmlvalsllsl.ViewController: 0x7fc980f71f70> and <UIViewController: 0x7fc980f6dd00> must have a common parent view controller when calling -[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]'

メソッドを使えばいいと思うのですが、animations:ブロックに何を書いて何をcompletion:ブロックすればいいのかわかりません。

アニメーション コードはどのように記述できますか?

4

2 に答える 2

29

次のようにビュー遷移を使用できます。

UIView.transitionWithView(self.view, duration: 0.5, options: .TransitionFlipFromLeft, animations: { _ in
    self.view.addSubview(self.vc.view)
}, completion: nil)

これにより、ビュー コントローラーの遷移自体をアニメーション化するのではなく、コンテナー ビューのコンテンツの変更をアニメーション化します (追加されるサブビューを反映するため)。この方法で使用する必要はまったくありませんtransitionFromViewController

于 2014-10-02T23:43:00.020 に答える