我希望实现一个简单的动画,从下到上填充。为此我做了:
let waterView = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 568))
override func viewDidLoad() {
super.viewDidLoad()
print(waterView.layer.position.y)
self.waterView.backgroundColor = UIColor(red: 50/255, green: 145/255, blue: 248/255, alpha: 1)
self.view.addSubview(self.waterView)
}
override func viewDidAppear(animated: Bool) {
UIView.animateWithDuration(3.0, animations: {
print(self.waterView.layer.position.y)
})
}
当我打印它的position.y
值时,它会返回 284 !我不懂为什么???为什么它不会让我 0 ?
有任何逻辑解释吗?
答案 0 :(得分:3)
284是有效值。
原因:您正在设置
x = 0
y = 0
widht = UIScreen.mainScreen()。bounds.width(假设320)
身高= 568
所以,中心将是中心(x,y)=((320-0)/ 2,(568-0)/ 2)=(160,284)
您正在尝试打印 waterView.center.y
,这就是输出 284
的原因。
尝试打印 waterView.frame.origin.y
,它会打印 0
。
答案 1 :(得分:1)
这是因为你正在打印self.waterView.center.y
并计算你给视图568的高度,那么它的中心是568/2 = 284
要打印视图“waterView”的y坐标,请使用:print(waterView.frame.origin.y)
答案 2 :(得分:0)
如果您想要一个简单的答案,position
视图的图层,不完全是,但默认情况下表示父坐标系中的视图中心。例如:
let v = UIView(frame: CGRect(x: 100, y: 100, width: 300, height: 300))
print(v.layer.position.y)
将打印250
。如果您将0.0
和origin.y
设置为height
,则会打印0.0
,否则position.y
的公式为position.y = origin.y + height / 2
如果您需要来源,则需要view.origin
或view.layer.origin
。如果你想将位置移动到(0,0),你需要修改图层的锚点,但为什么你要做那个简单的任务。
顺便说一句,不要使用CGRectMake()
,使用初始值设定项,如我的示例所示。