Tutorial iOS – Câmera

On 4 de março de 2015 by Rafael Lage

É 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):

Captura de Tela 2015-01-23 às 21.46.26

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: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:

Captura de Tela 2015-03-04 às 16.56.28Captura de Tela 2015-03-04 às 16.56.49

 

 

 

5- Pronto! Compile e Rode.

1

2

4

Obs: É necessário rodar em um dispositivo já que o simulador não possui acesso a câmera.

 

 

Deixe um comentário

O seu endereço de e-mail não será publicado.