我有一个只有一个按钮的简单应用程序。
当用户单击它时,他可以拍照,在相机中单击“完成”,然后可以将其保存并在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数组

@属性(非原子的,副本)NSArray * chosenImages;

最佳答案

您的代码有很多错误。每次用户选择图像时,您都将从滚动视图中删除所有子视图,然后仅添加单个选定的图像。

您有一个数组selectedImages,可以用来保存所有选定的图像,但是将其替换为一个新的数组images,该数组仅包含单个新选定的图像。

您将图像分配为具有足够容量的可变数组,以容纳在didFinishPickingMediaWithInfo中获得的信息字典,但这样做没有任何意义。该词典的数量将是词典中键/值对的数量,它不反映用户选择的图像数量(我相信用户选择的图像数量将始终为1,忽略了不同的格式例如原始图片和(可能的)编辑图片。)

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

您可能会考虑在页面滚动模式而不是原始滚动视图中使用UIPageViewController。它管理分页滚动的效果远优于scrollview。苹果公司有一个名为PhotoScroller(链接)的示例应用程序,它甚至支持图像的平铺渲染,缩放和平移图像。将代码缝入您的应用程序以处理这些图像将非常容易。 (您可能不会决定处理平铺的图像-我将具有平铺图像支持的PhotoScroller代码改编到客户端项目中,并且生成图像平铺是很多工作。)

关于ios - 在ScrollView中显示从相机拍摄的图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29108700/

10-08 22:47
查看更多