为什么position.y会给我错误的价值?

时间:2016-01-18 11:42:44

标签: ios swift animation

我希望实现一个简单的动画,从下到上填充。为此我做了:

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

有任何逻辑解释吗?

3 个答案:

答案 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.0origin.y设置为height,则会打印0.0,否则position.y的公式为position.y = origin.y + height / 2

如果您需要来源,则需要view.originview.layer.origin。如果你想将位置移动到(0,0),你需要修改图层的锚点,但为什么你要做那个简单的任务。

顺便说一句,不要使用CGRectMake(),使用初始值设定项,如我的示例所示。