0

I've downloaded sample code "Using UIImagePickerController to Select Pictures and Take Photos" from developer.apple.com and basically I left it as it was. I've added functionality, that if I have taken some picture, and I'm again in imagePickerController view to take another picture, it's overlaid with that previously taken picture. There is also slider and I can change opacity of overlay, works great.

However that previously taken picture is not scaled to fit the view, instead only part of it in original resolution can be seen. So how can I set overlayImage to proper size? I've tried using storyboards/nib files/add it programmatically but no success.

@property (nonatomic, weak) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIImageView *overlayImage;
@property (nonatomic) IBOutlet UIView *overlayView;

Here's the method:

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType
{
if (self.imageView.isAnimating)
{
    [self.imageView stopAnimating];
}

if (self.capturedImages.count > 0)
{
    //[self.capturedImages removeAllObjects];
}

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
imagePickerController.sourceType = sourceType;
imagePickerController.delegate = self;
imagePickerController.showsCameraControls = NO;

if (sourceType == UIImagePickerControllerSourceTypeCamera)
{
    [[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
    self.overlayView.frame = imagePickerController.cameraOverlayView.frame;
    imagePickerController.cameraOverlayView = self.overlayView;
    self.overlayView = nil;
    self.overlayImage = self.imageView;
    self.overlayImage.alpha = 0.5;

    UISlider *slider=[[UISlider alloc]initWithFrame:CGRectMake(60, 80, 200, 30)];
    [slider setMaximumValue:1.0];
    [slider setMinimumValue:0.0];
    [slider setValue:0.5];
    [slider addTarget:self action:@selector(sliderChanged:)  forControlEvents:UIControlEventValueChanged];

    if (self.capturedImages.count > 0)
    {
        [imagePickerController.cameraOverlayView addSubview:self.overlayImage];
        [imagePickerController.cameraOverlayView addSubview:slider];
    }
}

self.imagePickerController = imagePickerController;
[self presentViewController:self.imagePickerController animated:YES completion:nil];
}
Adam Bardon
  • 3,829
  • 7
  • 38
  • 73

2 Answers2

0

In your code sample I can't see setting self.imageView.frame anywhere. If I understand the question right, this is the problem.

Tomasz Bąk
  • 6,124
  • 3
  • 34
  • 48
  • thanks, I've tried self.imageView.frame = CGRectMake(0, 0, 200, 200); also self.overlayView.frame = CGRectMake(0, 0, 200, 200); neither of them solved my problem, taken photo is every time in original size – Adam Bardon Sep 20 '13 at 16:40
  • If setting frame manually doesn't help, this means, that you have [auto-layout on](http://stackoverflow.com/questions/12716891/how-to-disable-auto-layout-by-default-for-xcode-4-5). – Tomasz Bąk Sep 21 '13 at 06:17
0

Solved! with simple:

self.overlayImage.image = self.imageView.image;

instead of:

self.overlayImage = self.imageView;
Adam Bardon
  • 3,829
  • 7
  • 38
  • 73