只有最后一个图像是从scrollview中的url加载的

时间:2018-04-21 08:59:01

标签: objective-c uiscrollview uiimageview sdwebimage uiscrollviewdelegate

在我的iOS应用程序中,我有很多视图和图像,标签是该视图的子视图。视图。我的问题是从网址或远程服务器加载图像时,最后一个图像是从网址加载的。其他图像加载占位符。尝试了很多方法,但无法解决它。我的代码和屏幕截图在下面提供

catScrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 10, self.view.frame.size.width,300)];
catScrollView.contentSize = CGSizeMake(([popularCategoryArray count] * 90)/1.8 + 10, catScrollView.frame.size.height);
[_parentScrollView addSubview:catScrollView];
catScrollView.backgroundColor=UIColorFromRGB(0xE8F7FE);
catScrollView.userInteractionEnabled=YES;
catScrollView.scrollEnabled=YES;
catScrollView.delegate=self;


for(int i =0;i<[popularCategoryArray count];i++)
{
    Category* category=[popularCategoryArray objectAtIndex:i];
     UIView *catView = [[UIView alloc] init];

    if(i>=[popularCategoryArray count]/2+1)
    {

        catView.frame = CGRectMake(10 + y * 100, 4*10+90+10, 90, 120);



        y++;
    }
    else
    {
        catView.frame = CGRectMake(10 + x * 100, 10, 90, 120);

        x=i;


    }
    imageCat=[[UIImageView alloc]initWithFrame:CGRectMake(10, 0, 70, 90)];
    imageCat.backgroundColor=[UIColor clearColor];

    [imageCat sd_setImageWithURL:[NSURL URLWithString:category.ImageURL]
                placeholderImage:[UIImage imageNamed:@"wish_list"]];


    [catView addSubview:imageCat];




    UILabel *labelCat=[[UILabel alloc]initWithFrame:CGRectMake(0, 95, catView.frame.size.width, 25)];
    labelCat.backgroundColor=[UIColor clearColor];
    labelCat.text=category.BngTitle;
    labelCat.textAlignment=NSTextAlignmentCenter;
    labelCat.font=[UIFont fontWithName:@"HelveticaNeue-Thin" size:12.0];
    [catView addSubview:labelCat];


    catView.backgroundColor=[UIColor clearColor];



    [catScrollView addSubview:catView];



}

截图 enter image description here

1 个答案:

答案 0 :(得分:0)

正在发生的事情是,在UIView+Webcache.m的{​​{1}}方法中,每次运行循环时都会执行以下代码。

sd_internalSetImageWithURL

NSString *validOperationKey = operationKey ?: NSStringFromClass([self class]); [self sd_cancelImageLoadOperationWithKey:validOperationKey]; 总是一样的,因为在你的默认调用中没有设置它,因此它被设置为nil,而当它为nill时它只是类名。 SDWebImage有一个非常积极的政策,就是取消以前的所有请求。

有些人认为它只对同一网址的多个请求执行此操作,但此代码在URL上不会发生变化,因此可能是错误。您最好的选择可能是调用operationKey方法并设置自己的sd_internalSetImageWithURL(带有数字的内容,以便它们全部不同)。