我还是swift的新手,我想做的是在父视图的下部放置一个容器视图(包含的一部分首先在视图之外)。然后,当用户触摸按钮时,容器被动画化并向上移动以便显示所有内容。
动画效果很好,但对我来说定位很困难。以下是我到目前为止所做的事情:
@IBOutlet var testView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
testView.frame.size = CGSize(width: view.bounds.width, height: 400)
testView.layer.position = CGPoint(x: view.frame.midX, y: view.frame.maxY + 90)
view.addSubview(testView)
}
所以我将容器视图设置为超视图的宽度,固定大小为400.我尝试将其定位在屏幕底部的中心位置,以便显示部分内容并且部分位于屏幕外部。
这是动画部分:
@IBAction func showMoreButton(_ sender: UIButton) {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: {self.testView.transform = CGAffineTransform(translationX: 0, y: -190)
}, completion: nil)
所以在这里我只是将容器190向上移动。在容器的底部是一个关闭按钮,未显示(仍在超视图外)。
我很确定问题是我如何在view.frame.maxY + 90(显示90个像素)的第一手位置相对于它的高度。当我减小视图高度时,容器原始位置会越来越向下移动,显然在动画完成后会显示所有内容,但它远远不够。 由于UIKit的原点位于0,0的左上角,我现在已经知道如何将视图定位在超视图的底部,以便显示大约90个像素,并且当动画完成时,所有视图都被移动现在显示在超级视图中。
我怎么能这样做?
答案 0 :(得分:0)
据我所知,你想要一个只有顶部可见铅按钮的视图。点击按钮后,视图应向上滑动并显示其完整内容。
您只需要操纵内容视图框的Y偏移。
let contentHeight = CGFloat(250) // Full content height
let contentOffset = CGFloat(40) // Offset for the lead button
func displayBottomView(offset: CGFloat) {
redContentView.frame = CGRect(x: 0, y: view.frame.size.height-offset, width: view.frame.size.width, height: contentHeight)
}
这是配置视图控制器的方法。
override func viewDidLoad() {
super.viewDidLoad()
// Set the initial position to show only a button
displayBottomView(offset: contentOffset)
}
@IBAction func redButtonDidTap(_ sender: UIButton) {
UIView.animate(withDuration: 0.5) {
// Animate displaying of the full content
self.displayBottomView(offset: self.contentHeight)
}
}
这个可以工作,但它不是布局操作的好方法。我真的建议你切换到自动布局方法。