iOS,UIImagePickerController,是否有一种方法可以检测用户何时点击拍照按钮而不实现自定义控件?

iOS,UIImagePickerController,是否有一种方法可以检测用户何时点击拍照按钮而不实现自定义控件?,ios,objective-c,uiimagepickercontroller,Ios,Objective C,Uiimagepickercontroller,Xcode 7.3,iOS 9.3.1 我想在用户准备拍照时和编辑图片时使用两个自定义覆盖视图。要更改覆盖,我想知道是否有来自UIImagePickerControllerDelegate的回调方法,可以让我知道用户何时开始编辑图片,或者用户何时点击了拍照按钮 我知道的唯一方法是: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary&

Xcode 7.3,iOS 9.3.1

我想在用户准备拍照时和编辑图片时使用两个自定义覆盖视图。要更改覆盖,我想知道是否有来自
UIImagePickerControllerDelegate
的回调方法,可以让我知道用户何时开始编辑图片,或者用户何时点击了拍照按钮

我知道的唯一方法是:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
-(void)imagePickerController:(UIImagePickerController*)选取器未使用信息完成PickingMediaWithInfo:(NSDictionary*)信息
-(无效)ImagePickerController IDCancel:(UIImagePickerController*)选择器
我看了这里:,和

或者,有一种方法可以通过添加观察者从标准按钮获取点击事件


请帮忙!提前感谢。

您可以使用
UIAvigationControllerDelegate
,在使用
UIImagePickerController
时也必须实现该功能。像这样实现委托方法
[…]didShowViewController[…]

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    NSLog(@"%@", [viewController class]);
}
生成以下输出(使用模拟器,选择
UIImagePickerControllerSourceTypePhotoLibrary
作为
sourceType
并按如下方式导航:相册概述>特定相册>编辑特定照片):

2016-04-08 00:19:36.882图像采集器[44578:4705834]PUUIAlbumListViewController
2016-04-08 00:19:41.341图像采集器[44578:4705834]PUUIMomentsGridViewController
2016-04-08 00:19:47.929图像选择器[44578:4705834]PUUIImageViewController


希望有帮助

您可以使用
uiAvigationControllerDelegate
,在使用
UIImagePickerController
时,也必须实现此功能。像这样实现委托方法
[…]didShowViewController[…]

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    NSLog(@"%@", [viewController class]);
}
生成以下输出(使用模拟器,选择
UIImagePickerControllerSourceTypePhotoLibrary
作为
sourceType
并按如下方式导航:相册概述>特定相册>编辑特定照片):

2016-04-08 00:19:36.882图像采集器[44578:4705834]PUUIAlbumListViewController
2016-04-08 00:19:41.341图像采集器[44578:4705834]PUUIMomentsGridViewController
2016-04-08 00:19:47.929图像选择器[44578:4705834]PUUIImageViewController


希望有帮助

Xcode 8.2.1,iOS10.2.1

在实施之前,请阅读早期版本的解决方案以了解基础知识。谢谢问题是,各种子视图的一些名称已从iOS 9.3.1更改为iOS 10.2.1

以下是完整的代码(请参见下面的插入位置),它取代了下面的“//code go Here”:

Xcode 7.3,iOS9.3.1

我必须让它工作,所以我花了很多时间来弄清楚

其要点是,在显示
UIImagePickerController
之后,我向下钻取视图层次结构,查找
CMKShutterButton
和标题为“retake”的retake按钮,然后我将选择器附加到按钮的操作,如下所示

[shutterButton addTarget:self action:@selector(touchUpInsideCMKShutterButton) forControlEvents:UIControlEventTouchUpInside];

[retakeButton addTarget:self action:@selector(touchUpInsideButtonRetake) forControlEvents:UIControlEventTouchUpInside];
将下面的代码放入显示图像选择器后调用的完成块中:

[self presentViewController:self.imagePickerController animated:true completion:^(void){

     //Code goes here

}
以下是完整的代码,它取代了上面的“//code goes Here”:

下面是我附加的方法,它位于视图控制器中,显示图像选择器控制器:

- (void)touchUpInsideCMKShutterButton
{
    NSLog(@"Take");
}

- (void)touchUpInsideButtonRetake
{
    NSLog(@"Re-take");
}

希望这对别人有帮助!谢谢。

Xcode 8.2.1,iOS10.2.1

在实施之前,请阅读早期版本的解决方案以了解基础知识。谢谢问题是,各种子视图的一些名称已从iOS 9.3.1更改为iOS 10.2.1

以下是完整的代码(请参见下面的插入位置),它取代了下面的“//code go Here”:

Xcode 7.3,iOS9.3.1

我必须让它工作,所以我花了很多时间来弄清楚

其要点是,在显示
UIImagePickerController
之后,我向下钻取视图层次结构,查找
CMKShutterButton
和标题为“retake”的retake按钮,然后我将选择器附加到按钮的操作,如下所示

[shutterButton addTarget:self action:@selector(touchUpInsideCMKShutterButton) forControlEvents:UIControlEventTouchUpInside];

[retakeButton addTarget:self action:@selector(touchUpInsideButtonRetake) forControlEvents:UIControlEventTouchUpInside];
将下面的代码放入显示图像选择器后调用的完成块中:

[self presentViewController:self.imagePickerController animated:true completion:^(void){

     //Code goes here

}
以下是完整的代码,它取代了上面的“//code goes Here”:

下面是我附加的方法,它位于视图控制器中,显示图像选择器控制器:

- (void)touchUpInsideCMKShutterButton
{
    NSLog(@"Take");
}

- (void)touchUpInsideButtonRetake
{
    NSLog(@"Re-take");
}

希望这对别人有帮助!谢谢。

UIImagePickerControllerDelegate很差,但您可以通过添加观察者来处理它:

Swift 3:

NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "_UIImagePickerControllerUserDidCaptureItem"), object:nil, queue:nil, using: { note in
    //Do something
})
目标C:

[[NSNotificationCenter defaultCenter] addObserverForName:@"_UIImagePickerControllerUserDidCaptureItem" object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
    //Do something
}];

UIImagePickerControllerDelegate很差,但您可以通过添加观察者来处理它:

Swift 3:

NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "_UIImagePickerControllerUserDidCaptureItem"), object:nil, queue:nil, using: { note in
    //Do something
})
目标C:

[[NSNotificationCenter defaultCenter] addObserverForName:@"_UIImagePickerControllerUserDidCaptureItem" object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
    //Do something
}];

谢谢但是,
UIImagePickerController
在拍摄照片期间以及编辑时仍然显示,
-(void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated
方法只调用一次,日志结果是
PLUICameraViewController
您提醒我如何显示图像选择器,为我指明了正确的方向。谢谢。但是,
UIImagePickerController
在拍摄照片期间以及编辑时仍然显示,
-(void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated
方法只调用一次,日志结果是
PLUICameraViewController
您提醒我图像选择器是如何显示的,为我指明了正确的方向。嗨,@serge-k我已经尝试过您的代码,它在iOS 9.3中工作正常,但在iOS 1中不工作