diff --git a/Classes/DLCImagePickerController.h b/Classes/DLCImagePickerController.h index dc1d256..8279719 100644 --- a/Classes/DLCImagePickerController.h +++ b/Classes/DLCImagePickerController.h @@ -18,8 +18,9 @@ - (void)imagePickerControllerDidCancel:(DLCImagePickerController *)picker; @end -@interface DLCImagePickerController : UIViewController +@interface DLCImagePickerController : UIViewController +@property (weak, nonatomic) IBOutlet NSLayoutConstraint *filterViewBottomConstraint; @property (nonatomic, weak) IBOutlet GPUImageView *imageView; @property (nonatomic, weak) id delegate; @property (nonatomic, weak) IBOutlet UIButton *photoCaptureButton; diff --git a/Classes/DLCImagePickerController.m b/Classes/DLCImagePickerController.m index 1e0628f..f0ed869 100644 --- a/Classes/DLCImagePickerController.m +++ b/Classes/DLCImagePickerController.m @@ -22,6 +22,7 @@ @implementation DLCImagePickerController { BOOL hasBlur; int selectedFilter; dispatch_once_t showLibraryOnceToken; + UIPopoverController *popover; } @synthesize delegate, @@ -70,13 +71,12 @@ -(id) init { -(void)viewDidLoad { [super viewDidLoad]; - self.wantsFullScreenLayout = YES; + self.extendedLayoutIncludesOpaqueBars = YES; + //set background color - self.view.backgroundColor = [UIColor colorWithPatternImage: - [UIImage imageNamed:@"micro_carbon"]]; + self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"micro_carbon"]]; - self.photoBar.backgroundColor = [UIColor colorWithPatternImage: - [UIImage imageNamed:@"photo_bar"]]; + self.photoBar.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"photo_bar"]]; self.topBar.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"photo_bar"]]; //button states @@ -88,7 +88,7 @@ -(void)viewDidLoad { self.focusView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"focus-crosshair"]]; [self.view addSubview:self.focusView]; self.focusView.alpha = 0; - + [self.imageView setFillMode:kGPUImageFillModeStretch]; self.blurOverlayView = [[DLCBlurOverlayView alloc] initWithFrame:CGRectMake(0, 0, self.imageView.frame.size.width, @@ -268,7 +268,7 @@ -(void) prepareLiveFilter { [filter addTarget:self.imageView]; } - [filter prepareForImageCapture]; + [filter useNextFrameForImageCapture]; } @@ -332,7 +332,15 @@ -(IBAction)switchToLibrary:(id)sender { imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePickerController.delegate = self; imagePickerController.allowsEditing = YES; - [self presentViewController:imagePickerController animated:YES completion:NULL]; + + if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { + [popover dismissPopoverAnimated:YES]; + popover = [[UIPopoverController alloc] initWithContentViewController:imagePickerController]; + popover.delegate = self; + [popover presentPopoverFromRect:self.libraryToggleButton.bounds inView:self.libraryToggleButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; + } else { + [self presentViewController:imagePickerController animated:YES completion:NULL]; + } } -(IBAction)toggleFlash:(UIButton *)button{ @@ -353,7 +361,6 @@ -(IBAction) toggleBlur:(UIButton*)blurButton { blurFilter = [[GPUImageGaussianSelectiveBlurFilter alloc] init]; [(GPUImageGaussianSelectiveBlurFilter*)blurFilter setExcludeCircleRadius:80.0/320.0]; [(GPUImageGaussianSelectiveBlurFilter*)blurFilter setExcludeCirclePoint:CGPointMake(0.5f, 0.5f)]; - [(GPUImageGaussianSelectiveBlurFilter*)blurFilter setBlurRadiusInPixels:kStaticBlurSize]; [(GPUImageGaussianSelectiveBlurFilter*)blurFilter setAspectRatio:1.0f]; } hasBlur = YES; @@ -383,6 +390,13 @@ -(IBAction) switchCamera { } } +#pragma mark - UIPopoverControllerDelegate +- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { + if (!isStatic) { + [self retakePhoto:nil]; + } +} + -(void) prepareForCapture { [stillCamera.inputCamera lockForConfiguration:nil]; if(self.flashToggleButton.selected && @@ -410,7 +424,7 @@ -(void)captureImage { [self prepareFilter]; [self.retakeButton setHidden:NO]; - [self.photoCaptureButton setTitle:@"Done" forState:UIControlStateNormal]; + [self.photoCaptureButton setTitle:@"Finish" forState:UIControlStateNormal]; [self.photoCaptureButton setImage:nil forState:UIControlStateNormal]; [self.photoCaptureButton setEnabled:YES]; if(![self.filtersToggleButton isSelected]){ @@ -437,13 +451,13 @@ -(void)captureImage { finalFilter = captureResize; } - [finalFilter prepareForImageCapture]; + [finalFilter useNextFrameForImageCapture]; [stillCamera capturePhotoAsImageProcessedUpToFilter:finalFilter withCompletionHandler:completion]; } else { // A workaround inside capturePhotoProcessedUpToFilter:withImageOnGPUHandler: would cause the above method to fail, // so we just grap the current crop filter output as an aproximation (the size won't match trough) - UIImage *img = [cropFilter imageFromCurrentlyProcessedOutput]; + UIImage *img = [cropFilter imageFromCurrentFramebuffer]; completion(img, nil); } } @@ -471,7 +485,7 @@ -(IBAction) takePhoto:(id)sender{ [staticPicture processImage]; - UIImage *currentFilteredVideoFrame = [processUpTo imageFromCurrentlyProcessedOutputWithOrientation:staticPictureOriginalOrientation]; + UIImage *currentFilteredVideoFrame = [processUpTo imageFromCurrentFramebufferWithOrientation:staticPictureOriginalOrientation]; NSDictionary *info = [[NSDictionary alloc] initWithObjectsAndKeys: UIImageJPEGRepresentation(currentFilteredVideoFrame, self.outputJPEGQuality), @"data", nil]; @@ -518,20 +532,17 @@ -(IBAction) handlePan:(UIGestureRecognizer *) sender { if ([sender state] == UIGestureRecognizerStateBegan) { [self showBlurOverlay:YES]; - [gpu setBlurRadiusInPixels:0.0f]; if (isStatic) { [staticPicture processImage]; } } if ([sender state] == UIGestureRecognizerStateBegan || [sender state] == UIGestureRecognizerStateChanged) { - [gpu setBlurRadiusInPixels:0.0f]; [self.blurOverlayView setCircleCenter:tapPoint]; [gpu setExcludeCirclePoint:CGPointMake(tapPoint.x/320.0f, tapPoint.y/320.0f)]; } if([sender state] == UIGestureRecognizerStateEnded){ - [gpu setBlurRadiusInPixels:kStaticBlurSize]; [self showBlurOverlay:NO]; if (isStatic) { [staticPicture processImage]; @@ -585,14 +596,12 @@ -(IBAction) handlePinch:(UIPinchGestureRecognizer *) sender { if ([sender state] == UIGestureRecognizerStateBegan) { [self showBlurOverlay:YES]; - [gpu setBlurRadiusInPixels:0.0f]; if (isStatic) { [staticPicture processImage]; } } if ([sender state] == UIGestureRecognizerStateBegan || [sender state] == UIGestureRecognizerStateChanged) { - [gpu setBlurRadiusInPixels:0.0f]; [gpu setExcludeCirclePoint:CGPointMake(midpoint.x/320.0f, midpoint.y/320.0f)]; self.blurOverlayView.circleCenter = CGPointMake(midpoint.x, midpoint.y); CGFloat radius = MAX(MIN(sender.scale*[gpu excludeCircleRadius], 0.6f), 0.15f); @@ -602,7 +611,6 @@ -(IBAction) handlePinch:(UIPinchGestureRecognizer *) sender { } if ([sender state] == UIGestureRecognizerStateEnded) { - [gpu setBlurRadiusInPixels:kStaticBlurSize]; [self showBlurOverlay:NO]; if (isStatic) { [staticPicture processImage]; @@ -614,23 +622,14 @@ -(IBAction) handlePinch:(UIPinchGestureRecognizer *) sender { -(void) showFilters { [self.filtersToggleButton setSelected:YES]; self.filtersToggleButton.enabled = NO; - CGRect imageRect = self.imageView.frame; - imageRect.origin.y -= 34; - CGRect sliderScrollFrame = self.filterScrollView.frame; - sliderScrollFrame.origin.y -= self.filterScrollView.frame.size.height; - CGRect sliderScrollFrameBackground = self.filtersBackgroundImageView.frame; - sliderScrollFrameBackground.origin.y -= - self.filtersBackgroundImageView.frame.size.height-3; - self.filterScrollView.hidden = NO; self.filtersBackgroundImageView.hidden = NO; [UIView animateWithDuration:0.10 delay:0.05 options: UIViewAnimationOptionCurveEaseOut animations:^{ - self.imageView.frame = imageRect; - self.filterScrollView.frame = sliderScrollFrame; - self.filtersBackgroundImageView.frame = sliderScrollFrameBackground; + _filterViewBottomConstraint.constant=42; + [self.view layoutIfNeeded]; } completion:^(BOOL finished){ self.filtersToggleButton.enabled = YES; @@ -639,21 +638,12 @@ -(void) showFilters { -(void) hideFilters { [self.filtersToggleButton setSelected:NO]; - CGRect imageRect = self.imageView.frame; - imageRect.origin.y += 34; - CGRect sliderScrollFrame = self.filterScrollView.frame; - sliderScrollFrame.origin.y += self.filterScrollView.frame.size.height; - - CGRect sliderScrollFrameBackground = self.filtersBackgroundImageView.frame; - sliderScrollFrameBackground.origin.y += self.filtersBackgroundImageView.frame.size.height-3; - [UIView animateWithDuration:0.10 delay:0.05 options: UIViewAnimationOptionCurveEaseOut animations:^{ - self.imageView.frame = imageRect; - self.filterScrollView.frame = sliderScrollFrame; - self.filtersBackgroundImageView.frame = sliderScrollFrameBackground; + _filterViewBottomConstraint.constant=-31; + [self.view layoutIfNeeded]; } completion:^(BOOL finished){ @@ -732,7 +722,13 @@ - (void)imagePickerController:(UIImagePickerController *)picker didFinishPicking staticPicture = [[GPUImagePicture alloc] initWithImage:outputImage smoothlyScaleOutput:YES]; staticPictureOriginalOrientation = outputImage.imageOrientation; isStatic = YES; - [self dismissViewControllerAnimated:YES completion:nil]; + if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { + [popover dismissPopoverAnimated:YES]; + } + else { + [self dismissViewControllerAnimated:YES completion:nil]; + } + [self.cameraToggleButton setEnabled:NO]; [self.flashToggleButton setEnabled:NO]; [self prepareStaticFilter]; @@ -760,6 +756,10 @@ - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } +- (BOOL)prefersStatusBarHidden { + return YES; +} + #endif @end diff --git a/Classes/PhotoViewController.m b/Classes/PhotoViewController.m index cafe369..6529f37 100644 --- a/Classes/PhotoViewController.m +++ b/Classes/PhotoViewController.m @@ -46,17 +46,17 @@ - (void)loadView -(void) takePhoto:(id)sender{ DLCImagePickerController *picker = [[DLCImagePickerController alloc] init]; picker.delegate = self; - [self presentModalViewController:picker animated:YES]; + [self presentViewController:picker animated:YES completion:nil]; } -(void) imagePickerControllerDidCancel:(DLCImagePickerController *)picker{ - [self dismissModalViewControllerAnimated:YES]; + [self dismissViewControllerAnimated:YES completion:nil]; } -(void) imagePickerController:(DLCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO]; - [self dismissModalViewControllerAnimated:YES]; + [self dismissViewControllerAnimated:YES completion:nil]; if (info) { ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; diff --git a/DLCImagePickerController.xcodeproj/project.pbxproj b/DLCImagePickerController.xcodeproj/project.pbxproj index 09203f4..94a801e 100644 --- a/DLCImagePickerController.xcodeproj/project.pbxproj +++ b/DLCImagePickerController.xcodeproj/project.pbxproj @@ -107,7 +107,7 @@ remoteGlobalIDString = BCF1A34414DDB1EC00852800; remoteInfo = GPUImageTests; }; - 6A5D9A5515E01BC2001FAD14 /* PBXContainerItemProxy */ = { + 84F1BAF5192E4F54000E0685 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6A5D9A4815E01B72001FAD14 /* GPUImage.xcodeproj */; proxyType = 1; @@ -464,7 +464,7 @@ buildRules = ( ); dependencies = ( - 6A5D9A5615E01BC2001FAD14 /* PBXTargetDependency */, + 84F1BAF6192E4F54000E0685 /* PBXTargetDependency */, ); name = DLCImagePickerController; productName = DLCImagePickerController; @@ -477,7 +477,7 @@ 6A5D9A0715E0152D001FAD14 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + LastUpgradeCheck = 0510; ORGANIZATIONNAME = "Backspaces Inc"; }; buildConfigurationList = 6A5D9A0A15E0152D001FAD14 /* Build configuration list for PBXProject "DLCImagePickerController" */; @@ -614,10 +614,10 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 6A5D9A5615E01BC2001FAD14 /* PBXTargetDependency */ = { + 84F1BAF6192E4F54000E0685 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GPUImage; - targetProxy = 6A5D9A5515E01BC2001FAD14 /* PBXContainerItemProxy */; + targetProxy = 84F1BAF5192E4F54000E0685 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -637,9 +637,10 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -654,11 +655,15 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "GPUImage/framework/**"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; @@ -667,9 +672,10 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -677,11 +683,14 @@ COPY_PHASE_STRIP = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "GPUImage/framework/**"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -694,8 +703,9 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "DLCImagePickerController/DLCImagePickerController-Prefix.pch"; INFOPLIST_FILE = "DLCImagePickerController/DLCImagePickerController-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Debug; @@ -706,8 +716,9 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "DLCImagePickerController/DLCImagePickerController-Prefix.pch"; INFOPLIST_FILE = "DLCImagePickerController/DLCImagePickerController-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; name = Release; diff --git a/GPUImage b/GPUImage index 49fcf22..9f95bc9 160000 --- a/GPUImage +++ b/GPUImage @@ -1 +1 @@ -Subproject commit 49fcf22d00910f5439392881839cf1d6fed729c1 +Subproject commit 9f95bc95e2efb62524efbf1d2e65fe682c9757c3 diff --git a/Resources/DLCImagePicker.xib b/Resources/DLCImagePicker.xib index 8f96625..521dbe9 100644 --- a/Resources/DLCImagePicker.xib +++ b/Resources/DLCImagePicker.xib @@ -1,941 +1,289 @@ - - - - 1552 - 12E55 - 3084 - 1187.39 - 626.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUIButton - IBUIImageView - IBUIPanGestureRecognizer - IBUIPinchGestureRecognizer - IBUIScrollView - IBUITapGestureRecognizer - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 301 - {{0, 78}, {320, 320}} - - - - _NS:9 - - 3 - MAA - - 2 - - IBCocoaTouchFramework - - - - 266 - {{-12, 435}, {344, 75}} - - - - _NS:9 - NO - IBCocoaTouchFramework - - NSImage - dock_bg.png - - - - - 266 - {{0, 437}, {320, 75}} - - - - _NS:9 - YES - YES - IBCocoaTouchFramework - NO - NO - NO - - - - 266 - - - - 292 - {{115, 3}, {90, 37}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - - 3 - MQA - - - 1 - MC4xMzc1NzQxMzMyIDAuMTM2ODMyODAxMSAwLjE0MjIyMTcxNTMAA - - - 3 - MC41AA - - - NSImage - camera-icon.png - - - NSImage - camera-button.png - - - 2 - 2 - - - Helvetica-Bold - 18 - 16 - - - - - 292 - {{263, 3}, {65, 37}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - - NSImage - filter-close.png - - - NSImage - filter-open.png - - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - - - - - 292 - {{-8, 3}, {65, 37}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - - - NSImage - library.png - - - - - - - -2147483356 - {{11, 7}, {71, 29}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - Retake - - - 1 - MC4xMzcyNTQ5MDIgMC4xMzcyNTQ5MDIgMC4xNDUwOTgwMzkyAA - - - - - 2 - 14 - - - Helvetica-Bold - 14 - 16 - - - - {{0, 437}, {320, 44}} - - - - _NS:9 - - 3 - MC42NjY2NjY2NjY3AA - - IBCocoaTouchFramework - - - - 290 - {320, 44} - - - - _NS:9 - - 3 - MC4zMzMzMzMzMzMzAA - - IBCocoaTouchFramework - - - - 292 - {{277, 3}, {40, 37}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - - NSImage - close.png - - - - - - - 292 - {{136, 3}, {50, 41}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - - NSImage - front-camera.png - - - - - - - 292 - {{213, 0}, {44, 44}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - - NSImage - blur-on.png - - - NSImage - blur.png - - - - - - - 292 - {{57, 0}, {44, 44}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - - NSImage - flash.png - - - NSImage - flash-off.png - - - - - - {320, 480} - - - - _NS:9 - - IBCocoaTouchFramework - - - - - - - - - - filtersToggleButton - - - - 64 - - - - blurToggleButton - - - - 61 - - - - photoCaptureButton - - - - 45 - - - - filtersBackgroundImageView - - - - 72 - - - - topBar - - - - 74 - - - - flashToggleButton - - - - 78 - - - - filterScrollView - - - - 69 - - - - cameraToggleButton - - - - 48 - - - - photoBar - - - - 73 - - - - view - - - - 42 - - - - imageView - - - - 43 - - - - retakeButton - - - - 81 - - - - cancelButton - - - - 44 - - - - libraryToggleButton - - - - 88 - - - - gestureRecognizers - - - NSArray - YES - - 52 - - - - gestureRecognizers - - - NSArray - YES - - 66 - - - - gestureRecognizers - - - NSArray - YES - - 90 - - - - takePhoto: - - - 7 - - 46 - - - - toggleFilters: - - - 7 - - 68 - - - - cancel: - - - 7 - - 47 - - - - switchCamera - - - 7 - - 49 - - - - toggleBlur: - - - 7 - - 62 - - - - handlePinch: - - - - 63 - - - - handlePan: - - - - 67 - - - - toggleFlash: - - - 7 - - 79 - - - - retakePhoto: - - - 7 - - 82 - - - - switchToLibrary: - - - 7 - - 87 - - - - handleTapToFocus: - - - - 91 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 51 - - - - - 65 - - - - - 4 - - - - - - - - - - - - - - - - 37 - - - - - 77 - - - - - 50 - - - - - 34 - - - - - 36 - - - - - 71 - - - - - 7 - - - - - 31 - - - - - - - - - - - 16 - - - - - 83 - - - - - 80 - - - - - 32 - - - - - 35 - - - - - 89 - - - - - - - DLCImagePickerController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - GPUImageView - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 91 - - - - - DLCImagePickerController - UIViewController - - id - UIGestureRecognizer - UIPinchGestureRecognizer - UITapGestureRecognizer - UIButton - id - id - UIButton - UIButton - UIButton - - - - cancel: - id - - - handlePan: - UIGestureRecognizer - - - handlePinch: - UIPinchGestureRecognizer - - - handleTapToFocus: - UITapGestureRecognizer - - - retakePhoto: - UIButton - - - switchToLibrary: - id - - - takePhoto: - id - - - toggleBlur: - UIButton - - - toggleFilters: - UIButton - - - toggleFlash: - UIButton - - - - UIButton - UIButton - UIButton - UIScrollView - UIImageView - UIButton - UIButton - GPUImageView - UIButton - UIView - UIButton - UIButton - UIView - - - - blurToggleButton - UIButton - - - cameraToggleButton - UIButton - - - cancelButton - UIButton - - - filterScrollView - UIScrollView - - - filtersBackgroundImageView - UIImageView - - - filtersToggleButton - UIButton - - - flashToggleButton - UIButton - - - imageView - GPUImageView - - - libraryToggleButton - UIButton - - - photoBar - UIView - - - photoCaptureButton - UIButton - - - retakeButton - UIButton - - - topBar - UIView - - - - IBProjectSource - ./Classes/DLCImagePickerController.h - - - - GPUImageView - UIView - - IBProjectSource - ./Classes/GPUImageView.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - - {15, 22} - {16, 23} - {101, 41} - {26, 21} - {22, 21} - {320, 75} - {29, 28} - {28, 28} - {22, 26} - {22, 26} - {48, 24} - {28, 28} - - 2083 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +