1

我通过使用 Vuforia 进行开发,在 iOS 上进行有关增强现实的项目。

我在开始之前创建了视图FrameMarkerAppDelegate(扫描 AR 视图)。在我推送UIButtonon view 页面后,FrameMarkerAppDelegate它就开始了。背景是FrameMarkerAppDalegate运行完成后的相机背景。然后我触摸相机背景并选择返回查看页面,现在我们再次进入查看页面。

我的问题是UIButton再次按下后,相机背景没有出现。它仍然是查看页面,但相机已激活。

视图控制器.mm

- (IBAction)btnSelect:(id)sender {
    FrameMarkersAppDelegate *appDelegate = [[FrameMarkersAppDelegate alloc] init];
    [appDelegate startFrameAppDelegate];
}

FrameMarkerAppDelegate.mm

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    window = [[UIWindow alloc] initWithFrame: screenBounds];
    [self setupSplashContinuation];
    [QCARutils getInstance].targetType = TYPE_FRAMEMARKERS;
    arParentViewController = [[ARParentViewController alloc] init];
    arParentViewController.arViewRect = screenBounds;
    [window insertSubview:arParentViewController.view atIndex:0];
    [window makeKeyAndVisible];
    return YES;
}



-(void)startFrameAppDelegate
{
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    window = [[UIWindow alloc] initWithFrame: screenBounds];
    [self setupSplashContinuation];
    [QCARutils getInstance].targetType = TYPE_FRAMEMARKERS;
    arParentViewController = [[ARParentViewController alloc] init];
    arParentViewController.arViewRect = screenBounds;
    [window insertSubview:arParentViewController.view atIndex:0];
    [window makeKeyAndVisible];
}
4

1 回答 1

0

有同样的问题。基本上我认为错误归结为将非弧 vuforia sdk 与弧项目合并。我发现当我使用 vuforia 相机作为打开视图控制器时,当 vuforia 视图控制器第一次运行时,“ARViewController”中的“dealloc”方法没有被调用。但之后每次都会调用它。对我来说似乎太复杂了,无法正确锻炼,所以我通过在“ImageTargetsParentViewController”之前使用我的导航控制器中的方法推送 ImageTargetsParentViewController 来破解它(这个方法只是推送了 ImageTargetsParentViewController 视图控制器)。这似乎解决了它,现在每次都调用 dealloc。

空白视图控制器.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    double delayInSeconds = 2.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [((CARNavigationController *)self.navigationController) firstLoadOpenAr];
    });
}
于 2013-05-30T09:16:33.213 回答