mirror of
https://github.com/fxm90/GradientLoadingBar.git
synced 2026-06-16 12:24:31 +00:00
Merge branch 'main' into task/dependency-update
This commit is contained in:
+10
-3
@@ -7,10 +7,16 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [2.3.2] - 2022-08-09
|
||||
### Changed
|
||||
- Improved Bézier Path of `NotchGradientLoadingBar`
|
||||
- Adapt logic of `UIKit` variant for calculating and animating the gradient to `SwiftUI` variant. This should not make any difference visually, but will be easier to maintain.
|
||||
### Fixed
|
||||
- Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone 12 Mini" or "iPhone 13 Mini"
|
||||
|
||||
## [2.3.1] - 2022-10-05
|
||||
### Fixed
|
||||
- Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone 11 Pro" and "iPhone 11 Pro Max" ([#029])
|
||||
- Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone 11 Pro" or "iPhone 11 Pro Max" ([#029])
|
||||
|
||||
[#029]: https://github.com/fxm90/GradientLoadingBar/issues/29
|
||||
|
||||
@@ -178,8 +184,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
||||
- Initial release
|
||||
|
||||
|
||||
[Unreleased]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.1...main
|
||||
[2.3.0]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.0...2.3.1
|
||||
[Unreleased]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.2...main
|
||||
[2.3.2]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.1...2.3.2
|
||||
[2.3.1]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.0...2.3.1
|
||||
[2.3.0]: https://github.com/fxm90/GradientLoadingBar/compare/2.2.5...2.3.0
|
||||
[2.2.5]: https://github.com/fxm90/GradientLoadingBar/compare/2.2.4...2.2.5
|
||||
[2.2.4]: https://github.com/fxm90/GradientLoadingBar/compare/2.2.3...2.2.4
|
||||
|
||||
+22
-74
@@ -12,86 +12,34 @@ import XCTest
|
||||
|
||||
final class NotchGradientLoadingBarViewModelTestCase: XCTestCase {
|
||||
|
||||
func test_initializer_shouldSetSafeAreaDevice_toIPhoneX() {
|
||||
func test_initializer_shouldSetCorrectSafeAreaDevice() {
|
||||
// Given
|
||||
let deviceIdentifiers = ["iPhone10,3", "iPhone10,6", "iPhone11,2", "iPhone11,4", "iPhone11,6"]
|
||||
deviceIdentifiers.forEach { deviceIdentifier in
|
||||
let identifiersToSafeAreaDeviceMap: [String: NotchGradientLoadingBarViewModel.SafeAreaDevice] = [
|
||||
"iPhone10,3": .iPhoneX,
|
||||
"iPhone10,6": .iPhoneX,
|
||||
"iPhone11,2": .iPhoneXS,
|
||||
"iPhone11,4": .iPhoneXSMax,
|
||||
"iPhone11,6": .iPhoneXSMax,
|
||||
"iPhone11,8": .iPhoneXR,
|
||||
"iPhone12,1": .iPhone11,
|
||||
"iPhone12,3": .iPhone11Pro,
|
||||
"iPhone12,5": .iPhone11ProMax,
|
||||
"iPhone13,1": .iPhone12Mini,
|
||||
"iPhone13,2": .iPhone12,
|
||||
"iPhone13,3": .iPhone12Pro,
|
||||
"iPhone13,4": .iPhone12ProMax,
|
||||
"iPhone14,4": .iPhone13Mini,
|
||||
"iPhone14,5": .iPhone13,
|
||||
"iPhone14,2": .iPhone13Pro,
|
||||
"iPhone14,3": .iPhone13ProMax,
|
||||
]
|
||||
|
||||
identifiersToSafeAreaDeviceMap.forEach { deviceIdentifier, safeAreaDevice in
|
||||
// When
|
||||
let viewModel = NotchGradientLoadingBarViewModel(deviceIdentifier: deviceIdentifier)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(viewModel.safeAreaDevice, .iPhoneX)
|
||||
}
|
||||
}
|
||||
|
||||
func test_initializer_shouldSetSafeAreaDevice_toIPhoneXR() {
|
||||
// Given
|
||||
let deviceIdentifier = "iPhone11,8"
|
||||
|
||||
// When
|
||||
let viewModel = NotchGradientLoadingBarViewModel(deviceIdentifier: deviceIdentifier)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(viewModel.safeAreaDevice, .iPhoneXR)
|
||||
}
|
||||
|
||||
func test_initializer_shouldSetSafeAreaDevice_toIPhone11() {
|
||||
// Given
|
||||
let deviceIdentifier = "iPhone12,1"
|
||||
|
||||
// When
|
||||
let viewModel = NotchGradientLoadingBarViewModel(deviceIdentifier: deviceIdentifier)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(viewModel.safeAreaDevice, .iPhone11)
|
||||
}
|
||||
|
||||
func test_initializer_shouldSetSafeAreaDevice_toIPhone11Pro() {
|
||||
// Given
|
||||
let deviceIdentifier = "iPhone12,3"
|
||||
|
||||
// When
|
||||
let viewModel = NotchGradientLoadingBarViewModel(deviceIdentifier: deviceIdentifier)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(viewModel.safeAreaDevice, .iPhone11Pro)
|
||||
}
|
||||
|
||||
func test_initializer_shouldSetSafeAreaDevice_toIPhone11ProMax() {
|
||||
// Given
|
||||
let deviceIdentifier = "iPhone12,5"
|
||||
|
||||
// When
|
||||
let viewModel = NotchGradientLoadingBarViewModel(deviceIdentifier: deviceIdentifier)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(viewModel.safeAreaDevice, .iPhone11ProMax)
|
||||
}
|
||||
|
||||
func test_initializer_shouldSetSafeAreaDevice_toIPhone12() {
|
||||
// Given
|
||||
let deviceIdentifiers = ["iPhone13,1", "iPhone13,2", "iPhone13,3", "iPhone13,4"]
|
||||
deviceIdentifiers.forEach { deviceIdentifier in
|
||||
|
||||
// When
|
||||
let viewModel = NotchGradientLoadingBarViewModel(deviceIdentifier: deviceIdentifier)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(viewModel.safeAreaDevice, .iPhone12)
|
||||
}
|
||||
}
|
||||
|
||||
func test_initializer_shouldSetSafeAreaDevice_toIPhone13() {
|
||||
// Given
|
||||
let deviceIdentifiers = ["iPhone14,4", "iPhone14,5", "iPhone14,2", "iPhone14,3"]
|
||||
deviceIdentifiers.forEach { deviceIdentifier in
|
||||
|
||||
// When
|
||||
let viewModel = NotchGradientLoadingBarViewModel(deviceIdentifier: deviceIdentifier)
|
||||
|
||||
// Then
|
||||
XCTAssertEqual(viewModel.safeAreaDevice, .iPhone13)
|
||||
XCTAssertEqual(viewModel.safeAreaDevice, safeAreaDevice)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
PODS:
|
||||
- GradientLoadingBar (2.3.1):
|
||||
- GradientLoadingBar (2.3.2):
|
||||
- LightweightObservable (~> 2.1)
|
||||
- LightweightObservable (2.2.1)
|
||||
- SnapshotTesting (1.9.0)
|
||||
@@ -33,7 +33,7 @@ CHECKOUT OPTIONS:
|
||||
:git: https://github.com/fxm90/SwiftConfigurationFiles.git
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
GradientLoadingBar: 86d26001466ce8ad44262d9b83fb9cdf6d60623c
|
||||
GradientLoadingBar: 0fb63c35e73bb8c56689e9ffd7a46e754fea8a15
|
||||
LightweightObservable: 64d0f623a4eec857e2680476380a08f3117a1a92
|
||||
SnapshotTesting: 6141c48b6aa76ead61431ca665c14ab9a066c53b
|
||||
SwiftConfigurationFiles: 1cf2228a911ebed9f42f8dec077bb634f04ca6c8
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "GradientLoadingBar",
|
||||
"version": "2.3.1",
|
||||
"version": "2.3.2",
|
||||
"summary": "A customizable animated gradient loading bar.",
|
||||
"description": "A customizable animated gradient loading bar.\nInspired by https://codepen.io/marcobiedermann/pen/LExXWW",
|
||||
"homepage": "https://github.com/fxm90/GradientLoadingBar",
|
||||
@@ -14,7 +14,7 @@
|
||||
},
|
||||
"source": {
|
||||
"git": "https://github.com/fxm90/GradientLoadingBar.git",
|
||||
"tag": "2.3.1"
|
||||
"tag": "2.3.2"
|
||||
},
|
||||
"swift_versions": "5.5",
|
||||
"platforms": {
|
||||
|
||||
Generated
+2
-2
@@ -1,5 +1,5 @@
|
||||
PODS:
|
||||
- GradientLoadingBar (2.3.1):
|
||||
- GradientLoadingBar (2.3.2):
|
||||
- LightweightObservable (~> 2.1)
|
||||
- LightweightObservable (2.2.1)
|
||||
- SnapshotTesting (1.9.0)
|
||||
@@ -33,7 +33,7 @@ CHECKOUT OPTIONS:
|
||||
:git: https://github.com/fxm90/SwiftConfigurationFiles.git
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
GradientLoadingBar: 86d26001466ce8ad44262d9b83fb9cdf6d60623c
|
||||
GradientLoadingBar: 0fb63c35e73bb8c56689e9ffd7a46e754fea8a15
|
||||
LightweightObservable: 64d0f623a4eec857e2680476380a08f3117a1a92
|
||||
SnapshotTesting: 6141c48b6aa76ead61431ca665c14ab9a066c53b
|
||||
SwiftConfigurationFiles: 1cf2228a911ebed9f42f8dec077bb634f04ca6c8
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.3.1</string>
|
||||
<string>2.3.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
Pod::Spec.new do |s|
|
||||
s.name = 'GradientLoadingBar'
|
||||
s.version = '2.3.1'
|
||||
s.version = '2.3.2'
|
||||
s.summary = 'A customizable animated gradient loading bar.'
|
||||
|
||||
# This description is used to generate tags and improve search results.
|
||||
|
||||
+22
-7
@@ -212,33 +212,48 @@ private extension NotchConfig {
|
||||
case .unknown:
|
||||
return nil
|
||||
|
||||
case .iPhoneX:
|
||||
/// The default configuration for the iPhone X and 11.
|
||||
case .iPhoneX, .iPhoneXS, .iPhoneXSMax:
|
||||
/// The default configuration for the iPhone X.
|
||||
/// Values are based on <https://www.paintcodeapp.com/news/iphone-x-screen-demystified>.
|
||||
self.init(notchWidth: 208,
|
||||
self.init(notchWidth: 209,
|
||||
largeCircleRadius: 22.5,
|
||||
largeCircleVerticalOffset: -4.75,
|
||||
transform: CGAffineTransform(translationX: 0.33, y: 0))
|
||||
transform: safeAreaDevice == .iPhoneXSMax ? .identity : CGAffineTransform(translationX: 0.33, y: 0))
|
||||
|
||||
case .iPhoneXR, .iPhone11:
|
||||
self.init(notchWidth: 230.5,
|
||||
self.init(notchWidth: 230,
|
||||
largeCircleRadius: 24,
|
||||
largeCircleVerticalOffset: -3.5,
|
||||
transform: .identity)
|
||||
|
||||
// The "iPhone 11 Pro" and "iPhone 11 Pro Max" have a smaller notch than the "iPhone 11".
|
||||
case .iPhone11Pro, .iPhone11ProMax:
|
||||
self.init(notchWidth: 209,
|
||||
largeCircleRadius: 21,
|
||||
largeCircleVerticalOffset: -3.5,
|
||||
transform: safeAreaDevice == .iPhone11ProMax ? .identity : CGAffineTransform(translationX: 0.33, y: 0))
|
||||
|
||||
// The "iPhone 12 Mini" has a larger notch than the "iPhone 12".
|
||||
case .iPhone12Mini:
|
||||
self.init(notchWidth: 226,
|
||||
largeCircleRadius: 24,
|
||||
largeCircleVerticalOffset: -2,
|
||||
transform: .identity)
|
||||
|
||||
case .iPhone12:
|
||||
case .iPhone12, .iPhone12Pro, .iPhone12ProMax:
|
||||
self.init(notchWidth: 209.5,
|
||||
largeCircleRadius: 21,
|
||||
largeCircleVerticalOffset: -1.75,
|
||||
transform: .identity)
|
||||
|
||||
case .iPhone13:
|
||||
// The "iPhone 13 Mini" has a larger notch than the "iPhone 13".
|
||||
case .iPhone13Mini:
|
||||
self.init(notchWidth: 174.75,
|
||||
largeCircleRadius: 24.5,
|
||||
largeCircleVerticalOffset: 0.5,
|
||||
transform: .identity)
|
||||
|
||||
case .iPhone13, .iPhone13Pro, .iPhone13ProMax:
|
||||
// The iPhone 13 specific configuration: ‟iPhone 13 notch is 20% smaller in width, but it is also a little taller in height‟.
|
||||
// Source: <https://9to5mac.com/2021/09/14/iphone-13-notch-smaller-but-bigger>.
|
||||
self.init(notchWidth: 161,
|
||||
|
||||
+36
-4
@@ -15,13 +15,20 @@ final class NotchGradientLoadingBarViewModel {
|
||||
enum SafeAreaDevice {
|
||||
case unknown
|
||||
case iPhoneX
|
||||
case iPhoneXS
|
||||
case iPhoneXSMax
|
||||
case iPhoneXR
|
||||
case iPhone11
|
||||
// The "iPhone 11 Pro" and "iPhone 11 Pro Max" have a smaller notch than the "iPhone 11".
|
||||
case iPhone11Pro
|
||||
case iPhone11ProMax
|
||||
case iPhone12Mini
|
||||
case iPhone12
|
||||
case iPhone12Pro
|
||||
case iPhone12ProMax
|
||||
case iPhone13Mini
|
||||
case iPhone13
|
||||
case iPhone13Pro
|
||||
case iPhone13ProMax
|
||||
}
|
||||
|
||||
// MARK: - Public properties
|
||||
@@ -44,10 +51,17 @@ private extension NotchGradientLoadingBarViewModel.SafeAreaDevice {
|
||||
///
|
||||
/// - Note: This is taken from <https://stackoverflow.com/a/26962452/3532505>
|
||||
init(deviceIdentifier: String) {
|
||||
// swiftlint:disable:previous cyclomatic_complexity
|
||||
switch deviceIdentifier {
|
||||
case "iPhone10,3", "iPhone10,6", "iPhone11,2", "iPhone11,4", "iPhone11,6":
|
||||
case "iPhone10,3", "iPhone10,6":
|
||||
self = .iPhoneX
|
||||
|
||||
case "iPhone11,2":
|
||||
self = .iPhoneXS
|
||||
|
||||
case "iPhone11,4", "iPhone11,6":
|
||||
self = .iPhoneXSMax
|
||||
|
||||
case "iPhone11,8":
|
||||
self = .iPhoneXR
|
||||
|
||||
@@ -60,12 +74,30 @@ private extension NotchGradientLoadingBarViewModel.SafeAreaDevice {
|
||||
case "iPhone12,5":
|
||||
self = .iPhone11ProMax
|
||||
|
||||
case "iPhone13,1", "iPhone13,2", "iPhone13,3", "iPhone13,4":
|
||||
case "iPhone13,1":
|
||||
self = .iPhone12Mini
|
||||
|
||||
case "iPhone13,2":
|
||||
self = .iPhone12
|
||||
|
||||
case "iPhone14,4", "iPhone14,5", "iPhone14,2", "iPhone14,3":
|
||||
case "iPhone13,3":
|
||||
self = .iPhone12Pro
|
||||
|
||||
case "iPhone13,4":
|
||||
self = .iPhone12ProMax
|
||||
|
||||
case "iPhone14,4":
|
||||
self = .iPhone13Mini
|
||||
|
||||
case "iPhone14,5":
|
||||
self = .iPhone13
|
||||
|
||||
case "iPhone14,2":
|
||||
self = .iPhone13Pro
|
||||
|
||||
case "iPhone14,3":
|
||||
self = .iPhone13ProMax
|
||||
|
||||
default:
|
||||
self = .unknown
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user