在ScrollView中显示从相机拍摄的图像

时间:2015-03-17 20:05:52

标签: ios objective-c scrollview

我只有一个按钮就有一个简单的应用程序。 当用户点击它时,他可以拍照,点击相机中的“完成”,然后可以保存并在ScrollView上查看。

然而,当他拍摄另一张照片并点击相机中的“完成”时,新照片会覆盖前一张照片,而他只能看到他拍摄的照片。

我想要保存所有这些图片然后如果用户拍摄4-5张照片,他可以通过滚动来查看所有这些照片。

这是我的代码,我不知道为什么它不起作用。

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

}


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    NSMutableArray *images = [NSMutableArray arrayWithCapacity:[info count]];
    for (UIView *v in [_scrollView subviews]) {
        [v removeFromSuperview];
    }
     [self dismissViewControllerAnimated:YES completion:nil];

    UIImage* image=[info valueForKey:@"UIImagePickerControllerEditedImage"];
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
                UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
                [_scrollView addSubview:imageview];
    [images addObject:image];
    self.chosenImages = images;
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    [_scrollView setPagingEnabled:YES];

}

在标题中我有一系列selectedImages

@property(非原子,复制)NSArray * selectedImages;

2 个答案:

答案 0 :(得分:1)

您的代码有很多问题。每次用户选择图像时,您都会从滚动视图中删除所有子视图,然后只添加所选的单个图像。

您有一个数组selectedImages,您可以使用它来保存所有选定的图像,但是用新的数组替换它,图像只包含一个新选择的图像。

您将图像分配为可变数组,其容量足以计算您在didFinishPickingMediaWithInfo中获得的信息字典的数量,但是没有必要这样做。该字典的计数将是字典中键/值对的数量,它不反映用户选择的图像数量(我相信用户选择的图像数量始终为1,忽略不同的格式像原始图像和(可能的)编辑图像。)

我建议将以前的图像留在滚动视图中,跟踪这些图像的数量和位置,然后在用户选择后将新图像添加到滚动视图中。

您可能会考虑在页面滚动模式中使用UIPageViewController而不是原始滚动视图。它管理分页滚动比滚动视图更好。 Apple提供了一个名为PhotoScroller(链接)的示例应用程序,它甚至支持图像的平铺渲染,捏合缩放和平移图像。将代码拼接到您的应用程序中以处理这些图像非常容易。 (您可能不会决定处理平铺图像 - 我将具有平铺图像支持的PhotoScroller代码调整到客户端项目中,生成图像切片是相当多的工作。)

答案 1 :(得分:0)

假设self.chosenImages属于NSMutableArray类型,请尝试此

[self.chosenImages addObjectsFromArray:images] 

而不是

self.chosenImages = images;

如果它不可变,你可以随时设置它:

NSMutableArray *newArray = [self.chosenImages mutableCopy];
newArray = [newArray addObjectsFromArray:images];
self.chosenImages = [newArray copy];