UIScrollVIew 中的静态对象
Posted
技术标签:
【中文标题】UIScrollVIew 中的静态对象【英文标题】:Static Object in UIScrollVIew 【发布时间】:2012-05-26 16:04:35 【问题描述】:我的 ios 应用程序的一部分涉及 PDF 阅读器。为了显示用户所在的页面,我创建了一个 UILabel 并将其放置在 PDFScrollView(UIScrollView 的子类)中。这个标签必须在滚动视图中,因为每当我更改页面时,滚动视图都会向标签的 IBOutlet 发送一条消息,告诉它更改其文本。
但是,每当我在 UIScrollView 中放大(滚动“缩小”)时,标签也会缩小(它的大小不会改变,但会向外移动)。这会导致它最终移出屏幕。 如何更改它以使 UILabel 在 UIScrollView 中保持静态且不动?
【问题讨论】:
【参考方案1】:不要将UIScrollView
子类化,而是将UIView
子类化并将UIScrollView
和UIView
作为子视图,而UIView
不是滚动视图的子视图。将您的标签等放在UIView
中,并让父视图管理滚动视图和其他视图之间的通信。
UIView + UIScrollView (your PDFScrollView)
+---------------------------------------+
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- UIView (not a subview) -
- +----------------------+ -
- - Label(s) - -
- - - -
- +----------------------+ -
+---------------------------------------+
【讨论】:
我可以用 UIView 中的所有标签做 ViewController->UIView->UIScrollView 吗? 我添加了一个视觉效果来解释我的意思。 那么UILabel应该是ScrollView的子视图的子视图? 不,UILabel
应该是“浮动”在UIScrollView
上的UIView
的子视图(不是子视图,否则它也会滚动)。这两个视图是一大UIView
的子视图。
你的意思是ViewController的默认UIView?【参考方案2】:
在你的UIScrollViewDelegate
中,实现方法:
- (void)scrollViewDidZoom:(UIScrollView*)scrollView
uiLabel.transform = CGAffineTransformMakeScale(scaleX, scaleY);
uiLabel.center = CGPointMake(x, y);
正确计算 scaleX、scaleY、X 和 Y 的位置。
您可以尝试将1.0/scrollView.zoomScale
用于scaleX
和scaleY
。
在Ray Wenderlich 站点上有一个很好的关于使用UIScrollView
的视图层次结构的教程。
【讨论】:
这并不能解决问题。 仍然有编译问题或者只是 UILabel 一直在缩放?尝试对 scaleX 和 scaleY 使用 1.0。 UILabel 不断缩放。我为每个尝试了 1.0,但没有帮助。 不,那也不行以上是关于UIScrollVIew 中的静态对象的主要内容,如果未能解决你的问题,请参考以下文章
自动滚动 UIScrollView 以适应原生 iOS Mail.app 中的内容
UiScrollView 高度不正确(没有 AutoConstraint)
缩放和重绘 UIScrollView 内容后设置 contentOffset