Bla*_*ard 8 animation ios uicontainerview swift
我希望当用户点击原始视图控制器的按钮来显示自己的自定义视图,所以我试图确定这是当用户点击该按钮引起了以下功能:
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)
}
Run Code Online (Sandbox Code Playgroud)
然而,当用户点击按钮时,容器视图会突然显示在屏幕上,但我想让它显示得更加流畅.接下来我尝试用动画重写它,但是我已经碰壁了,因为我不知道应该写什么以便用动画显示它:
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)
})
Run Code Online (Sandbox Code Playgroud)
这会返回一个错误:'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:阻止什么.
我该如何编写动画代码?
Gre*_*reg 19
您可以像这样使用视图转换:
UIView.transitionWithView(self.view, duration: 0.5, options: .TransitionFlipFromLeft, animations: { _ in
self.view.addSubview(self.vc.view)
}, completion: nil)
Run Code Online (Sandbox Code Playgroud)
这将动画容器视图内容的更改(以反映正在添加的子视图),而不是尝试为视图控制器转换本身设置动画.您无需使用transitionFromViewController这种方式.
@Greg 答案的 swift 4 版本
UIView.transition(with: self.view, duration: 0.5, options: .transitionFlipFromLeft, animations: {
self.view.addSubview(self.vc.view)
}, completion: nil)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8495 次 |
| 最近记录: |