lucgian841
lucgian841

Reputation: 2002

Merge multiple views in an uiview

In my app I've to take a picture and add the following information over the pic, these information are:

Until now I obtained these information by using GPS and a web service for weather forecast (open weather map). I made so:

  1. I take the picture with the standard UIImagePicker
  2. I put a button on my interface to show the picture to the user

When the user press the button the app open a new ViewController in which I show the picture just take and I added 2 UILabel (one for temperature and one for the location) and a UIImageView (to show an icon about the weather forecast). The UILabels and the UIImageView I draw directly on the StoryBoard. Now I need to merge the picture with the 2 UILabel and with the UIImageView, there's a way to merge them in a single UIImageView? I've to do that to save the picture with the weather forecast and location

UPDATE

I create a button to save the picture with the labels and the imageview and the code I wrote it's this:

- (IBAction)buttonSavePicture:(UIButton *)sender {
[self.imageView addSubview:self.labelPlace];
[self.imageView addSubview:self.labelTemperature];
[self.imageView addSubview:self.imageViewWeather];

UIGraphicsBeginImageContext(self.imageView.bounds.size);
[self.imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:self.filename];

[UIImageJPEGRepresentation(finalImage, 1) writeToFile:filePath atomically:YES];

}

But when I go to see in the Documents directory if I saved correctly the picture I don't find it.

Upvotes: 3

Views: 1887

Answers (2)

Bastich
Bastich

Reputation: 21

If you using iOS7 have a look at the snapshotViewAfterScreenUpdates: and the drawViewHierarchyInRect:afterScreenUpdates: this one is used to include or capture subviews like labels etc. this will return a single UIView of everything on screen, then save that as a UIImage.

CGSize imgSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height);
UIGraphicsBeginImageContextWithOptions(imgSize, NO , 0.0f);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *weatherImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(weatherImage, nil, nil, nil; //save to saved image album

If all went right you should have your "screenshot" in the photo album

Upvotes: 1

iphonic
iphonic

Reputation: 12719

Yes, you can easily do it by capturing them. Follow steps.

  1. Create a small parent view in storyboard put all controls you want to capture together inside. Create an outlet say captureView.

  2. Call the following function when you need.

    -(void)capture{
    
          UIGraphicsBeginImageContext(self.captureView.bounds.size);
          [self.captureView.layer renderInContext:UIGraphicsGetCurrentContext()];
          UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
          UIGraphicsEndImageContext();
    
          //FINAL OUTPUT
          self.imageView.image=capturedImage;
    }
    

Cheers.

Upvotes: 2

Related Questions