From 75ebdf59aeb5c759d51933ab17eebff08c7c9fd2 Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Sun, 20 Sep 2020 13:28:22 +0200 Subject: [PATCH] Simplify UI, update domain --- CapCollector.xcodeproj/project.pbxproj | 12 +- .../UserInterfaceState.xcuserstate | Bin 31525 -> 43128 bytes .../xcschemes/xcschememanagement.plist | 21 +++ CapCollector/AppDelegate.swift | 2 +- CapCollector/Base.lproj/Main.storyboard | 146 +++++++++++------- CapCollector/Capture/CameraController.swift | 27 +--- .../SearchAndDisplayAccessory.swift | 80 +++------- .../SearchAndDisplayAccessory.xib | 131 ++++++++-------- CapCollector/TableView.swift | 13 +- 9 files changed, 211 insertions(+), 221 deletions(-) diff --git a/CapCollector.xcodeproj/project.pbxproj b/CapCollector.xcodeproj/project.pbxproj index e089aac..7361e2b 100644 --- a/CapCollector.xcodeproj/project.pbxproj +++ b/CapCollector.xcodeproj/project.pbxproj @@ -245,7 +245,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0940; - LastUpgradeCheck = 0940; + LastUpgradeCheck = 1200; ORGANIZATIONNAME = CH; TargetAttributes = { CE56CEC9209D81DD00932C01 = { @@ -384,6 +384,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -409,7 +410,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.4; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -444,6 +445,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -463,7 +465,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.4; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; @@ -480,7 +482,7 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = H8WR4M6QQ4; INFOPLIST_FILE = CapCollector/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -503,7 +505,7 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = H8WR4M6QQ4; INFOPLIST_FILE = CapCollector/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/CapCollector.xcodeproj/project.xcworkspace/xcuserdata/imac.xcuserdatad/UserInterfaceState.xcuserstate b/CapCollector.xcodeproj/project.xcworkspace/xcuserdata/imac.xcuserdatad/UserInterfaceState.xcuserstate index 438593414626136988ea377ff698bdb302ec19aa..b15d0c88e93fe52d20d54f504e14ada5f0760924 100644 GIT binary patch literal 43128 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 delta 14926 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 zuQzWnpDorderHint 0 + SQLite (Playground) 1.xcscheme + + isShown + + orderHint + 2 + + SQLite (Playground) 2.xcscheme + + isShown + + orderHint + 3 + + SQLite (Playground).xcscheme + + isShown + + orderHint + 1 + diff --git a/CapCollector/AppDelegate.swift b/CapCollector/AppDelegate.swift index a45792a..3750df9 100644 --- a/CapCollector/AppDelegate.swift +++ b/CapCollector/AppDelegate.swift @@ -60,7 +60,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } } - let serverUrl = URL(string: "https://cc.ssl443.org")! + let serverUrl = URL(string: "https://christophhagen.de")! func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { app = self diff --git a/CapCollector/Base.lproj/Main.storyboard b/CapCollector/Base.lproj/Main.storyboard index 9b4a01e..5f90789 100644 --- a/CapCollector/Base.lproj/Main.storyboard +++ b/CapCollector/Base.lproj/Main.storyboard @@ -1,9 +1,11 @@ - + - + + + @@ -21,7 +23,7 @@ - + @@ -60,6 +62,7 @@ + @@ -73,7 +76,6 @@ - @@ -97,7 +99,7 @@ - + @@ -114,7 +116,7 @@ - + @@ -124,7 +126,7 @@ - + @@ -231,62 +233,70 @@ - + - - - - - + + + + - - - - - - - + - + + + + - + + - - - + + + + + + + + + - - @@ -309,14 +319,14 @@ - + + - @@ -341,7 +351,7 @@ - + @@ -359,7 +369,7 @@ - + @@ -397,7 +407,23 @@ - - + + + + + + + + + + + + + + + + + + diff --git a/CapCollector/Capture/CameraController.swift b/CapCollector/Capture/CameraController.swift index a17d720..a7773f5 100644 --- a/CapCollector/Capture/CameraController.swift +++ b/CapCollector/Capture/CameraController.swift @@ -24,8 +24,6 @@ class CameraController: UIViewController { @IBOutlet weak var cropView: CropView! @IBOutlet weak var cancelButton: UIButton! - - @IBOutlet weak var bottomBar: UIView! @IBOutlet weak var cameraView: CameraView! { didSet { @@ -67,9 +65,7 @@ class CameraController: UIViewController { super.viewWillAppear(animated) cameraView.delegate = self - imageButton.imageView?.image = UIImage.templateImage(named: "camera") - setTintColor() - + cameraView.launch { success, error in guard let err = error else { return @@ -88,27 +84,6 @@ class CameraController: UIViewController { cameraView.complete() } - private func setTintColor() { - let blur = UIBlurEffect(style: .systemThinMaterial) - let a = UIVisualEffectView(effect: blur) - a.translatesAutoresizingMaskIntoConstraints = false - bottomBar.backgroundColor = nil - bottomBar.insertSubview(a, at: 0) - //bottomBar.addSubview(a) - let t = bottomBar.topAnchor.constraint(equalTo: a.topAnchor) - let b = bottomBar.bottomAnchor.constraint(equalTo: a.bottomAnchor) - let l = bottomBar.leadingAnchor.constraint(equalTo: a.leadingAnchor) - let r = bottomBar.trailingAnchor.constraint(equalTo: a.trailingAnchor) - bottomBar.addConstraints([t,b,l,r]) - //let tint = AppDelegate.tintColor - //cropView.lineColor = tint - //imageButton.borderColor = tint - imageButton.imageView?.tintColor = .systemBlue - - //cancelButton.borderColor = tint - //cancelButton.set(template: "cancel", with: tint) - } - private func giveFeedback(_ style: UIImpactFeedbackGenerator.FeedbackStyle) { let generator = UIImpactFeedbackGenerator(style: style) generator.impactOccurred() diff --git a/CapCollector/Presentation/SearchAndDisplayAccessory.swift b/CapCollector/Presentation/SearchAndDisplayAccessory.swift index e63b214..0e8917d 100644 --- a/CapCollector/Presentation/SearchAndDisplayAccessory.swift +++ b/CapCollector/Presentation/SearchAndDisplayAccessory.swift @@ -33,22 +33,24 @@ class SearchAndDisplayAccessory: PassthroughView { // MARK: - Outlets - @IBOutlet weak var newImageView: PassthroughView! - @IBOutlet weak var capImage: RoundedImageView! @IBOutlet weak var saveButton: UIButton! - @IBOutlet weak var deleteButton: UIButton! - @IBOutlet weak var cameraButton: UIButton! @IBOutlet weak var searchBar: UISearchBar! + @IBOutlet weak var imageHeightContraint: NSLayoutConstraint! + // MARK: - Actions @IBAction func cameraButtonPressed() { - delegate?.capAccessoryCameraButtonPressed() + if isShowingCapImage { + discardImage() + } else { + delegate?.capAccessoryCameraButtonPressed() + } } @IBAction func saveButtonPressed() { @@ -57,24 +59,20 @@ class SearchAndDisplayAccessory: PassthroughView { } } - @IBAction func cancelButtonPressed() { - discardImage() - } - // MARK: - Variables var view: UIView? - weak var blurView: UIVisualEffectView? - - weak var currentBlurContraint: NSLayoutConstraint? - weak var delegate: CapAccessoryDelegate? var currentImage: UIImage? { capImage.image } + var isShowingCapImage: Bool { + capImage.image != nil + } + // MARK: - Setup convenience init(width: CGFloat) { @@ -98,29 +96,11 @@ class SearchAndDisplayAccessory: PassthroughView { //view!.autoresizingMask = .flexibleHeight addSubview(view!) - let blur = UIBlurEffect(style: .systemThinMaterial) - let blurView = UIVisualEffectView(effect: blur) - self.blurView = blurView - blurView.translatesAutoresizingMaskIntoConstraints = false - blurView.isUserInteractionEnabled = false - insertSubview(blurView, at: 0) - - let t = searchBar.topAnchor.constraint(equalTo: blurView.topAnchor) - let b = searchBar.bottomAnchor.constraint(equalTo: blurView.bottomAnchor) - let l = leadingAnchor.constraint(equalTo: blurView.leadingAnchor) - let r = trailingAnchor.constraint(equalTo: blurView.trailingAnchor) - addConstraints([t, b, l, r]) - - currentBlurContraint = t - - self.newImageView.alpha = 0 - self.newImageView.isHidden = true + hideImageView() searchBar.text = nil searchBar.setShowsCancelButton(false, animated: false) searchBar.delegate = self - - cameraButton.setImage(UIImage.templateImage(named: "camera_square"), for: .normal) } // MARK: Search bar @@ -132,15 +112,14 @@ class SearchAndDisplayAccessory: PassthroughView { // MARK: Cap image - func showImageView(with image: UIImage, isUnlocked: Bool) { + func showImageView(with image: UIImage) { capImage.image = image + cameraButton.setImage(UIImage(systemName: "xmark"), for: .normal) - saveButton.isHidden = !isUnlocked - saveButton.isEnabled = isUnlocked - let text = isUnlocked ? "Delete" : "Clear image" - deleteButton.setTitle(text, for: .normal) - - showImageView() + imageHeightContraint.constant = 90 + capImage.alpha = 1 + capImage.isHidden = false + saveButton.isHidden = false } func discardImage() { @@ -152,24 +131,13 @@ class SearchAndDisplayAccessory: PassthroughView { } func hideImageView() { - currentBlurContraint?.isActive = false - let t = searchBar.topAnchor.constraint(equalTo: blurView!.topAnchor) - addConstraint(t) - currentBlurContraint = t + capImage.image = nil + cameraButton.setImage(UIImage(systemName: "camera"), for: .normal) - self.newImageView.alpha = 0 - self.newImageView.isHidden = true - self.capImage.image = nil - } - - private func showImageView() { - currentBlurContraint?.isActive = false - let t = blurView!.topAnchor.constraint(equalTo: saveButton.topAnchor, constant: -8) - addConstraint(t) - currentBlurContraint = t - - self.newImageView.isHidden = false - self.newImageView.alpha = 1 + //imageHeightContraint.constant = 0 + capImage.alpha = 0 + capImage.isHidden = true + saveButton.isHidden = true } } diff --git a/CapCollector/Presentation/SearchAndDisplayAccessory.xib b/CapCollector/Presentation/SearchAndDisplayAccessory.xib index 464ef77..60b535f 100644 --- a/CapCollector/Presentation/SearchAndDisplayAccessory.xib +++ b/CapCollector/Presentation/SearchAndDisplayAccessory.xib @@ -1,9 +1,11 @@ - + - + + + @@ -11,8 +13,7 @@ - - + @@ -22,96 +23,90 @@ + + + + + + + + - - + + Title Title - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + + + + + - - + - + - - + - + + + + diff --git a/CapCollector/TableView.swift b/CapCollector/TableView.swift index 91c59e5..fd7f2b6 100644 --- a/CapCollector/TableView.swift +++ b/CapCollector/TableView.swift @@ -198,8 +198,8 @@ class TableView: UITableViewController { private func updateNavigationItemTitleView() { DispatchQueue.main.async { - self.titleLabel.text = self.titleText - self.subtitleLabel.text = self.subtitleText + self.titleLabel?.text = self.titleText + self.subtitleLabel?.text = self.subtitleText } } @@ -249,7 +249,7 @@ class TableView: UITableViewController { return } let thumbnail = Cap.thumbnail(for: image) - app.storage.save(thumbnail: thumbnail, for: id) + _ = app.storage.save(thumbnail: thumbnail, for: id) } if group.wait(timeout: .now() + .seconds(30)) != .success { self.log("Timed out waiting for thumbnails to be generated") @@ -302,7 +302,7 @@ class TableView: UITableViewController { guard let color = image.averageColor(context: context) else { return } - app.database.set(color: color, for: id) + _ = app.database.set(color: color, for: id) } if group.wait(timeout: .now() + .seconds(30)) != .success { self.log("Timed out waiting for colors to be generated") @@ -812,7 +812,7 @@ extension TableView: CameraControllerDelegate { func didCapture(image: UIImage) { guard let cap = capToAddImageTo else { - accessory!.showImageView(with: image, isUnlocked: isUnlocked) + accessory!.showImageView(with: image) classify(image: image) return } @@ -1063,6 +1063,9 @@ extension TableView: CapAccessoryDelegate { } func capAccessory(shouldSave image: UIImage) { + guard isUnlocked else { + return + } saveNewCap(for: image) }