【发布时间】:2013-01-01 19:47:28
【问题描述】:
是的,这可能是this 的重复问题。但由于没有得到答案,我将更具体的案例和代码:
我有 3 个参与UIViewControllers:
-
WelcomeView- 第一个 -
TakePhotoViewController- 第二个是 OverlayviewController 的代表 -
OverlayViewController- 相机的自定义视图。
场景:
- 用户输入
WelcomeView,点击一个按钮,转至TakeView。 -
UIImageViewController正在打开拍照。 - 用户单击取消按钮 - 正在调用
TakePhotoViewController中的didCancelCamera方法并返回到WelcomeView - 用户离开应用程序。
- 用户重新打开应用并再次执行第 1 步。
图像选择器未打开。我可以拍照,没关系 - 但用户看不到他在拍什么。
OverlayViewController.h
@interface OverlayViewController : BaseViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
@property (nonatomic,weak) id<OverlayViewControllerDelegate> delegate;
@property (nonatomic,retain) UIImagePickerController *imagePickerController;
@end
OverlayViewController.m:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
self.imagePickerController = [[UIImagePickerController alloc] init];
self.imagePickerController.delegate = self;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor clearColor];
}
- (IBAction)takePicture:(id)sender {
[self.imagePickerController takePicture];
}
- (IBAction)cancelImagePicker:(id)sender {
[self.delegate didCancelCamera];
}
- (void) setupImagePicker:(UIImagePickerControllerSourceType) sourceType
{
self.imagePickerController.sourceType = sourceType;
if (sourceType == UIImagePickerControllerSourceTypeCamera)
{
self.imagePickerController.showsCameraControls = NO;
if ([[self.imagePickerController.cameraOverlayView subviews] count] ==0)
{
CGRect overlayViewFrame = self.imagePickerController.cameraOverlayView.frame;
CGRect newFrame = CGRectMake(0.0, CGRectGetHeight(overlayViewFrame)-self.view.frame.size.height-10.0, CGRectGetWidth(overlayViewFrame), self.view.frame.size.height + 10.0);
self.view.frame = newFrame;
[self.imagePickerController.cameraOverlayView addSubview:self.view];
}
}
}
- (void)finishAndUpdate
{
[NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:self withObject:nil];
[self.delegate didFinishWithCamera]; // tell our delegate we are done with the camera
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self finishAndUpdate];
}
TakePhotoViewController.h
@interface TakePhotoViewController : BaseViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,OverlayViewControllerDelegate>
@property (nonatomic, retain) OverlayViewController *overlayViewController;
@end
TakePhotoViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
// Insert the overlay
self.overlayViewController = (OverlayViewController *)[sb instantiateViewControllerWithIdentifier:@"Overlay"];
self.overlayViewController.delegate = self;
}
- (void)viewDidUnload
{
self.overlayViewController = nil;
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (void)openImagePicker {
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
[self showImagePicker:UIImagePickerControllerSourceTypeCamera];
}
else{
[self showImagePicker:UIImagePickerControllerSourceTypePhotoLibrary];
}
}
- (void)viewDidAppear:(BOOL)animated{
if (appDelegate.shouldOpenPicker){
[self openImagePicker];
}
}
- (void)showImagePicker:(UIImagePickerControllerSourceType)sourceType
{
if ([UIImagePickerController isSourceTypeAvailable:sourceType])
{
[self.overlayViewController setupImagePicker:sourceType];
[self presentViewController:self.overlayViewController.imagePickerController animated:YES completion:nil];
}
}
-(void)didCancelCamera{
[[self.overlayViewController.imagePickerController presentingViewController] dismissViewControllerAnimated:NO completion:^ {
[self performSegueWithIdentifier:@"fromTakeToWelcome" sender:self];
}];
}
【问题讨论】:
-
你是在 iphone 还是 ipad 上测试?
-
iPhone 和 iPad 有同样的问题。我都试过了
-
你是否将OverlayViewController的view的背景颜色设置为清除?
-
@rdelmar 是的。在 viewDidLoad 方法中。对不起,我忘了在上面添加它,但我编辑了我的问题
-
您是否尝试过调试应用并查看是否有任何条件失败?
标签: objective-c uiviewcontroller uiimagepickercontroller xcode4.5