From 52476e4c6c7ec2c2ba25b998477d3559d7222bf1 Mon Sep 17 00:00:00 2001 From: Maxim Nikolaevich Date: Sun, 8 Jan 2017 08:49:26 +1000 Subject: [PATCH 1/5] fix issue about access to UI from background thread --- GKClasses/GKImagePicker.m | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/GKClasses/GKImagePicker.m b/GKClasses/GKImagePicker.m index 28f0191..d99fd2b 100644 --- a/GKClasses/GKImagePicker.m +++ b/GKClasses/GKImagePicker.m @@ -226,13 +226,14 @@ - (void)showCameraImagePicker __weak typeof (self) weakSelf = self; [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { - - if ([weakSelf hasPermissionToCamera]) { - - [weakSelf initImagePickerIfNeededByType:UIImagePickerControllerSourceTypeCamera]; - [weakSelf presentImagePickerController]; - } else { - [weakSelf triggerNoPermissionFlow:GKPickerOptionCamera]; + dispatch_async(dispatch_get_main_queue(), ^{ + if ([weakSelf hasPermissionToCamera]) { + + [weakSelf initImagePickerIfNeededByType:UIImagePickerControllerSourceTypeCamera]; + [weakSelf presentImagePickerController]; + } else { + [weakSelf triggerNoPermissionFlow:GKPickerOptionCamera]; + } } }]; @@ -250,14 +251,15 @@ - (void)showGalleryImagePicker { __weak typeof (self) weakSelf = self; [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { - if ([weakSelf hasPermissionToPhotoLibrary]) { - - [weakSelf initImagePickerIfNeededByType:UIImagePickerControllerSourceTypePhotoLibrary]; - [weakSelf presentImagePickerController]; - } else { - [weakSelf triggerNoPermissionFlow:GKPickerOptionPhotoLibrary]; - } - + dispatch_async(dispatch_get_main_queue(), ^{ + if ([weakSelf hasPermissionToPhotoLibrary]) { + + [weakSelf initImagePickerIfNeededByType:UIImagePickerControllerSourceTypePhotoLibrary]; + [weakSelf presentImagePickerController]; + } else { + [weakSelf triggerNoPermissionFlow:GKPickerOptionPhotoLibrary]; + } + }); }]; } @@ -296,9 +298,7 @@ - (void)showNoPermissionAlert:(NSString*)title notAuthorizedAlert.tag = kGKNoPermissionsAlertViewTag; - dispatch_async(dispatch_get_main_queue(), ^{ - [notAuthorizedAlert show]; - }); + [notAuthorizedAlert show]; } From f6846272f98969d90f1f3fea8d0bbdea64e9a8df Mon Sep 17 00:00:00 2001 From: Maxim Nikolaevich Date: Sun, 8 Jan 2017 08:50:37 +1000 Subject: [PATCH 2/5] build fix --- GKClasses/GKImagePicker.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GKClasses/GKImagePicker.m b/GKClasses/GKImagePicker.m index d99fd2b..5efebdd 100644 --- a/GKClasses/GKImagePicker.m +++ b/GKClasses/GKImagePicker.m @@ -234,7 +234,7 @@ - (void)showCameraImagePicker } else { [weakSelf triggerNoPermissionFlow:GKPickerOptionCamera]; } - } + }); }]; #endif From e9a1de2c4417f4fcfcad755b2c0d3a6b03b61b8f Mon Sep 17 00:00:00 2001 From: Maxim Nikolaevich Date: Sun, 8 Jan 2017 09:21:53 +1000 Subject: [PATCH 3/5] fix crash if selected type is not camera --- GKClasses/GKImagePicker.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GKClasses/GKImagePicker.m b/GKClasses/GKImagePicker.m index 5efebdd..4d6769d 100644 --- a/GKClasses/GKImagePicker.m +++ b/GKClasses/GKImagePicker.m @@ -85,7 +85,7 @@ - (void)initImagePickerIfNeededByType:(UIImagePickerControllerSourceType)type self.imagePickerController.allowsEditing = YES; } - if (self.useFrontCameraAsDefault) { + if (self.useFrontCameraAsDefault && type == UIImagePickerControllerSourceTypeCamera) { self.imagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront; } From 7ba4e3a952b2758debc489a14b8c21e9d75e0146 Mon Sep 17 00:00:00 2001 From: Maxim Nikolaevich Date: Sun, 8 Jan 2017 09:27:32 +1000 Subject: [PATCH 4/5] fix crash for camera type too --- GKClasses/GKImagePicker.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GKClasses/GKImagePicker.m b/GKClasses/GKImagePicker.m index 4d6769d..559d0b6 100644 --- a/GKClasses/GKImagePicker.m +++ b/GKClasses/GKImagePicker.m @@ -85,11 +85,11 @@ - (void)initImagePickerIfNeededByType:(UIImagePickerControllerSourceType)type self.imagePickerController.allowsEditing = YES; } + self.imagePickerController.sourceType = type; + if (self.useFrontCameraAsDefault && type == UIImagePickerControllerSourceTypeCamera) { self.imagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront; } - - self.imagePickerController.sourceType = type; } #pragma mark UIImagePickerDelegate Methods From e907383c307b2d8fd1a67fd1126fd9896b173111 Mon Sep 17 00:00:00 2001 From: Maxim Nikolaevich Date: Sun, 8 Jan 2017 09:28:20 +1000 Subject: [PATCH 5/5] do not use internal editing cause we have our own --- GKClasses/GKImagePicker.m | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/GKClasses/GKImagePicker.m b/GKClasses/GKImagePicker.m index 559d0b6..38e6a08 100644 --- a/GKClasses/GKImagePicker.m +++ b/GKClasses/GKImagePicker.m @@ -82,7 +82,7 @@ - (void)initImagePickerIfNeededByType:(UIImagePickerControllerSourceType)type if (!self.imagePickerController) { self.imagePickerController = [[UIImagePickerController alloc] init]; self.imagePickerController.delegate = self; - self.imagePickerController.allowsEditing = YES; + self.imagePickerController.allowsEditing = NO; } self.imagePickerController.sourceType = type; @@ -116,7 +116,8 @@ - (void)imagePickerController:(UIImagePickerController *)picker didFinishPicking #else cropController.contentSizeForViewInPopover = picker.contentSizeForViewInPopover; #endif - UIImage *img = [info objectForKey:UIImagePickerControllerEditedImage]; + UIImage *img = [info objectForKey:UIImagePickerControllerOriginalImage]; + assert(nil != img); cropController.sourceImage = img; cropController.resizeableCropArea = self.resizeableCropArea; cropController.cropSize = self.cropSize;