在我的一个iOS App开发项目中,每当我试图在ARSCNView上推送视图时.应用程序冻结在下面是我的代码.如果您了解相同的解决方案,请建议适当的解决方案.
- >在sceneView控制器上推送视图时让应用程序冻结
let session = ARSession()
var sessionConfig: ARSessionConfiguration = ARWorldTrackingSessionConfiguration()
var use3DOFTracking = false {
didSet {
if use3DOFTracking {
sessionConfig = ARSessionConfiguration()
}
sessionConfig.isLightEstimationEnabled = true
session.run(sessionConfig)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.setupScene()
setupSession()
}
override func viewWillAppear(_ animated: Bool) {
self.tabBarController?.tabBar.isHidden = false
session.run(sessionConfig, options: [.resetTracking, .removeExistingAnchors])
}
override func viewDidDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
session.pause()
}
func setupScene() {
sceneView.delegate = self
sceneView.session = session
sceneView.antialiasingMode = .multisampling4X
sceneView.automaticallyUpdatesLighting …Run Code Online (Sandbox Code Playgroud) 我试图使用捆绑的领域文件但没有成功。我知道我的领域文件已成功复制到我的应用程序目录,但我无法读取它。
致命错误:“尝试!” 表达式意外引发错误:“无法在路径 '/Users/.../Library/Developer/CoreSimulator/Devices/.../data/Containers/Data/Application/.../Documents/default-v1.realm' 处打开领域。请使用您的应用具有读写权限的路径。”
func fullPathToFileInAppDocumentsDir(fileName: String) -> String {
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask,true)
let documentsDirectory = paths[0] as NSString
let fullPathToTheFile = documentsDirectory.stringByAppendingPathComponent(fileName)
return fullPathToTheFile
}
Run Code Online (Sandbox Code Playgroud)
在didFinishLaunchingWithOptions:
let fileInDocuments = fullPathToFileInAppDocumentsDir("default-v1.realm")
if !NSFileManager.defaultManager().fileExistsAtPath(fileInDocuments) {
let bundle = NSBundle.mainBundle()
let fileInBundle = bundle.pathForResource("default-v1", ofType: "realm")
let fileManager = NSFileManager.defaultManager()
do {
try fileManager.copyItemAtPath(fileInBundle!, toPath: fileInDocuments)
} catch { print(error) }
}
Run Code Online (Sandbox Code Playgroud)
并设置用于默认领域的配置:
var config = Realm.Configuration()
config.path = fileInDocuments
Realm.Configuration.defaultConfiguration = config
let realm = try! Realm(configuration: …Run Code Online (Sandbox Code Playgroud) 我IQKeyboardManager在我的应用中使用了图书馆。我IQKeyboardManager通过cocoapods 安装。每个键盘上没有显示“完成”按钮。那是看不见的。
在我在AppDelegate.swift文件中设置的代码下面。
IQKeyboardManager.shared().isEnabled = true
Run Code Online (Sandbox Code Playgroud)
我正在处理推送通知.我编写了以下代码来获取设备令牌.
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];
NSLog(@"Registering for push notifications...");
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
return YES;
}
-(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
NSLog(@"This is device token%@", deviceToken);
}
-(void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err
{
NSString *str = [NSString stringWithFormat: @"Error: %@", err];
NSLog(@"Error %@",err);
}
Run Code Online (Sandbox Code Playgroud) 我目前正在研究ARKit基于应用程序。我需要检查ARKit支持的设备。
我有两个UIViewController小号
1)ARKit视图控制器 2) 非ARKit视图控制器。
我必须根据设备支持设置一个视图控制器之一。
目前我正在检查下面的代码。但这不适用于某些不支持ARKit但具有 iOS 11 的设备。
if #available(iOS 11.0, *) {
arProfileClosetController = THARClosetViewController(nibName: THARClosetViewController.className, bundle: nil)
} else {
arProfileClosetController = THNonARClosetViewController(nibName: THNonARClosetViewController.className, bundle: nil)
}
Run Code Online (Sandbox Code Playgroud) 我试图使用SCNGeometrySource,SCNGeometryElement绘制箭头.但不能像下面的图像一样绘制精确的箭头.
是否可以绘制带有头部或箭头的简单箭头线,如下图所示.
我尝试了下面的代码,但这不起作用.
let indices: [Int32] = [0, 1,1]
let source = SCNGeometrySource(vertices: [vector1, vector2])
let element = SCNGeometryElement(indices: indices, primitiveType: .triangles)
Run Code Online (Sandbox Code Playgroud)