双容器视图动画iOS

时间:2017-12-08 17:39:00

标签: ios cocoa-touch core-animation

所以我有一个ViewController,它有两个容器视图。最重要的是主要内容。底部是一个隐藏/显示某些事件的横幅。

底部的位置使其位于标签栏下方,直到事件发生。

当事件发生时,主视图的框架缩小,并且横幅的框架被重新定位,使得它看起来像是滑动了#39;进入视野并变得可用。

我遇到的问题是,除非我在故事板中调整主视图的大小(这不是我想要的),否则我在代码中执行的任何调整都会显示横幅,但横幅不响应触摸。 (在故事板中调整大小,它确实会做出回应。)似乎在它面前还有一些其他视图可以拦截触摸,但是什么,以及如何解决它?

主视图控制器:

func hideBanner() {
    bannerViewController?.toggleBannerDisplay(show: false)
    contentTableViewController?.toggleBannerDisplay(show: false)
}
func showBanner() {
    bannerViewController?.toggleBannerDisplay(show: true)
    contentTableViewController?.toggleBannerDisplay(show: true)
}

内容表视图控制器:

func toggleBannerDisplay(show: Bool) {
    let tableView = self.view as! UITableView

    UIView.animate(withDuration: 0.5, animations: {
        if self.cancelApplyShowing == false && show == true {
            let frame = tableView.frame
            let newFrame = CGRect(x:frame.origin.x , y: frame.origin.y, width: frame.size.width, height: frame.size.height - 48)
            tableView.contentSize = newFrame.size
            tableView.frame = newFrame
            self.cancelApplyShowing = true
        } else if self.cancelApplyShowing == true && show == false {
            let frame = tableView.frame
            let newFrame = CGRect(x:frame.origin.x , y: frame.origin.y, width: frame.size.width, height: frame.size.height + 48)
            tableView.contentSize = newFrame.size
            tableView.frame = newFrame
            self.cancelApplyShowing = false
        }
    })
}

横幅:

func toggleBannerDisplay(show: Bool) {
    UIView.animate(withDuration: 0.5, animations: {
        if self.cancelApplyShowing == false && show == true {
            let frame = self.view.frame
            let newFrame = CGRect(x: frame.origin.x, y: frame.origin.y - 48, width: frame.size.width, height: frame.size.height)
            self.view.frame = newFrame
            self.cancelApplyShowing = true
        } else if self.cancelApplyShowing == true && show == false {
            self.view.frame.origin.y += 48
            self.cancelApplyShowing = false
        }
    })
}

出于某种原因,如果我调整主视图的大小,隐藏视图会变得敏感(当然是在动画之后)。

Storyboard Screenshot

Vimeo视频:https://vimeo.com/246496442

1 个答案:

答案 0 :(得分:0)

我试图为嵌入式视图控制器的视图设置动画,它确实将所有内容都放到了适当的位置,但容器视图仍然隐藏在顶部。

为容器视图设置了动画,现在一切正常。