From 05a187b7eceb103f8b3f4e12a409b3f4cd91dc4d Mon Sep 17 00:00:00 2001 From: Andrea Busi Date: Sun, 7 Mar 2021 17:11:40 +0100 Subject: [PATCH] feat: Add blurred close button --- .../project.pbxproj | 4 ++ .../UI/EQNBlurredCloseButton.swift | 69 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 Sources/Earthquake Network/UI/EQNBlurredCloseButton.swift diff --git a/Sources/Earthquake Network.xcodeproj/project.pbxproj b/Sources/Earthquake Network.xcodeproj/project.pbxproj index ed005ce..12df187 100644 --- a/Sources/Earthquake Network.xcodeproj/project.pbxproj +++ b/Sources/Earthquake Network.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 6525A82625E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6525A82525E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift */; }; 6544416B25E9599000C41714 /* EQNDebugViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6544416A25E9599000C41714 /* EQNDebugViewController.swift */; }; + 6586971125F44C26009C0182 /* EQNBlurredCloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6586971025F44C26009C0182 /* EQNBlurredCloseButton.swift */; }; 65DBFB4B25E29DD60041CBA6 /* SeismicNetworksMapDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65DBFB4A25E29DD60041CBA6 /* SeismicNetworksMapDetailViewController.swift */; }; 65DBFB5F25E2A5010041CBA6 /* EQNMapAnnotationPastquakes.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C602249218EDBE200C799C2 /* EQNMapAnnotationPastquakes.m */; }; 65DBFB7425E2BBF20041CBA6 /* GADTMediumTemplateView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 65DBFB6F25E2BBF20041CBA6 /* GADTMediumTemplateView.xib */; }; @@ -274,6 +275,7 @@ 40CD2E5581CF2FA3D52F392D /* Pods-Earthquake Network.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Earthquake Network.release.xcconfig"; path = "Pods/Target Support Files/Pods-Earthquake Network/Pods-Earthquake Network.release.xcconfig"; sourceTree = ""; }; 6525A82525E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeismicNetworkAdvertiseTableViewCell.swift; sourceTree = ""; }; 6544416A25E9599000C41714 /* EQNDebugViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EQNDebugViewController.swift; sourceTree = ""; }; + 6586971025F44C26009C0182 /* EQNBlurredCloseButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EQNBlurredCloseButton.swift; sourceTree = ""; }; 65DBFB4A25E29DD60041CBA6 /* SeismicNetworksMapDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeismicNetworksMapDetailViewController.swift; sourceTree = ""; }; 65DBFB6F25E2BBF20041CBA6 /* GADTMediumTemplateView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GADTMediumTemplateView.xib; sourceTree = ""; }; 65DBFB7025E2BBF20041CBA6 /* GADTTemplateView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADTTemplateView.h; sourceTree = ""; }; @@ -1099,6 +1101,7 @@ DC52B8A424FCCD6900ABEBA6 /* AppTheme.swift */, DCA5B6E6252E4BD8002AEC96 /* EQNBaseTableViewCell.swift */, DCBB267B24D1E98300F04559 /* EQNInsetTableViewCell.swift */, + 6586971025F44C26009C0182 /* EQNBlurredCloseButton.swift */, ); path = UI; sourceTree = ""; @@ -1575,6 +1578,7 @@ DC646F32252B698B000AA5FD /* AlertsSeismicNotificationCompactTableViewCell.swift in Sources */, DCF10DCD24D2C935009F34C3 /* EQNPurchaseAvailability.swift in Sources */, DC08803F24F5A89000186D97 /* SettingEnableTableViewCell.swift in Sources */, + 6586971125F44C26009C0182 /* EQNBlurredCloseButton.swift in Sources */, 8CAFD7C521825E4A00F8BD29 /* EQNSisma.m in Sources */, DCC23DEC24D281CE003A2404 /* SubscriptionsActiveTableViewCell.swift in Sources */, 8CF6604F214C0E58009F4314 /* EQNCalibrazione.m in Sources */, diff --git a/Sources/Earthquake Network/UI/EQNBlurredCloseButton.swift b/Sources/Earthquake Network/UI/EQNBlurredCloseButton.swift new file mode 100644 index 0000000..ca1232b --- /dev/null +++ b/Sources/Earthquake Network/UI/EQNBlurredCloseButton.swift @@ -0,0 +1,69 @@ +// +// EQNBlurredCloseButton.swift +// Earthquake Network +// +// Created by Andrea Busi on 07/03/21. +// Copyright © 2021 Earthquake Network. All rights reserved. +// + +import Foundation + + +class EQNBlurredCloseButton: UIButton { + + // MARK: - Init + + convenience init() { + self.init(type: .custom) + setupUI() + } + + // MARK: - Private + + private func setupUI() { + layer.masksToBounds = true + + titleLabel?.font = UIFont.monospacedDigitSystemFont(ofSize: 16.0, weight: .medium) + setTitle("X", for: .normal) + + addBlurEffect(style: .extraLight) + } + + private func addBlurEffect(style: UIBlurEffect.Style = .regular) { + backgroundColor = .clear + + let blurView = UIVisualEffectView(effect: UIBlurEffect(style: style)) + blurView.isUserInteractionEnabled = false + blurView.backgroundColor = UIColor.lightGray.withAlphaComponent(0.6) + + insertSubview(blurView, at: 0) + + blurView.translatesAutoresizingMaskIntoConstraints = false + leadingAnchor.constraint(equalTo: blurView.leadingAnchor).isActive = true + trailingAnchor.constraint(equalTo: blurView.trailingAnchor).isActive = true + topAnchor.constraint(equalTo: blurView.topAnchor).isActive = true + bottomAnchor.constraint(equalTo: blurView.bottomAnchor).isActive = true + + if let imageView = self.imageView { + imageView.backgroundColor = .clear + bringSubviewToFront(imageView) + } + } + + override func layoutSubviews() { + super.layoutSubviews() + + // force the button to be circle + layer.cornerRadius = frame.height / 2.0 + } + + // MARK: - Public + + /// Add constaints to show the button on the upper right corner + func addDefaultConstraint(to view: UIView) { + leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10.0).isActive = true + topAnchor.constraint(equalTo: view.topAnchor, constant: 10.0).isActive = true + widthAnchor.constraint(equalTo: heightAnchor).isActive = true + heightAnchor.constraint(equalToConstant: 40.0).isActive = true + } +}