从 XIB 加载 OverlayView -vs- 以编程方式与 UIImagePickerController 一起使用

发布于 2024-08-26 00:21:50 字数 2130 浏览 2 评论 0原文

我目前正在为 iPhone 制作一个相机应用程序,我有一个奇怪的现象,我无法弄清楚。我希望能得到一些帮助理解。

当重新创建覆盖视图以传递给 UIImagePickerController 时,我已经成功地以编程方式创建了视图。我无法做的是在 IB 中创建带/不带控制器的视图,加载它并将其成功传递给覆盖指针。如果我通过 IB 执行此操作,视图不会不透明,并且会完全遮挡相机的视图。我不明白为什么。

我认为从 XIB 加载时可能会分配普通的 view 指针,因此会覆盖相机的视图,但我有一个以编程方式的示例,其中 view 和 overlayView 在控制器类中设置为相等。也许加载顺序正在覆盖指针?

我们将不胜感激...亲切的问候。

这工作正常...

    - (void)applicationDidFinishLaunching:(UIApplication *)application {

    // dislodge the MainView from the MainViewController
    //
    MainViewController *aController = [[MainViewController alloc] init]; //WithNibName:@"MainView" bundle:nil];

    aController.sourceType= UIImagePickerControllerSourceTypeCamera;
    aController.delegate= aController;

    aController.showsCameraControls= NO;

    // Programmatically load the MainView from the Nib and assign it as the OverlayView instead
    //
    NSArray* nibViews= [[NSBundle mainBundle] loadNibNamed:@"MainView" owner:aController options:nil];
    UIView* uiView= [nibViews objectAtIndex:0];
    uiView.opaque= NO;
    uiView.backgroundColor= [UIColor clearColor];
    aController.cameraOverlayView= uiView;

    self.mainViewController = aController;
    [aController release];

    mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;

    [window addSubview:[mainViewController view]];
    [window makeKeyAndVisible]; 
}

这不...

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // dislodge the MainView from the MainViewController
    //
    MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];

    aController.sourceType= UIImagePickerControllerSourceTypeCamera;
    aController.delegate= aController;

    aController.showsCameraControls= NO;
    aController.cameraOverlayView= aController.view;

    self.mainViewController = aController;
    [aController release];

    mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;

    [window addSubview:[mainViewController view]];
    [window makeKeyAndVisible];
}

I am currently making a camera app for iPhone and I have a strange phenomenon that I can't figure out. I would appreciate some help understanding.

When recreating an overlay view for passing to UIImagePickerController, I have been successfully been able to create the view programmatically. What I haven't been able to do is create the view with/without controller in IB, load it and pass it to the overlay pointer successfully. If I do it via IB, the view is not opaque and obscures the view of the camera completely. I can not figure out why.

I was thinking that the normal view pointer might be assigned when loading from XIB and therefore overwrite the camera's view, but I have an example programmatically where view and overlayView are set equal in the controller class. Perhaps the load order is overwriting a pointer?

Help would be appreciated... kind regards.

This works fine...

    - (void)applicationDidFinishLaunching:(UIApplication *)application {

    // dislodge the MainView from the MainViewController
    //
    MainViewController *aController = [[MainViewController alloc] init]; //WithNibName:@"MainView" bundle:nil];

    aController.sourceType= UIImagePickerControllerSourceTypeCamera;
    aController.delegate= aController;

    aController.showsCameraControls= NO;

    // Programmatically load the MainView from the Nib and assign it as the OverlayView instead
    //
    NSArray* nibViews= [[NSBundle mainBundle] loadNibNamed:@"MainView" owner:aController options:nil];
    UIView* uiView= [nibViews objectAtIndex:0];
    uiView.opaque= NO;
    uiView.backgroundColor= [UIColor clearColor];
    aController.cameraOverlayView= uiView;

    self.mainViewController = aController;
    [aController release];

    mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;

    [window addSubview:[mainViewController view]];
    [window makeKeyAndVisible]; 
}

This DOESN'T...

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // dislodge the MainView from the MainViewController
    //
    MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];

    aController.sourceType= UIImagePickerControllerSourceTypeCamera;
    aController.delegate= aController;

    aController.showsCameraControls= NO;
    aController.cameraOverlayView= aController.view;

    self.mainViewController = aController;
    [aController release];

    mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;

    [window addSubview:[mainViewController view]];
    [window makeKeyAndVisible];
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文