我想做一个简单的动画,其中徽标从尺寸为1的屏幕上的A点移动到屏幕上尺寸为2的B点
我找到了
self.logoOutlet.frame = CGRect(x: x, y: y, width: 115, height: 115)
如何获得它,无论手机的大小是多少,x都会居中?
答案 0 :(得分:1)
您要么必须进行数学计算,要根据x
的{{1}}的范围来计算superview
的值,要么使用AutoLayout并使用中心X约束(这是可能是更好的选择。)
您可以阅读文档中的详细信息:Auto Layout Guide,或使用您可以通过Google搜索找到的有关自动布局的众多教程之一。
答案 1 :(得分:0)
通过两个不同答案的组合,我找到了一个有效的解决方案
self.logoOutlet.frame = CGRect(x: self.view.frame.midX, y: 26, width: 115, height: 115)
self.logoOutlet.center.x = self.view.center.x
答案 2 :(得分:0)
以下是使用自动布局的示例:
@IBAction func animateLogo(sender: UIButton) {
let newView = UIView()
newView.backgroundColor = .redColor()
newView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(newView)
let topConstraint = NSLayoutConstraint(item: newView, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1.0, constant: 500.0)
let centerXConstraint = NSLayoutConstraint(item: newView, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1.0, constant: 0.0)
let widthConstraint = NSLayoutConstraint(item: newView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 200)
let heightConstraint = NSLayoutConstraint(item: newView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 200)
NSLayoutConstraint.activateConstraints([topConstraint, centerXConstraint, widthConstraint, heightConstraint])
self.view.layoutIfNeeded()
// Now change the constraint for the second point
widthConstraint.constant = 50
heightConstraint.constant = 50
topConstraint.constant = 50
// Animate the move over 5 seconds
UIView.animateWithDuration(5.0) {
self.view.layoutIfNeeded()
}
}