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

标签 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];

}

在标题中我有一个 chosenImages 数组

@property (nonatomic, copy) NSArray *chosenImages;

最佳答案

你的代码有很多问题。每次用户选择图像时,您都会从 ScrollView 中删除所有 subview ,然后仅添加单个选定的图像。

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

您将图像分配为可变数组,该数组具有足够的容量来容纳在 didFinishPickingMediaWithInfo 中获得的信息字典的数量,但这样做没有意义。该字典的计数将是字典中键/值对的数量,这并不反射(reflect)用户选择的图像数量(我相信用户选择的图像数量将始终为 1,忽略不同的格式就像原始图像和(可能的)编辑后的图像。)

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

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

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

相关文章:

ios - WatchKit:使用 openParentApplication 获取当前位置:回复:

objective-c - 如何将 NSstring 转换为 NSData,然后将日期设置为 UILabel

kivy - ScrollView 向下滚动后弹回顶部

ios - iOS-广播SMS(将SMS发送给多个收件人,而不是作为一组MMS?)

Android ScrollView 不填充父 View

android - ScrollView 内的 FlowLayout

ios - 在 IOS 上捆绑应用内购买的最佳方式

ios - 支持 iOS6 到 9 的后台位置更新

ios - 在 iOS 上使用 InputView 属性

ios - 如何在整个项目中将默认日历设置为公历? objective-c