在 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 中拖动一个 UIView

在 UIScrollView (Swift) 中使用动态内容调整 UiView 高度

是否可以在 UIView 而不是 UIViewController 中使用 UIScrollView?

如何在 iOS 中取消 UIScrollView 在三角形 UIView 外滚动?