【问题标题】:Use a View Controller as a camera overlay?使用视图控制器作为相机覆盖?
【发布时间】:2012-09-01 06:50:01
【问题描述】:

我有一个应用程序,它可以加载相机并覆盖开火、重新加载和返回按钮,以及一个在点击开火和重新加载按钮时动画的 png。当相机视图加载时,我将如何加载视图控制器,它有一个带有按钮和图像的 .xib 作为覆盖?

当点击主屏幕上的按钮时,我会加载相机视图,该按钮用于打开另一个带有按钮和枪图像的视图。

以下是我到目前为止所做的,即加载相机。我有一个名为 PlayViewController 的单独视图控制器,接口有一个 xib:

-(IBAction)getCameraPicture:(id)sender {


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

picker.sourceType = UIImagePickerControllerSourceTypeCamera;

PlayViewController* overlay = [[PlayViewController alloc] initWithNibName:@"PlayViewController" bundle:nil];
picker.cameraOverlayView = overlay.view;
[picker setDelegate:overlay];
[self presentModalViewController:picker animated:YES];

} 这是在 PlayViewController.m 中:code

   #import "PlayViewController.h"
   #import "SoundViewController.h"

@interface PlayViewController ()

@end

@implementation PlayViewControlleriPad...

`

PlayViewController.h:

@interface PlayViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
{

two array declarations...

}

@property (weak, nonatomic) IBOutlet UIButton *reloadButton;
@property (weak, nonatomic) IBOutlet UIButton *fireButton;
@property (weak, nonatomic) IBOutlet UITextField *ammoField;
@property (weak, nonatomic) IBOutlet UIImageView *type;

@end

【问题讨论】:

    标签: iphone objective-c ios xcode ipad


    【解决方案1】:

    像往常一样创建您的视图控制器和 xib,然后将其添加到您的代码中:

    YourOverlay* overlay = [[YourOverlay alloc] initWithNibName:@"YourOverlayView" bundle:nil];
    picker.cameraOverlayView = overlay.view;
    [picker setDelegate:overlay];
    [self presentModalViewController:picker animated:YES];
    

    叠加层必须实现UIImagePickerControllerDelegateUINavigationControllerDelegate

    【讨论】:

    • 这样做会给我一个错误的行 [picker] setDelegate:overlay];如下:'将'PlayViewControlleriPad *_strong发送到不兼容类型'id'的参数'
    • 覆盖必须实现这些协议。 @interface YourOverlay : UIViewController
    • 您需要在 .h 文件中实现这两个委托,如果您在私有类别中声明它们,在您的 .m 文件中,当您从另一个视图控制器设置委托时,您会收到以下警告你提到的。所以 @interface PlayViewController : UIViewController 在你的 .h 文件中
    • 进入xcode左侧面板的Breakpoint选项卡,点击+添加新断点,添加通用异常断点。然后再次运行你的应用程序,它应该在引发异常的地方断点。如果它一直只显示 lldb 控制台,请按 lldb 控制台工具栏上的继续按钮,直到显示日志消息。
    • bad_access?你在用ARC吗?确保保持对 UIImagePickerController 的强引用(在 ivar 声明中使用强属性或 __strong 关键字)
    【解决方案2】:
    picker.cameraOverlayView = someViewController.view;
    

    【讨论】:

    • 我试过这个,但它给了我一个错误:'PlayViewController'类型的对象上找不到'属性'视图'。有什么我需要添加到 PlayViewController 的吗?
    • @DaleTownsend 你确定你的 PlayViewController 真的是一个视图控制器吗?
    • 应该是,它有一个.m,.h,和一个xib的接口。在 .h 文件中,它在 #import 语句之后有 @interface PlayViewController : UIViewController。
    • @DaleTownsend 你有没有在创建图像选择器的实现文件中#import 了头文件?
    • @DaleTownsend 现在这很奇怪
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多