在加载时无法正常工作的情况下移动视图

时间:2017-03-03 16:58:49

标签: ios uiview uiviewcontroller

我的应用程序底部有一个音频播放器视图。一旦完成播放列表中的最后一项,我希望此音频播放器视图在屏幕底部以幻灯片动画隐藏。在应用程序开始时,我需要隐藏此audioplayer视图,直到用户点击要播放的音频文件为止。

我遇到的问题是音频层视图在VC加载开始时不会移动到屏幕外。

奇怪的是,我有一个类似的功能,可以正确移动音频层视图,一切正常。这似乎只是加载时的一个问题 - 最初隐藏了音频层视图。

代码:

override func viewDidLoad(){
    super.viewDidLoad()

    ...

    footerView.backgroundColor = UIColor.clear 
    footerView.superview?.backgroundColor = UIColor.clear  
    footerView.playButton.tintColor = UIColor.red
    footerView.playButton.borderColor = UIColor.red

    initializeFooterView()

    ...
}

//print statements called @viewDidLoad, but not the translate function
func initializeFooterView(){

    print("initFooterView", String(describing: footerView.superview?.frame.origin.y))

    print(String(describing: footerView.frame.size.height))

    footerView.superview?.frame.origin.y += footerView.frame.size.height

    print("initFooterView", String(describing: footerView.superview?.frame.origin.y))

}

//Working function to show/hide audioplayer view... works during runtime
func hideShowFooterView(){

    let animationOptions: UIViewAnimationOptions = .curveEaseOut
    let keyframeAnimationOptions: UIViewKeyframeAnimationOptions = UIViewKeyframeAnimationOptions(rawValue: animationOptions.rawValue)

    if let footerView = self.footerView{

        if (footerView.superview?.isHidden)!{

            footerView.superview?.isHidden = false
            UIView.animateKeyframes(withDuration: 0.3, delay: 0.0, options: keyframeAnimationOptions , animations: {() in
                footerView.superview?.frame.origin.y -= (footerView.superview?.frame.size.height)!

            }, completion: nil)

        }else{

            UIView.animateKeyframes(withDuration: 0.3, delay: 0.0, options: keyframeAnimationOptions , animations: {() in
                footerView.superview?.frame.origin.y += (footerView.superview?.frame.size.height)!

            }, completion: { (completed) in

                if completed{
                    footerView.superview?.isHidden = true

                }
            })
        }
    }
}

清理从initializeFooterView()调用的print语句,该语句在viewDidLoad()中移动audioPlayer视图:

initFooterView() - footerView.superview?.frame.origin.y: 0.0
initFooterView() - footerView.frame.size.height = 75.0
initFooterView() - footerView.superview?.frame.origin.y: 75

如果您想知道为什么我在initializeFooterView()中通过footerView.frame.size.height翻译y上的视图,而是通过footerView翻译视图。 superview .frame.size。 hideShowFooterView()中的高度,因为viewDidLoad的superview的高度是763,由于某种原因,而footerView的帧的高度是75(正确的数量)。它在运行时正确转换,所以我使用footerView的superview.frame。

我的观点的层次结构:

FooterViewController hierarchy

容器视图设置:(footerviewcontroller是从容器视图中进行的...不确定这是否具有影响力)

Footerviewcontroller belongs to a containerview

我感觉在故事板中定义我的footerview,然后尝试在viewDidLoad()期间以编程方式更改它时存在冲突。我不想以编程方式定义关于footerView的所有内容,但是:/

1 个答案:

答案 0 :(得分:0)

看到你正在做的事情有点困难......你是否在footerView设置约束但是明确设置了框架?如果是这样,那可能是问题的一部分。

但是,由于您说它在hideShowFooterView()中工作正常,请尝试将initializeFooterView()viewDidLoad()移至viewWillAppear()