根据其 ViewcController 查看中心 - iOS Swift
View center according to its ViewcController - iOS Swift
我在另一个 UIView
里面有一个 UIView
。
根据 ViewController
View
而不是其 superView
设置内部 UIView
位置的最佳方法是什么?
func answerViewTapAction(sender: UITapGestureRecognizer) {
if let myViewIndex = returnActiveView() {
var choosenView: numberView!
print("view \(myViewIndex) will move to slot \(sender.view!.tag)")
for noView in noViews {
if noView.tag == myViewIndex {
choosenView = noView
}
}
//print(choosenView.center)
print(sender.view!.center)
UIView.animateWithDuration(0.7, animations: {
choosenView.center = CGPoint(
x: CGRectGetMidX(sender.view!.frame),
y: CGRectGetMidY(sender.view!.frame))
})
}else {
print("view will not move")
}
}
我想根据ViewController
访问我的sender.view
中心,而不是根据它的superView
。
您需要 UIView
的 convertPoint
方法。特别是 convertPoint(_ point: CGPoint, toView view: UIView?) -> CGPoint
。 Documentation here.
如果您需要示例,请告诉我。您只需要调用它一次并传递 toView
您想要弄清楚的视图的超级视图。
编辑:我们开始举例!
让我们考虑三个视图:A、B 和 C。还有一个奇特的 ASCII 艺术。
(0, 0, 20, 20)
+----------------------------------+
| A |
| (5, 5, 10, 10) |
| +--------------------+ |
| |B | |
| | (5, 5, 5, 5) | |
| | +-----------+ | |
| | |C | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | +-----------+ | |
| | | |
| | | |
| +--------------------+ |
| |
| |
| |
+----------------------------------+
视图 A 是 ViewController.view
,它位于 X: 0,Y: 0,宽度:20,高度:20。
视图 B 是 A 的子视图,根据视图 A,它位于 X:5,Y:5,宽度:10,高度:10。
视图 C 是 B 的子视图,根据视图 B,它位于 X:5,Y:5,宽度:5,高度:5。
但是根据视图 A,C 实际上位于 X:10,Y:10,因为视图 B 位于 5、5。
因此,我们需要根据视图 A 找出视图 C 的来源是 convertPoint
.
方法:
let originOfC = B.convertPoint(C.frame.origin, toView: A)
就是这样。您可以使用 fiew 循环以编程方式执行相同的操作,但上面的示例更清晰一些。现在我已经给你举了一个起源的例子。要获得中心,您可以使用 view.center
属性 或将 C 宽度的一半添加到 originOfC
的 x 坐标,并将高度的一半添加到 originOfC
的 y 坐标。
我在另一个 UIView
里面有一个 UIView
。
根据 ViewController
View
而不是其 superView
设置内部 UIView
位置的最佳方法是什么?
func answerViewTapAction(sender: UITapGestureRecognizer) {
if let myViewIndex = returnActiveView() {
var choosenView: numberView!
print("view \(myViewIndex) will move to slot \(sender.view!.tag)")
for noView in noViews {
if noView.tag == myViewIndex {
choosenView = noView
}
}
//print(choosenView.center)
print(sender.view!.center)
UIView.animateWithDuration(0.7, animations: {
choosenView.center = CGPoint(
x: CGRectGetMidX(sender.view!.frame),
y: CGRectGetMidY(sender.view!.frame))
})
}else {
print("view will not move")
}
}
我想根据ViewController
访问我的sender.view
中心,而不是根据它的superView
。
您需要 UIView
的 convertPoint
方法。特别是 convertPoint(_ point: CGPoint, toView view: UIView?) -> CGPoint
。 Documentation here.
如果您需要示例,请告诉我。您只需要调用它一次并传递 toView
您想要弄清楚的视图的超级视图。
编辑:我们开始举例!
让我们考虑三个视图:A、B 和 C。还有一个奇特的 ASCII 艺术。
(0, 0, 20, 20)
+----------------------------------+
| A |
| (5, 5, 10, 10) |
| +--------------------+ |
| |B | |
| | (5, 5, 5, 5) | |
| | +-----------+ | |
| | |C | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | +-----------+ | |
| | | |
| | | |
| +--------------------+ |
| |
| |
| |
+----------------------------------+
视图 A 是 ViewController.view
,它位于 X: 0,Y: 0,宽度:20,高度:20。
视图 B 是 A 的子视图,根据视图 A,它位于 X:5,Y:5,宽度:10,高度:10。
视图 C 是 B 的子视图,根据视图 B,它位于 X:5,Y:5,宽度:5,高度:5。
但是根据视图 A,C 实际上位于 X:10,Y:10,因为视图 B 位于 5、5。
因此,我们需要根据视图 A 找出视图 C 的来源是 convertPoint
.
方法:
let originOfC = B.convertPoint(C.frame.origin, toView: A)
就是这样。您可以使用 fiew 循环以编程方式执行相同的操作,但上面的示例更清晰一些。现在我已经给你举了一个起源的例子。要获得中心,您可以使用 view.center
属性 或将 C 宽度的一半添加到 originOfC
的 x 坐标,并将高度的一半添加到 originOfC
的 y 坐标。