我的应用程序底部有一个音频播放器视图。一旦完成播放列表中的最后一项,我希望此音频播放器视图在屏幕底部以幻灯片动画隐藏。在应用程序开始时,我需要隐藏此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是从容器视图中进行的...不确定这是否具有影响力)
我感觉在故事板中定义我的footerview,然后尝试在viewDidLoad()期间以编程方式更改它时存在冲突。我不想以编程方式定义关于footerView的所有内容,但是:/
答案 0 :(得分:0)
看到你正在做的事情有点困难......你是否在footerView
设置约束但是明确设置了框架?如果是这样,那可能是问题的一部分。
但是,由于您说它在hideShowFooterView()
中工作正常,请尝试将initializeFooterView()
从viewDidLoad()
移至viewWillAppear()