iOS:根据“查看”位置动态更改UILabel对齐

时间:2014-11-14 09:57:48

标签: ios swift uiview uilabel

我有一个包含较小UIView的UIView。在较小的UIView里面是2个标签,一个在另一个之上。

这些标签的宽度取决于用户输入的内容。然后相应调整较小的UIView。

用户可以使用Pan Gesture在屏幕上移动较小的UIView。

我正在努力研究如何根据主视图中较小的UIView位置来动态更改UILabel对齐。

例如,我的主要UIView是1000像素,较小的UIView是400像素。如果将它拖到中间,我该如何计算?

我想我应该减去1000中的400,这将给我600像素,然后将其分成三分之一(左对齐,中心对齐和右对齐),最后检查较小的UIView的中心是否在一个这些乐队,但我似乎无法让它发挥作用。

有人可以就如何设置提供一些建议吗?我需要它动态,因为用户可以使用iPhone / iPad /人像/风景等。

希望这很清楚。

2 个答案:

答案 0 :(得分:0)

当用户触摸屏幕时,如果他们正在触摸动态标签,请检查动态标签center.x位置,并查看其在超级视图中的哪个扇区(第二个视图)。将第二个视图的宽度分成3个部分。如果您的动态标签centre.x位于第一部分,请将标签文本NSTextAlignment更改为Left,第二个 - NSTextAlignment更改为Center,第三个 - NSTextAlignment更改为Right

答案 1 :(得分:0)

我最初尝试使用Valentin的解决方案,但标签会在对齐之前离开屏幕。

原来我必须考虑视图的大小,然后将剩余空间分成3.显然,如果标签很长,那么中间的公差很小,如果标签很小,那么他们必须移动它进一步

这是handlePan手势中的粗略代码:

println("C : \(viewTop.center.x)")
let viewWidth:CGFloat = viewTop.frame.size.width
let marginL:CGFloat = (viewWidth/2) + ((self.frame.size.width - viewWidth) / 3)
println("L : \(marginL)")
let marginR:CGFloat = (viewWidth/2) + (((self.frame.size.width - viewWidth) / 3) * 2)
println("R : \(marginR)")
if viewTop.center.x < marginL {
    println("leftAlign")
} else if (viewTop.center.x >= marginL) && (viewTop.center.x <= marginR) {
    println("centerAlign")
} else {
    println("rightAlign")
}
相关问题