-
Notifications
You must be signed in to change notification settings - Fork 0
/
AppDelegate.swift
93 lines (77 loc) · 3.7 KB
/
AppDelegate.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
Copyright 2020 Swiftable, LLC. <[email protected]>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import AVFoundation
import JabberwockyARKitEngine
import JabberwockyHTKit
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
AVCaptureDevice.requestAccess(for: .video) { (granted) in
if (granted) {
// Configure the default HTFeatures and enable Head Tracking
DispatchQueue.main.async {
// Use In Memory Settings Configuration
HeadTracking.configure(withEngine: ARKitHTEngine.self)
// UserData Stored Settings Configuration using App Group
// let bundleId = Bundle.main.bundleIdentifier ?? ""
// HeadTracking.configure(withEngine: ARKitHTEngine.self, withSettingsAppGroup: "group." + bundleId)
HeadTracking.configureFeature(FaceMeshFeature.self)
HeadTracking.shared.enable()
}
} else {
NSLog("Head Tracking requires camera access.")
}
}
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = TutorialController()
window.makeKeyAndVisible()
self.window = window
return true
}
}
class TutorialController: UIViewController {
private let BUTTON_IDLE_TEXT = "Blink or Tap"
private let BUTTON_ACTION_TEXT = "Button Tapped!"
private var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
button = UIButton()
button.setTitle(BUTTON_IDLE_TEXT, for: .normal)
button.setTitleColor(UIColor.black, for: .normal)
button.layer.borderColor = UIColor.black.cgColor
button.layer.cornerRadius = 15
button.layer.borderWidth = 2.0
// Subclasses of UIControl are automatically configured to emit .touchUpInside
// events created by the JabberwockyHTKit framework.
// See: JabberwockyHTKit/Focusables/UIControl+Focusable.swift [htInitiateAction]
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
button.widthAnchor.constraint(equalToConstant: 200).isActive = true
button.heightAnchor.constraint(equalToConstant: 100).isActive = true
button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
@objc func buttonAction(sender: UIButton!) {
if button.title(for: .normal) == BUTTON_IDLE_TEXT {
button.setTitle(BUTTON_ACTION_TEXT, for: .normal)
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.button.setTitle(self.BUTTON_IDLE_TEXT, for: .normal)
}
}
}
}