iOS 8.3 上的 Wikitude 黑屏

Wikitude black screen on iOS 8.3

现在,在用户批准相机和 GPS 的权限后,我出现了黑屏和 pois。看起来相机存在问题,因为 pois 正在移动设备位置变化,因此该部分工作正常,此外,如果我终止应用程序然后启动它一切都很好(用户已经批准了权限)任何想法什么可能是问题?代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSError *deviceNotSupportedError = nil;
    if ( [WTArchitectView isDeviceSupportedForRequiredFeatures:WTFeature_Geo error:&deviceNotSupportedError] ) { // 1
        self.architectView.delegate = self;
        [self.architectView setLicenseKey:@""];

        self.architectWorldNavigation = [self.architectView loadArchitectWorldFromURL:[[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html" subdirectory:@"4_PointOfInterest_4_SelectingPois"] withRequiredFeatures:WTFeature_Geo | WTFeature_2DTracking];

        [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification
                                                          object:nil
                                                           queue:[NSOperationQueue mainQueue]
                                                      usingBlock:^(NSNotification *note) {
                                                          if (self.architectWorldNavigation.wasInterrupted) {
                                                              [self.architectView reloadArchitectWorld];
                                                          }
                                                          [self startRunning];
                                                      }];

        [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillResignActiveNotification
                                                          object:nil
                                                           queue:[NSOperationQueue mainQueue]
                                                      usingBlock:^(NSNotification *note) {
                                                          [self startRunning];
                                                      }];

    } else {
        NSLog(@"device is not supported - reason: %@", [deviceNotSupportedError localizedDescription]);
    }
}

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self startRunning];
}

- (void)startRunning {

    if ( ![self.architectView isRunning] ) {
        [self.architectView start:^(WTStartupConfiguration *configuration) {
            configuration.captureDevicePosition= AVCaptureDevicePositionBack;

        } completion:^(BOOL isRunning, NSError *error) {
            if ( !isRunning ) {
                NSLog(@"WTArchitectView could not be started. Reason: %@", [error localizedDescription]);
            }
        }];
    }
}

将其他链接器标志设置为 -ObjC,用于构建设置中的调试和发布。

如果 Wikitude 引擎打开,我通过检查 UIApplicationDidBecomeActiveNotification 通知解决了这个问题。如果不是,我执行 Wikitude 的启动方法,一切正常。

    - (void)startRunning {
    self.observers = [[NSMutableArray alloc] init];
    NSError *deviceNotSupportedError = nil;
    if ( [WTArchitectView isDeviceSupportedForRequiredFeatures:WTFeature_Geo error:&deviceNotSupportedError] ) {
        self.architectView.delegate = self;
        self.architectView.desiredLocationAccuracy = kCLLocationAccuracyNearestTenMeters;
        [self.architectView setLicenseKey:kWikiTudeLicenseKey];

        NSURL *architectWorldUrl = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html" subdirectory:kWikitudeHTMLFileSubDictionary];
        self.architectWorldNavigation = [self.architectView loadArchitectWorldFromURL:architectWorldUrl withRequiredFeatures:WTFeature_Geo];

        for (id object in self.observers) {
            [[NSNotificationCenter defaultCenter] removeObserver:object];
        }

        id observer = [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification
                                                                        object:nil
                                                                         queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {

                                                                             if (self.architectWorldNavigation.wasInterrupted) {
                                                                                 [self.architectView reloadArchitectWorld];
                                                                             }
                                                                             [self startServiceIfNeeded];
                                                                         }];
        id observer1 = [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillResignActiveNotification
                                                                         object:nil
                                                                          queue:[NSOperationQueue mainQueue]
                                                                     usingBlock:^(NSNotification *note) {
                                                                         if ( [self.architectView isRunning] )
                                                                         {
                                                                             [self.architectView stop];
                                                                         }
                                                                     }];
        [self.observers addObject:observer];
        [self.observers addObject:observer1];
    } else {
        DLog(@"device is not supported - reason: %@", [deviceNotSupportedError localizedDescription]);
    }

    if ( ![self.architectView isRunning] ) {
        [self.architectView start:^(WTStartupConfiguration *configuration) {
            configuration.captureDevicePosition = AVCaptureDevicePositionBack;
        } completion:^(BOOL isRunning, NSError *error) {
            if ( !isRunning ) {
                NSLog(@"WTArchitectView could not be started. Reason: %@", [error localizedDescription]);
            }
            self.didStart = isRunning;
            if (self.didStartedEngine) {
                self.didStartedEngine();
            }

        }];
    }
}

    - (void)startServiceIfNeeded {
        if ( ![self.architectView isRunning] ) {
            [self.architectView start:^(WTStartupConfiguration *configuration) {
                configuration.captureDevicePosition = AVCaptureDevicePositionBack;
            } completion:^(BOOL isRunning, NSError *error) {
                if ( !isRunning ) {
                    NSLog(@"WTArchitectView could not be started. Reason: %@", [error localizedDescription]);
                }
            }];
        }
    }