我有一个包含字典的数组。每个字典都包含UIImage&字符串值。
但是当我尝试使用
删除对象时 [arr removeObjectAtIndex:button.tag];
然后它只是减少计数但不删除图像(对象)。 因此,尝试删除时,我的图像会重叠。
当我尝试在数组中添加对象时,它也会产生问题
[arr insertObject:dict atIndex:0];
所以,我用过
[_postObj.arr_images addObject:dict];
代替 insertObject
帮我解决这个问题
答案 0 :(得分:2)
对象使用引用计数,NSMutableArray
和UIImageView
将保留 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。