Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<h2>Update</h2> <p>I've updated it now and tried to replicate what you've done in your question. I've included full source of .h/.m and <code>theKing@2x.png</code>. Create a new project and paste the source into the files and add <code>theKing@2x.png</code>. Everything is done programmatically - you don't need to set anything up in interface builder other than embedding your view in a navigation controller.</p> <p>Here is <code>theKing@2x.png</code> - <a href="https://i.imgur.com/0DrM7si.png" rel="noreferrer">http://i.imgur.com/0DrM7si.png</a></p> <h3>ViewController.h</h3> <pre><code>#import &lt;UIKit/UIKit.h&gt; @interface ViewController : UIViewController &lt;UIImagePickerControllerDelegate, UINavigationControllerDelegate&gt; @end </code></pre> <h3>ViewController.m</h3> <pre><code>#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // assign action to button UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; myButton.frame = CGRectMake(0, 0, 200, 60); myButton.center = self.view.center; [myButton addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchUpInside]; [myButton setTitle:@"Image Picker" forState:UIControlStateNormal]; [self.view addSubview:myButton]; } - (void)buttonPress:(id)sender { if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { // alert the user that the camera can't be accessed UIAlertView *noCameraAlert = [[UIAlertView alloc] initWithTitle:@"No Camera" message:@"Unable to access the camera!" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil]; [noCameraAlert show]; } else { // prepare imagePicker view UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.delegate = self; imagePicker.allowsEditing = NO; imagePicker.showsCameraControls = NO; // create view for overlay CGRect overlayRect = CGRectMake(0, 0, imagePicker.view.frame.size.width, imagePicker.view.frame.size.height); UIView *overlayView = [[UIView alloc] initWithFrame:overlayRect]; // prepare the image to overlay UIImageView *overlayImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"theKing"]]; overlayImage.center = overlayView.center; overlayImage.alpha = 0.5; // prepare toolbar for overlay UIToolbar *overlayToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 600, overlayView.frame.size.width, 40)]; overlayToolbar.center = CGPointMake(overlayView.center.x, overlayView.frame.size.height - 20); overlayToolbar.barStyle = UIBarStyleBlack; UIBarButtonItem *takePictureButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(takePictureButtonPressed:)]; UIBarButtonItem *flexibleBarSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; flexibleBarSpace.width = 1000; UIBarButtonItem *startStopButton = [[UIBarButtonItem alloc] initWithTitle:@"Snap" style:UIBarButtonItemStyleBordered target:self action:@selector(startStopButtonPressed:)]; UIBarButtonItem *timedButton = [[UIBarButtonItem alloc]initWithTitle:@"Timed" style:UIBarButtonItemStyleBordered target:self action: @selector(timedButtonPressed:)]; UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action: @selector(cancelButtonPressed:)]; overlayToolbar.items = [NSArray arrayWithObjects:takePictureButton, flexibleBarSpace, startStopButton, timedButton, cancelButton, nil]; [overlayView addSubview:overlayImage]; [overlayView addSubview:overlayToolbar]; // add the image as the overlay [imagePicker setCameraOverlayView:overlayView]; // display imagePicker [self.navigationController presentViewController:imagePicker animated:YES completion:nil]; } } #pragma mark - UIBarButton Selectors - (void)takePictureButtonPressed:(id)sender { NSLog(@"takePictureButtonPressed..."); // TODO: take picture! } - (void)startStopButtonPressed:(id)sender { NSLog(@"startStopButtonPressed..."); // TODO: make this do something } - (void)timedButtonPressed:(id)sender { NSLog(@"timedButtonPressed..."); // TODO: implement timer before calling takePictureButtonPressed } - (void)cancelButtonPressed:(id)sender { NSLog(@"cancelButtonPressed"); [self.navigationController dismissViewControllerAnimated:YES completion:nil]; } #pragma mark - UIImagePickerController Delegate Methods - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)editingInfo { // determine if the user selected or took a new photo UIImage *selectedImage; if ([editingInfo objectForKey:UIImagePickerControllerOriginalImage]) selectedImage = (UIImage *)[editingInfo objectForKey:UIImagePickerControllerOriginalImage]; else if ([editingInfo objectForKey:UIImagePickerControllerEditedImage]) selectedImage = (UIImage *)[editingInfo objectForKey:UIImagePickerControllerEditedImage]; // TODO: Do something with selectedImage (put it in a UIImageView // dismiss the imagePicker [picker.presentingViewController dismissViewControllerAnimated:YES completion:nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end </code></pre> <h3>Screenshot</h3> <p>This is what it looks like when I run it. <img src="https://i.imgur.com/qZbe2AR.jpg" alt="Screenshot"></p> <p>Does this satisfy your app requirements?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload