0

我在 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
4

2 回答 2

0

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

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

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

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

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

其他需要考虑的事情:

  1. 您是否需要更新所有图像视图 - 它们都在展示中吗?
  2. 您能否观察滚动视图的滚动,并且仅在图像显示时才开始加载图像(并在滚动显示时取消不完整的加载)?
于 2013-06-03T08:53:07.653 回答
0

您可以使用

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

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

于 2013-06-03T08:53:25.017 回答