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]);
}
}];
}
}
现在,在用户批准相机和 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]);
}
}];
}
}