在很多子视图中搜索类。有没有更好的办法?

时间:2013-06-03 08:39:00

标签: ios performance subview listings

我在scrollView的子视图中添加图片,但仅限于某个自定义类AsyncImageView。这需要一些时间,因为有很多子视图,应用程序已经失去了它的平滑滚动。

NSArray *subviewsArray = [[NSArray alloc] initWithArray:[scrollView subviews]];
        for (int j = 0; j < [subviewsArray count]; j++) {
            for (AsyncImageView *checkView in [[subviewsArray objectAtIndex:j] subviews]) {
                if ([checkView isKindOfClass:[AsyncImageView class]]) {
                       [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:checkView];

                        NSString* urlTextEscaped = [[imageInfo objectAtIndex:0] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

                        NSURL *URL = [NSURL URLWithString:urlTextEscaped];
                        if (URL)
                        {
                            checkView.imageURL = URL;
                        }
                        else
                        {
                            NSURL *defaultURL = [NSURL URLWithString:@"http://www.domain.com/user_avatar_default.jpg"];
                            checkView.imageURL = defaultURL;

                        }
                    }
                 }
               }

有没有更好的方法来访问我需要的视图并添加图像?其他一些我没有想到的逻辑。

这是scrollView的层次结构

                                           scrollView
                                                |
                                                |
                                           MaseterView
                                                |
                                                |
                         AsyncImageView  -   TitleView - OtherImageView

2 个答案:

答案 0 :(得分:0)

在迭代之前,您不需要使用滚动视图的子视图创建新数组。您有2个常规选项:

一个。仍然循环,但不是由你完成。仅在您具有单个图像视图或具有要单独更新的多个图像视图时才有意义。

设置图片视图的标记,然后使用[scrollView viewWithTag:...];

B中。如果您有多个图像视图,并且想要同时更新所有图像视图。

保持一个可变数组属性,并在创建它时将图像视图添加到它。

要考虑的其他事项:

  1. 您是否需要更新所有图像视图 - 它们是否全部显示?
  2. 您是否可以观察滚动视图的滚动并仅在图像显示时启动图像加载(并在滚动显示时取消不完整的加载)?

答案 1 :(得分:0)

您可以使用

UIView *v = [self.containerView viewWithTag:uniqueTagvalue];

为您需要的视图设置唯一标记值并获取它