Scrollview图像会产生问题

时间:2015-09-18 06:46:47

标签: ios objective-c iphone uiscrollview uiimageview

我在我的应用程序中使用相机选择图像&尝试在水平滚动视图中显示。

但图片重叠

我的代码

-(IBAction)act_photo:(id)sender
{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    //picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
     [self presentViewController:picker animated:YES completion:NULL];
}

#pragma mark - Image Picker via Camera
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *chosenImage = info[UIImagePickerControllerOriginalImage];

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

    }];

}

-(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));

}

问题

IMAGE1

enter image description here

图片2

enter image description here

如上所示,我首先拍摄了Landscape Image2&amp;然后我被拍成了肖像图像1。

但如您所见,图像1具有Image2的背景。

我认为这是因为scrollview出现了问题?

Possiblity 2(主要是) Scrollview保留了Imageview的强引用,即使它从数组中删除

让我知道如何解决这个问题?

帮我解决这个问题

感谢

2 个答案:

答案 0 :(得分:0)

您需要在循环中设置Y值,您的图像Y值随时都相同,

答案 1 :(得分:0)

每次拍摄新图像时,您的完成处理程序会将新图像作为第一个元素放入数组中,然后调用[self scrollImages_Setup2];,在其中迭代数组中的所有元素并将其作为新子视图添加到你的滚动视图。

当您拍摄第一张图像(Image1)时,它会被添加到数组中,然后作为子视图添加到您的滚动视图中。拍摄第二张图像(Image2)时,它会作为第一个元素添加到数组中。那么数组中有两个元素(Image2和Image1),它们都作为子视图添加到scrollview中。但是Image1已经被添加到scrollview中,因此导致了你的问题。

问题的解决方案可以是始终只添加新图像并使用数组中的元素数计算x位置,或者在再次添加和布局所有图像之前始终删除所有子视图。