在 UIScrollview 中获取 UIView 的子视图
Posted
技术标签:
【中文标题】在 UIScrollview 中获取 UIView 的子视图【英文标题】:Getting subviews of a UIView within a UIScrollview 【发布时间】:2013-10-12 23:39:54 【问题描述】:我有一个 UIScrollView,其中包含 UIViews,并且在这些 UIViews 中是 UIImageViews。我正在尝试访问UIImageViews
。
为了概念验证,我有一个带有 UIView 的滚动视图,其中包含一个 UIImageView,其标签都设置为 0。
代码:
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
UIView *currentView = (UIView *)[scrollView viewWithTag:0];
UIImageView *currentImageView = (UIImageView *)[currentView viewWithTag:0];
[self bobbleView:currentImageView];
然后我试图连续上下摆动 UIImageView(这本身就是另一回事,我只能让它摆动一次,所以我只是留下了那个代码),但发生的是 整个 UIScrollView 及其子视图都在晃动。
那个代码:
-(void)bobbleView:(UIView *)viewIn
viewIn.transform = CGAffineTransformMakeScale(1.2, 1.2);
[UIView animateWithDuration:1 animations:^
viewIn.transform = CGAffineTransformMakeScale(1.0, 1.0);
];
有什么想法吗?
【问题讨论】:
为标签的值选择 0 可能是不明智的,因为这是任何新创建的 UIView 的默认值。此外,viewWithTag
会遍历子层次结构(递归地,“向下”),这意味着如果您对标签值不小心,您可能会返回一个您不想获得的视图。
【参考方案1】:
viewWithTag
文档说:
Discussion
This method searches the _current view_ and all of its subviews for the specified view.
(强调我的)
你看到的是:
(UIImageView *)[currentView viewWithTag:0]
返回
currentView
HTH
【讨论】:
【参考方案2】:是的.. 为视图分配唯一的标签并且彼此不同。我敢打赌,如果您在调用 bobbleView 时设置断点,您的 UIImageView 对象将是您的 UiScrollView 而不是 imageview 或 UiView...使用简单的唯一标签,例如 100X fir UIViews 和 200X for imageview
【讨论】:
你叫它......回想起来,0 可能是其历史上标签名称的最佳最差选择。以上是关于在 UIScrollview 中获取 UIView 的子视图的主要内容,如果未能解决你的问题,请参考以下文章
在 UIScrollview 中的 UIView 上的屏幕中的框架
获取 UIScrollView contentView 的高度
在 UIScrollView (Swift) 中使用动态内容调整 UiView 高度