- IRCameraViewController is a powerful camera view controller for iOS.
- Completely custom camera with AVFoundation
- Custom view with camera permission denied
- Custom button colors
- Easy way to access album (camera roll)
- Flash auto, off and on
- Focus
- Front and back camera
- Grid view
- Preview photo view with three filters (fast processing)
- Visual effects like Instagram iOS app
- Custom image filters
- Git clone this project.
- Copy this project into your own project.
- Add the .xcodeproj into you project and link it as embed framework.
- You can remove the
demo
andScreenShots
folder.
- Add
pod 'IRCameraViewController'
in thePodfile
pod install
#import "IRCameraViewController.h"
@interface IRViewController : UIViewController <IRCameraDelegate>
@property (strong, nonatomic) IBOutlet UIImageView *photoView;
- (IBAction)takePhotoTapped;
@end
@implementation IRViewController
- (IBAction)takePhotoTapped
{
IRCameraNavigationController *navigationController =
[IRCameraNavigationController newWithCameraDelegate:self];
[self presentViewController:navigationController animated:YES completion:nil];
}
#pragma mark - IRCameraDelegate optional
- (void)cameraWillTakePhoto
{
NSLog(@"%s", __PRETTY_FUNCTION__);
}
- (void)cameraDidSavePhotoAtPath:(NSURL *)assetURL
{
// When this method is implemented, an image will be saved on the user's device
NSLog(@"%s album path: %@", __PRETTY_FUNCTION__, assetURL);
}
- (void)cameraDidSavePhotoWithError:(NSError *)error
{
NSLog(@"%s error: %@", __PRETTY_FUNCTION__, error);
}
#pragma mark - IRCameraDelegate required
- (void)cameraDidCancel
{
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)cameraDidTakePhoto:(UIImage *)image
{
_photoView.image = image;
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)cameraDidSelectAlbumPhoto:(UIImage *)image
{
_photoView.image = image;
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
#import "IRCameraViewController.h"
@interface IRViewController : UIViewController
<UINavigationControllerDelegate, UIImagePickerControllerDelegate>
@property (strong, nonatomic) IBOutlet UIImageView *photoView;
- (IBAction)chooseExistingPhotoTapped;
@end
@implementation IRViewController
- (IBAction)chooseExistingPhotoTapped
{
UIImagePickerController *pickerController =
[IRAlbum imagePickerControllerWithDelegate:self];
[self presentViewController:pickerController animated:YES completion:nil];
}
#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
_photoView.image = [IRAlbum imageWithMediaInfo:info];
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
@implementation IRViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIColor *tintColor = [UIColor greenColor];
[IRCameraColor setTintColor:tintColor];
}
@end
Option | Type | Default | Description |
---|---|---|---|
kIRCameraOptionHiddenToggleButton | NSNumber (YES/NO) | NO | Displays or hides the button that switches between the front and rear camera |
kIRCameraOptionHiddenAlbumButton | NSNumber (YES/NO) | NO | Displays or hides the button that allows the user to select a photo from their album |
kIRCameraOptionHiddenFilterButton | NSNumber (YES/NO) | NO | Displays or hides the button that allos the user to filter their photo |
kIRCameraOptionSaveImageToAlbum | NSNumber (YES/NO) | NO | Save or not the photo in the camera roll |
kIRCameraOptionUseOriginalAspect | NSNumber (YES/NO) | NO | Use the original aspect instead of cropping the image to a square |
#import "IRCamera.h"
@implementation UIViewController
- (void)viewDidLoad
{
//...
[IRCamera setOption:kIRCameraOptionHiddenToggleButton value:@YES];
[IRCamera setOption:kIRCameraOptionHiddenAlbumButton value:@YES];
[IRCamera setOption:kIRCameraOptionHiddenFilterButton value:@YES];
[IRCamera setOption:kIRCameraOptionSaveImageToAlbum value:@YES];
//...
}
- (IBAction)buttonTapped
{
//...
BOOL hiddenToggleButton = [[IRCamera getOption:kIRCameraOptionHiddenToggleButton] boolValue];
BOOL hiddenAlbumButton = [[IRCamera getOption:kIRCameraOptionHiddenAlbumButton] boolValue];
BOOL hiddenFilterButton = [[IRCamera getOption:kIRCameraOptionHiddenFilterButton] boolValue];
BOOL saveToDevice = [[IRCamera getOption:kIRCameraOptionSaveImageToAlbum] boolValue];
//...
}
@end
Custom image filters(You can see how GPUImage work in the demo project):
- Return
YES
bycustomizePhotoProcessingView
in theIRCameraDelegate
to disable the default filters
#pragma mark - IRCameraDelegate
- (BOOL)customizePhotoProcessingView {
return YES;
}
- Deal with the image by your own way:
#import <GPUImage/GPUImage.h>
- (UIImage *)imageWithSketchFilter:(UIImage *)originImage {
GPUImageFilter *imageFilter = [[GPUImageSketchFilter alloc] init];
return [imageFilter imageByFilteringImage:originImage];
}
Demo Main Page | Camera |
---|---|
Camera with Grid View | Confirm |
Default filters | Album |
Custom filters | Update display view |