Tutorial iOS – Câmera
É bastante comum a utilizações de imagens do dispositivo ou tirar uma foto para ser usada em aplicações. Um exemplo são aplicativos de câmera, edição de fotos/imagens ou aplicativos que por algum motivo necessitam de imagens do usuário. Nesse tutorial iremos aprender a usar o framework MobileCoreServices para tiramos foto, selecionarmos fotos e exibi-las em uma ImageView. Para isso siga os seguintes passos:
1- Crie uma Single View Application(Clique nas imagens para ampliar):
2- Faça as seguintes alterações na sua ViewController.h. Iremos adicionar duas IBAcitions que serão ativadas por botões, useCamera será responsável por iniciar a camera e useCameraRoll do rolo de camera do iOS, aonde se encontram as imagens do dispositivo que podem ser selecionadas. Também importamos o framework MobileCoreServices, criamos uma UIImageView que será usada para apresentar a imagem escolhida no rola da câmera e uma variável _newMedia do tipo BOOL que será usada para o controle de imagens novas.
[sourcecode language=”objc”]
#import <UIKit/UIKit.h>
#import <MobileCoreServices/MobileCoreServices.h>
@interface ViewController : UIViewController<UIImagePickerControllerDelegate,
UINavigationControllerDelegate>
@property BOOL newMedia;
@property (strong, nonatomic) IBOutlet UIImageView *imageView;
– (IBAction)useCamera:(id)sender;
– (IBAction)useCameraRoll:(id)sender;
@end
[/sourcecode]
3- Neste item iremos criar as funções na ViewController.m que serão responsáveis por ativar a câmera, o rolo da câmera, salvar foto e notificação em caso de erro.
3.1- useCamera: Responsável por iniciar a câmera.
[sourcecode language=”objc”]
– (void) useCamera:(id)sender
{
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera])
{
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = @[(NSString *) kUTTypeImage];
imagePicker.allowsEditing = NO;
[self presentViewController:imagePicker
animated:YES completion:nil];
_newMedia = YES;
}
}
[/sourcecode]
3.2- useCameraRoll: Responsábel por iniciar o rolo da câmera:
[sourcecode language=”objc”]
– (void) useCameraRoll:(id)sender
{
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeSavedPhotosAlbum])
{
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = @[(NSString *) kUTTypeImage];
imagePicker.allowsEditing = NO;
[self presentViewController:imagePicker
animated:YES completion:nil];
_newMedia = NO;
}
}
[/sourcecode]
3.3- imagePickerController:didFinishPickingMediaWithInfo: e image:finishedSavingWithError:contextInfo: são utilizadas para controle de imagem salva e notificação em caso de erro.
[sourcecode language=”objc”]
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = info[UIImagePickerControllerMediaType];
[self dismissViewControllerAnimated:YES completion:nil];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
UIImage *image = info[UIImagePickerControllerOriginalImage];
_imageView.image = image;
if (_newMedia)
UIImageWriteToSavedPhotosAlbum(image,
self,
@selector(image:finishedSavingWithError:contextInfo:),
nil);
}
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
{
// Coloque aqui o código para video
}
}
-(void)image:(UIImage *)image
finishedSavingWithError:(NSError *)error
contextInfo:(void *)contextInfo
{
if (error) {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: @"Save failed"
message: @"Failed to save image"
delegate: nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
[/sourcecode]
3.4- Por fim imagePickerControllerDidCancel: é usada para liberar o imagePicker quando requisitado.
[sourcecode language=”objc”]
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissViewControllerAnimated:YES completion:nil];
}
[/sourcecode]
4- Crie os botões para câmera e rolo de câmera e o UIImageView em sua Main.storyboard, e associe respectivamente às suas declarações em ViewController.h:
5- Pronto! Compile e Rode.
Obs: É necessário rodar em um dispositivo já que o simulador não possui acesso a câmera.