2

我在创建自己的自定义“拍照”按钮时遇到了一些问题。基本上,当我删除默认控件时,相机不再执行快门动画或进行编辑过程,而是直接进入委托方法。

所以,这里有一些代码。起初我使用默认布局,如下所示:

(顺便说一句,我已经删除了用于确定硬件可用性的 if 语句——它们无关紧要。)

UIImagePickerController *picker = [[UIImagePickerController alloc] init];

picker.delegate = self;
picker.allowsEditing = YES;


picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = YES;
picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;     

[self presentModalViewController:picker animated:YES];

使用此代码,当我按下默认的“拍照”按钮时,会触发快门动画,并显示“移动和缩放”视图。按“选择”后,代表被调用,我可以通过info.

所以这是我的新初始化代码,带有一个自定义的“拍照”按钮,没有别的;顺便说一句,我正在我的 ViewController 的 viewDidAppear 方法中初始化这个 UIImagePickerController

UIImagePickerController *picker = [[UIImagePickerController alloc] init];

picker.delegate = self;
picker.allowsEditing = YES;

UIButton *shoot = [[UIButton alloc] initWithFrame:CGRectMake(110, 420, 100, 40)];
[shoot setTitle:@"Shoot" forState:UIControlStateNormal];
[shoot.titleLabel setTextColor:[UIColor whiteColor]];
[shoot addTarget:picker action:@selector(takePicture) forControlEvents:UIControlEventTouchUpInside];

picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[picker.cameraOverlayView addSubview:shoot];
picker.showsCameraControls = NO;

picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;

[self presentModalViewController:picker animated:YES];

在这个例子中,当我点击我的自定义按钮时,没有动画被触发,没有编辑屏幕显示,代理被立即调用。

有趣的是,如果我只是将showsCameraControls属性更改YES为上面示例中的属性,我的自定义按钮的行为方式与我的第一个示例中默认按钮的行为方式完全相同。

对此我感到很困惑,我需要做些什么didFinishPickingMediaWithInfo来调用图像编辑器,还是我只是在初始化中遗漏了一些东西?

我正在使用 Xcode 4.3 和 iOS 5.1(该应用针对 5.0)

非常感谢任何帮助;干杯!

4

1 回答 1

2

显然,“移动和裁剪”功能是默认相机控件的一部分

当您使用照片库作为来源时,唯一的选项是默认选项,因此它始终有效。

最后,我使用一个简单的滚动视图和一些覆盖视图来表示裁剪框,编写了自己的“移动和裁剪”视图。

不太难,只需要根据 UIScrollView 的缩放因子和 contentoffset 做一些数学运算。

于 2012-08-12T21:24:45.230 回答