如何根据另一个视图的可见部分居中UIView?

时间:2015-07-24 11:39:27

标签: ios swift uiview uiscrollview

我在Swift的iOS应用程序上工作,其中包含一个UIScrollView。滚动视图是"无限",根据需要在两侧自动生成新元素(子类UIViews)。有关Apple I的示例,请参阅here

视图层次结构:

UIScrollView
|- viewContainer (UIView containing all the elements in the scrollview)
   |- A 
   |  |- UILabel(hi)
   |
   |- B
   |  |- UILabel(hello)
   |
   |- C
   |  |- UILabel(bonjour)
   |
   |- D
   |  |- UILabel(ciao)
   |
   |- E
   |  |- UILabel(greetings)

子视图A-E每个都包含带有一些文本的UILabel。当滚动视图水平移动时,会自动创建新的子视图(F,G等)。

我试图根据可见部分(用户实际可以看到的部分)对UILabels进行居中。

Explanation

见上图:

  • (1)目前,用户可以看到元素A,B和C。
  • (1)元素B完全可见,它的标签正好是中心。
  • (1)但是,元素C不是完全可见的,因此它的标签向左移动,以尽可能多地显示文本。
  • (2)当用户向左滚动滚动视图时,新元素变为可见。
  • (2)随着元素C的大部分变得更加明显,显示了更多的文本。只要整个元素可见,文本就会自动居中。
  • (3?)如果用户进一步滚动,并且元素C将开始从左侧的屏幕上掉落,则标签应移动到右侧,以便尽可能长时间保持可见。

所有这些都会在滚动过程中不断发生。

现在提问: 如何使标签以上述方式运行?到目前为止,我一直在尝试覆盖元素(A-E)中的layoutSubViews。但是,我甚至无法提取用户可见的元素部分。 layer.visibleRect似乎给了我整个矩形,甚至是当前屏幕外的部分。

任何帮助或指示都表示赞赏!

0 个答案:

没有答案