NSMutableArray为图像创建问题

时间:2015-09-17 12:23:43

标签: ios objective-c arrays dictionary nsmutablearray

我有一个包含字典的数组。每个字典都包含UIImage&字符串值。

但是当我尝试使用

删除对象时

[arr removeObjectAtIndex:button.tag];

然后它只是减少计数但不删除图像(对象)。 因此,尝试删除时,我的图像会重叠。

当我尝试在数组中添加对象时,它也会产生问题

[arr insertObject:dict atIndex:0];

所以,我用过    [_postObj.arr_images addObject:dict];代替 insertObject

帮我解决这个问题

3 个答案:

答案 0 :(得分:2)

对象使用引用计数,NSMutableArrayUIImageView保留 UIImage对象。

这意味着从数组中删除它不会自动将其从UIImageView中删除,您必须明确地将其从两个中删除:

[arr removeObjectAtIndex:button.tag];
_imageView.image = nil;

答案 1 :(得分:0)

问题在于UIImageView的框架设置。请尝试使用以下代码(未经我自己测试),看看这是否能解决您的问题。基本上,我正在根据之前图像的宽度调整图像的X位置。

CGFloat imageXM = 5.0;
CGFloat imageXPos = 0;

for (UIImage *image in arr_images) {
    CGRect imageFrame = CGRectMake(imageXPos + imageXM, 0.0, image.size.width, image.size.height);
    imageXPos = imageXPos + image.size.width;

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:imageFrame];

    imageView.contentMode = UIViewContentModeScaleAspectFit;
    imageView.image = image;
    [scl addSubview:imageView];
}

答案 2 :(得分:0)

与代码一样

[picker dismissViewControllerAnimated:YES completion:^{
        [arr_images insertObject:chosenImage atIndex:0];
        [self scrollImages_Setup2];

    }];

[arr_images insertObject:chosenImage atIndex:0];这意味着您只需要在滚动视图上显示一个图像。那你为什么要循环:

-(void)scrollImages_Setup2
{    
    for (int k=0; k<arr_images.count; k++) {

        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake((CGRectGetWidth(scl.frame) * k) + CGRectGetWidth(scl.frame), 0, CGRectGetWidth(scl.frame), CGRectGetHeight(scl.frame))];

        imageView.contentMode = UIViewContentModeScaleAspectFit;
        imageView.image=[arr_images objectAtIndex:k] ;
        [scl addSubview:imageView];
    }

    scl.contentSize = CGSizeMake((CGRectGetWidth(scl.frame) * arr_images.count)+CGRectGetWidth(scl.frame), CGRectGetHeight(scl.frame));

}

您只需将代码用于显示图像即可。您不需要滚动视图以仅显示一个图像。我想你不清楚你想要什么。

关于因循环而覆盖图像的问题。因此,当您显示单个图像时,请删除循环。请删除scrollview contentSize,因为当您在数组中添加多个图像时,image_array会增加,并且大小宽度会很大。所以也要删除arr_images.count。