From 8d7a6267137d78f6fb4da32cf9cf1d4e234df7de Mon Sep 17 00:00:00 2001 From: Nishant Karajgikar Date: Fri, 30 Apr 2021 13:57:26 -0400 Subject: [PATCH 1/9] [style] Expose computed vars for operators + arguments of expressions (#307) * Expose computed vars for operators + arguments of expressions * Support string based arrays as valid expression argument * Refactor ExpressionBuilder * review comment * cleanup Remove check for iOS 11 Update LogoView to make class and properties internal Update OrnamentsManager.options documentation Updated the changelog Remove options parameter from MapConfig.setupOrnaments() Updated changelog to note that MapView.update no longer used for ornaments --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05bf107bd55..3dd4405568c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,8 @@ Mapbox welcomes participation and contributions from everyone. ### Features ✨ and improvements 🏁 - `OrnamentsManager` is now a public class and can be accessed via the `MapView`'s `ornaments` property. -- `CompassDirectionFormatter` is now public. It provides a string representation of a `CLLocationDirection` and supports the same languages as in pre-v10 versions of the Maps SDK. ([#300](https://github.com/mapbox/mapbox-maps-ios/pull/300)) +- `CompassDirectionFormatter` is now public. It provides a string representation of a `CLLocationDirection` and supports the same languages as in pre-v10 versions of the Maps SDK. ([#300](https://github.com/mapbox/mapbox-maps-ios/pull/300))- `OrnamentOptions` should now be accessed via `MapView.ornaments.options`. Updates can be applied directly to the `options` property. Previously the map's ornament options were updated via `MapConfig.ornaments`. ([#310](https://github.com/mapbox/mapbox-maps-ios/pull/310)) +- The `LogoView` class is now private. ([#310](https://github.com/mapbox/mapbox-maps-ios/pull/310)) ## 10.0.0-beta.18.1 - April 28, 2021 From 7577e09a1ccd209e0ead99b58407750b72961ab5 Mon Sep 17 00:00:00 2001 From: Jordan Kiley Date: Fri, 30 Apr 2021 09:57:18 -0400 Subject: [PATCH 2/9] Begin to break OrnamentOptions into nested structs --- .../Ornaments/OrnamentOptions.swift | 32 +++++++++++++------ .../Ornaments/OrnamentsManager.swift | 2 +- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift index 6156f199bc7..8266cb27fcd 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift @@ -10,16 +10,10 @@ private let defaultOrnamentsMargin = CGPoint(x: 8.0, y: 8.0) public struct OrnamentOptions: Equatable { // MARK: - Scale Bar - - public var scaleBarPosition: OrnamentPosition = .topLeft - public var scaleBarMargins: CGPoint = defaultOrnamentsMargin - public var scaleBarVisibility: OrnamentVisibility = .adaptive + public var scaleBarOptions: ScaleBarOptions = ScaleBarOptions() // MARK: - Compass - - public var compassViewPosition: OrnamentPosition = .topRight - public var compassViewMargins: CGPoint = defaultOrnamentsMargin - public var compassVisibility: OrnamentVisibility = .adaptive + public var compassViewOptions: CompassViewOptions = CompassViewOptions() // MARK: - Logo View @@ -29,13 +23,31 @@ public struct OrnamentOptions: Equatable { information. See https://docs.mapbox.com/help/how-mapbox-works/attribution/ for details. */ + public var logoViewOptions: LogoViewOptions = LogoViewOptions() + + // MARK: - Attribution Button + public var attributionButtonOptions: AttributionViewOptions = AttributionViewOptions() +} + +public struct ScaleBarOptions: Equatable { + public var scaleBarPosition: OrnamentPosition = .topLeft + public var scaleBarMargins: CGPoint = defaultOrnamentsMargin + public var scaleBarVisibility: OrnamentVisibility = .adaptive +} + +public struct CompassViewOptions: Equatable { + public var compassViewPosition: OrnamentPosition = .topRight + public var compassViewMargins: CGPoint = defaultOrnamentsMargin + public var compassVisibility: OrnamentVisibility = .adaptive +} +public struct LogoViewOptions: Equatable { public var _logoViewIsVisible: Bool = true public var logoViewPosition: OrnamentPosition = .bottomLeft public var logoViewMargins: CGPoint = defaultOrnamentsMargin +} - // MARK: - Attribution Button - +public struct AttributionViewOptions: Equatable { public var _attributionButtonIsVisible: Bool = true public var attributionButtonPosition: OrnamentPosition = .bottomRight public var attributionButtonMargins: CGPoint = defaultOrnamentsMargin diff --git a/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift b/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift index 1ea36595c08..15080fda3e4 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift @@ -44,7 +44,7 @@ public class OrnamentsManager: NSObject { view.addSubview(scalebarView) // Compass View - compassView = MapboxCompassOrnamentView(visibility: options.compassVisibility) + compassView = MapboxCompassOrnamentView(visibility: options.compassViewOptions.compassVisibility) compassView.translatesAutoresizingMaskIntoConstraints = false compassView.tapAction = { [weak view] in view?.compassTapped() From ac34fb63c04dbe741af8fc7b49ddc2ddbe91e6b4 Mon Sep 17 00:00:00 2001 From: Jordan Kiley Date: Mon, 3 May 2021 14:01:07 -0400 Subject: [PATCH 3/9] Use separate structs for Logo/Attribution and Scale/Compass --- .../Ornaments/OrnamentOptions.swift | 37 ++++++------------- .../Ornaments/OrnamentsManager.swift | 26 ++++++++----- 2 files changed, 29 insertions(+), 34 deletions(-) diff --git a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift index 8266cb27fcd..2b2466a6717 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift @@ -10,11 +10,10 @@ private let defaultOrnamentsMargin = CGPoint(x: 8.0, y: 8.0) public struct OrnamentOptions: Equatable { // MARK: - Scale Bar - public var scaleBarOptions: ScaleBarOptions = ScaleBarOptions() + public var scaleBarOptions: CompassScaleBarOptions = CompassScaleBarOptions(position: .topLeft) // MARK: - Compass - public var compassViewOptions: CompassViewOptions = CompassViewOptions() - + public var compassViewOptions: CompassScaleBarOptions = CompassScaleBarOptions(position: .topRight) // MARK: - Logo View /** @@ -23,32 +22,20 @@ public struct OrnamentOptions: Equatable { information. See https://docs.mapbox.com/help/how-mapbox-works/attribution/ for details. */ - public var logoViewOptions: LogoViewOptions = LogoViewOptions() + public var logoViewOptions: AttributionLogoViewOptions = AttributionLogoViewOptions(position: .bottomLeft) // MARK: - Attribution Button - public var attributionButtonOptions: AttributionViewOptions = AttributionViewOptions() -} - -public struct ScaleBarOptions: Equatable { - public var scaleBarPosition: OrnamentPosition = .topLeft - public var scaleBarMargins: CGPoint = defaultOrnamentsMargin - public var scaleBarVisibility: OrnamentVisibility = .adaptive -} - -public struct CompassViewOptions: Equatable { - public var compassViewPosition: OrnamentPosition = .topRight - public var compassViewMargins: CGPoint = defaultOrnamentsMargin - public var compassVisibility: OrnamentVisibility = .adaptive + public var attributionButtonOptions: AttributionLogoViewOptions = AttributionLogoViewOptions(position: .bottomLeft) } -public struct LogoViewOptions: Equatable { - public var _logoViewIsVisible: Bool = true - public var logoViewPosition: OrnamentPosition = .bottomLeft - public var logoViewMargins: CGPoint = defaultOrnamentsMargin +public struct CompassScaleBarOptions: Equatable { + public var position: OrnamentPosition + public var margins: CGPoint = defaultOrnamentsMargin + public var visibility: OrnamentVisibility = .adaptive } -public struct AttributionViewOptions: Equatable { - public var _attributionButtonIsVisible: Bool = true - public var attributionButtonPosition: OrnamentPosition = .bottomRight - public var attributionButtonMargins: CGPoint = defaultOrnamentsMargin +public struct AttributionLogoViewOptions: Equatable { + public var position: OrnamentPosition + public var margins: CGPoint = defaultOrnamentsMargin + public var _isVisible: Bool = true } diff --git a/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift b/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift index 15080fda3e4..c9d7c6c3151 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift @@ -44,7 +44,7 @@ public class OrnamentsManager: NSObject { view.addSubview(scalebarView) // Compass View - compassView = MapboxCompassOrnamentView(visibility: options.compassViewOptions.compassVisibility) + compassView = MapboxCompassOrnamentView(visibility: options.compassViewOptions.visibility) compassView.translatesAutoresizingMaskIntoConstraints = false compassView.tapAction = { [weak view] in view?.compassTapped() @@ -80,25 +80,33 @@ public class OrnamentsManager: NSObject { constraints.removeAll() // Update the position for the ornaments - let logoViewConstraints = constraints(with: logoView, position: options.logoViewPosition, margins: options.logoViewMargins) + let logoViewConstraints = constraints(with: logoView, + position: options.logoViewOptions.position, + margins: options.logoViewOptions.margins) constraints.append(contentsOf: logoViewConstraints) - let compassViewConstraints = constraints(with: compassView, position: options.compassViewPosition, margins: options.compassViewMargins) + let compassViewConstraints = constraints(with: compassView, + position: options.compassViewOptions.position, + margins: options.compassViewOptions.margins) constraints.append(contentsOf: compassViewConstraints) - let scaleBarViewConstraints = constraints(with: scalebarView, position: options.scaleBarPosition, margins: options.scaleBarMargins) + let scaleBarViewConstraints = constraints(with: scalebarView, + position: options.scaleBarOptions.position, + margins: options.scaleBarOptions.margins) constraints.append(contentsOf: scaleBarViewConstraints) - let attributionButtonConstraints = constraints(with: attributionButton, position: options.attributionButtonPosition, margins: options.attributionButtonMargins) + let attributionButtonConstraints = constraints(with: attributionButton, + position: options.attributionButtonOptions.position, + margins: options.attributionButtonOptions.margins) constraints.append(contentsOf: attributionButtonConstraints) // Activate new constraints NSLayoutConstraint.activate(constraints) - logoView.isHidden = !options._logoViewIsVisible - scalebarView.isHidden = options.scaleBarVisibility == .hidden - compassView.isHidden = options.compassVisibility == .hidden - attributionButton.isHidden = !options._attributionButtonIsVisible + logoView.isHidden = !options.logoViewOptions._isVisible + scalebarView.isHidden = options.scaleBarOptions.visibility == .hidden + compassView.isHidden = options.compassViewOptions.visibility == .hidden + attributionButton.isHidden = !options.attributionButtonOptions._isVisible } private func constraints(with view: UIView, position: OrnamentPosition, margins: CGPoint) -> [NSLayoutConstraint] { From 1e7b78d72e19ee231cd70c24f63af328f4da1770 Mon Sep 17 00:00:00 2001 From: Jordan Kiley Date: Tue, 4 May 2021 09:44:22 -0400 Subject: [PATCH 4/9] Update examples and tests --- .../Examples/All Examples/BasicMapExample.swift | 2 +- .../MapboxMaps/Ornaments/OrnamentOptions.swift | 15 ++++++++++++++- .../Ornaments/OrnamentManagerTests.swift | 8 ++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Apps/Examples/Examples/All Examples/BasicMapExample.swift b/Apps/Examples/Examples/All Examples/BasicMapExample.swift index c72ff63dc7a..ad2fd9eddff 100644 --- a/Apps/Examples/Examples/All Examples/BasicMapExample.swift +++ b/Apps/Examples/Examples/All Examples/BasicMapExample.swift @@ -12,7 +12,7 @@ public class BasicMapExample: UIViewController, ExampleProtocol { mapView = MapView(frame: view.bounds) mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - mapView.ornaments.options.scaleBarVisibility = .visible + mapView.ornaments.options.scaleBarOptions.visibility = .visible view.addSubview(mapView) } diff --git a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift index 2b2466a6717..8bff74c679d 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift @@ -10,9 +10,12 @@ private let defaultOrnamentsMargin = CGPoint(x: 8.0, y: 8.0) public struct OrnamentOptions: Equatable { // MARK: - Scale Bar + /// The ornament options for the scale bar. The scale bar has a default position of `.topLeft`. public var scaleBarOptions: CompassScaleBarOptions = CompassScaleBarOptions(position: .topLeft) // MARK: - Compass + + /// The ornament options for the compass view. The compass view has a default position of `.topRight`. public var compassViewOptions: CompassScaleBarOptions = CompassScaleBarOptions(position: .topRight) // MARK: - Logo View @@ -22,20 +25,30 @@ public struct OrnamentOptions: Equatable { information. See https://docs.mapbox.com/help/how-mapbox-works/attribution/ for details. */ + /// The ornament options for the logo view. The logo view has a default position of `.bottomLeft`. public var logoViewOptions: AttributionLogoViewOptions = AttributionLogoViewOptions(position: .bottomLeft) // MARK: - Attribution Button - public var attributionButtonOptions: AttributionLogoViewOptions = AttributionLogoViewOptions(position: .bottomLeft) + /// The orname options for the attribution button. The attribution button has a default position of `.bottomRight`. + public var attributionButtonOptions: AttributionLogoViewOptions = AttributionLogoViewOptions(position: .bottomRight) } +/// Used to configure position, margin, and visibility for the map's scale bar and compass view. public struct CompassScaleBarOptions: Equatable { public var position: OrnamentPosition + /// The default value for this property is `CGPoint(x: 8.0, y: 8.0)`. public var margins: CGPoint = defaultOrnamentsMargin + /// The default value for this property is `.adaptive`. public var visibility: OrnamentVisibility = .adaptive } +/// Used to configure the map's logo view and attribution button. public struct AttributionLogoViewOptions: Equatable { public var position: OrnamentPosition + + /// The default value for this property is `CGPoint(x: 8.0, y: 8.0)`. public var margins: CGPoint = defaultOrnamentsMargin + + /// The default value for this property is `true`. public var _isVisible: Bool = true } diff --git a/Tests/MapboxMapsTests/Ornaments/OrnamentManagerTests.swift b/Tests/MapboxMapsTests/Ornaments/OrnamentManagerTests.swift index 6883781f7ab..552102e0b7a 100644 --- a/Tests/MapboxMapsTests/Ornaments/OrnamentManagerTests.swift +++ b/Tests/MapboxMapsTests/Ornaments/OrnamentManagerTests.swift @@ -27,7 +27,7 @@ class OrnamentManagerTests: XCTestCase { func testInitializer() { XCTAssertEqual(ornamentSupportableView.subviews.count, 4) - XCTAssertEqual(ornamentsManager.options.attributionButtonMargins, options.attributionButtonMargins) + XCTAssertEqual(ornamentsManager.options.attributionButtonOptions.margins, options.attributionButtonOptions.margins) } @@ -38,12 +38,12 @@ class OrnamentManagerTests: XCTestCase { return } - XCTAssertEqual(options.compassVisibility, .adaptive) - options.compassVisibility = .hidden + XCTAssertEqual(options.compassViewOptions.visibility, .adaptive) + options.compassViewOptions.visibility = .hidden ornamentsManager.options = options - XCTAssertEqual(options.compassVisibility, .hidden) + XCTAssertEqual(options.compassViewOptions.visibility, .hidden) let updatedSubviews = ornamentSupportableView.subviews.filter { $0.isKind(of: MapboxCompassOrnamentView.self) } guard let isUpdatedCompassHidden = updatedSubviews.first?.isHidden else { From 83ede6bde8846c7ddd30616fd4da989f81f142e8 Mon Sep 17 00:00:00 2001 From: Jordan Kiley Date: Wed, 5 May 2021 10:18:20 -0400 Subject: [PATCH 5/9] Fix a typo --- Sources/MapboxMaps/Ornaments/OrnamentOptions.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift index 8bff74c679d..28c33a2f2a5 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift @@ -29,7 +29,7 @@ public struct OrnamentOptions: Equatable { public var logoViewOptions: AttributionLogoViewOptions = AttributionLogoViewOptions(position: .bottomLeft) // MARK: - Attribution Button - /// The orname options for the attribution button. The attribution button has a default position of `.bottomRight`. + /// The ornament options for the attribution button. The attribution button has a default position of `.bottomRight`. public var attributionButtonOptions: AttributionLogoViewOptions = AttributionLogoViewOptions(position: .bottomRight) } From ecceaf9ec3ae1e45cacc7f9a26f28c7865a33a40 Mon Sep 17 00:00:00 2001 From: Jordan Kiley Date: Wed, 5 May 2021 10:19:57 -0400 Subject: [PATCH 6/9] Fix inconsistent spacing --- Sources/MapboxMaps/Ornaments/OrnamentOptions.swift | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift index 28c33a2f2a5..4d2977d7b54 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift @@ -17,8 +17,8 @@ public struct OrnamentOptions: Equatable { /// The ornament options for the compass view. The compass view has a default position of `.topRight`. public var compassViewOptions: CompassScaleBarOptions = CompassScaleBarOptions(position: .topRight) - // MARK: - Logo View + // MARK: - Logo View /** Per our terms of service, a Mapbox map is required to display both a Mapbox logo as well as an information icon that contains attribution @@ -45,10 +45,8 @@ public struct CompassScaleBarOptions: Equatable { /// Used to configure the map's logo view and attribution button. public struct AttributionLogoViewOptions: Equatable { public var position: OrnamentPosition - /// The default value for this property is `CGPoint(x: 8.0, y: 8.0)`. public var margins: CGPoint = defaultOrnamentsMargin - /// The default value for this property is `true`. public var _isVisible: Bool = true } From b74bb809edd92ca6a90ae6a7d5ed444ee8eb774a Mon Sep 17 00:00:00 2001 From: Jordan Kiley Date: Wed, 5 May 2021 10:54:38 -0400 Subject: [PATCH 7/9] Split structs up --- .../Ornaments/OrnamentOptions.swift | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift index 4d2977d7b54..7c1145bb85d 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift @@ -10,13 +10,13 @@ private let defaultOrnamentsMargin = CGPoint(x: 8.0, y: 8.0) public struct OrnamentOptions: Equatable { // MARK: - Scale Bar - /// The ornament options for the scale bar. The scale bar has a default position of `.topLeft`. - public var scaleBarOptions: CompassScaleBarOptions = CompassScaleBarOptions(position: .topLeft) + /// The ornament options for the scale bar. + public var scaleBarOptions = ScaleBarViewOptions() // MARK: - Compass - /// The ornament options for the compass view. The compass view has a default position of `.topRight`. - public var compassViewOptions: CompassScaleBarOptions = CompassScaleBarOptions(position: .topRight) + /// The ornament options for the compass view. + public var compassViewOptions = CompassViewOptions() // MARK: - Logo View /** @@ -25,26 +25,53 @@ public struct OrnamentOptions: Equatable { information. See https://docs.mapbox.com/help/how-mapbox-works/attribution/ for details. */ - /// The ornament options for the logo view. The logo view has a default position of `.bottomLeft`. - public var logoViewOptions: AttributionLogoViewOptions = AttributionLogoViewOptions(position: .bottomLeft) + /// The ornament options for the logo view. + public var logoViewOptions = LogoViewOptions() // MARK: - Attribution Button - /// The ornament options for the attribution button. The attribution button has a default position of `.bottomRight`. - public var attributionButtonOptions: AttributionLogoViewOptions = AttributionLogoViewOptions(position: .bottomRight) + /// The ornament options for the attribution button. + public var attributionButtonOptions = AttributionButtonOptions() } -/// Used to configure position, margin, and visibility for the map's scale bar and compass view. -public struct CompassScaleBarOptions: Equatable { - public var position: OrnamentPosition +public protocol BaseOrnamentOptions: Equatable { + var position: OrnamentPosition { get set } + var margins: CGPoint { get set } +} + +/// Used to configure position, margin, and visibility for the map's scale bar. +public struct ScaleBarViewOptions: BaseOrnamentOptions { + /// The default value for this property is `.topLeft`. + public var position: OrnamentPosition = .topLeft + /// The default value for this property is `CGPoint(x: 8.0, y: 8.0)`. + public var margins: CGPoint = defaultOrnamentsMargin + /// The default value for this property is `.adaptive`. + public var visibility: OrnamentVisibility = .adaptive +} + +/// Used to configure position, margin, and visibility for the map's compass view. +public struct CompassViewOptions: BaseOrnamentOptions { + /// The default value for this property is `.topRight`. + public var position: OrnamentPosition = .topRight /// The default value for this property is `CGPoint(x: 8.0, y: 8.0)`. public var margins: CGPoint = defaultOrnamentsMargin /// The default value for this property is `.adaptive`. public var visibility: OrnamentVisibility = .adaptive } -/// Used to configure the map's logo view and attribution button. -public struct AttributionLogoViewOptions: Equatable { - public var position: OrnamentPosition +/// Used to configure position, margin, and visibility for the map's attribution button. +public struct AttributionButtonOptions: Equatable { + /// The default value for this property is `.bottomRight`. + public var position: OrnamentPosition = .bottomRight + /// The default value for this property is `CGPoint(x: 8.0, y: 8.0)`. + public var margins: CGPoint = defaultOrnamentsMargin + /// The default value for this property is `true`. + public var _isVisible: Bool = true +} + +/// Used to configure position, margin, and visibility for the map's logo view. +public struct LogoViewOptions: Equatable { + /// The default value for this property is `.bottomLeft`. + public var position: OrnamentPosition = .bottomLeft /// The default value for this property is `CGPoint(x: 8.0, y: 8.0)`. public var margins: CGPoint = defaultOrnamentsMargin /// The default value for this property is `true`. From a07f2de101006a64acb3a6e9c3cd238a2de2afde Mon Sep 17 00:00:00 2001 From: Jordan Kiley Date: Wed, 5 May 2021 11:11:19 -0400 Subject: [PATCH 8/9] Remove Options suffix from OrnamentOptions properties --- .../All Examples/BasicMapExample.swift | 2 +- .../Ornaments/OrnamentOptions.swift | 8 +++--- .../Ornaments/OrnamentsManager.swift | 26 +++++++++---------- .../Ornaments/OrnamentManagerTests.swift | 8 +++--- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Apps/Examples/Examples/All Examples/BasicMapExample.swift b/Apps/Examples/Examples/All Examples/BasicMapExample.swift index ad2fd9eddff..4b50d4cea6c 100644 --- a/Apps/Examples/Examples/All Examples/BasicMapExample.swift +++ b/Apps/Examples/Examples/All Examples/BasicMapExample.swift @@ -12,7 +12,7 @@ public class BasicMapExample: UIViewController, ExampleProtocol { mapView = MapView(frame: view.bounds) mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - mapView.ornaments.options.scaleBarOptions.visibility = .visible + mapView.ornaments.options.scaleBar.visibility = .visible view.addSubview(mapView) } diff --git a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift index 7c1145bb85d..0afba97e118 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentOptions.swift @@ -11,12 +11,12 @@ public struct OrnamentOptions: Equatable { // MARK: - Scale Bar /// The ornament options for the scale bar. - public var scaleBarOptions = ScaleBarViewOptions() + public var scaleBar = ScaleBarViewOptions() // MARK: - Compass /// The ornament options for the compass view. - public var compassViewOptions = CompassViewOptions() + public var compass = CompassViewOptions() // MARK: - Logo View /** @@ -26,11 +26,11 @@ public struct OrnamentOptions: Equatable { for details. */ /// The ornament options for the logo view. - public var logoViewOptions = LogoViewOptions() + public var logo = LogoViewOptions() // MARK: - Attribution Button /// The ornament options for the attribution button. - public var attributionButtonOptions = AttributionButtonOptions() + public var attributionButton = AttributionButtonOptions() } public protocol BaseOrnamentOptions: Equatable { diff --git a/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift b/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift index c9d7c6c3151..041c5931340 100644 --- a/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift +++ b/Sources/MapboxMaps/Ornaments/OrnamentsManager.swift @@ -44,7 +44,7 @@ public class OrnamentsManager: NSObject { view.addSubview(scalebarView) // Compass View - compassView = MapboxCompassOrnamentView(visibility: options.compassViewOptions.visibility) + compassView = MapboxCompassOrnamentView(visibility: options.compass.visibility) compassView.translatesAutoresizingMaskIntoConstraints = false compassView.tapAction = { [weak view] in view?.compassTapped() @@ -81,32 +81,32 @@ public class OrnamentsManager: NSObject { // Update the position for the ornaments let logoViewConstraints = constraints(with: logoView, - position: options.logoViewOptions.position, - margins: options.logoViewOptions.margins) + position: options.logo.position, + margins: options.logo.margins) constraints.append(contentsOf: logoViewConstraints) let compassViewConstraints = constraints(with: compassView, - position: options.compassViewOptions.position, - margins: options.compassViewOptions.margins) + position: options.compass.position, + margins: options.compass.margins) constraints.append(contentsOf: compassViewConstraints) let scaleBarViewConstraints = constraints(with: scalebarView, - position: options.scaleBarOptions.position, - margins: options.scaleBarOptions.margins) + position: options.scaleBar.position, + margins: options.scaleBar.margins) constraints.append(contentsOf: scaleBarViewConstraints) let attributionButtonConstraints = constraints(with: attributionButton, - position: options.attributionButtonOptions.position, - margins: options.attributionButtonOptions.margins) + position: options.attributionButton.position, + margins: options.attributionButton.margins) constraints.append(contentsOf: attributionButtonConstraints) // Activate new constraints NSLayoutConstraint.activate(constraints) - logoView.isHidden = !options.logoViewOptions._isVisible - scalebarView.isHidden = options.scaleBarOptions.visibility == .hidden - compassView.isHidden = options.compassViewOptions.visibility == .hidden - attributionButton.isHidden = !options.attributionButtonOptions._isVisible + logoView.isHidden = !options.logo._isVisible + scalebarView.isHidden = options.scaleBar.visibility == .hidden + compassView.isHidden = options.compass.visibility == .hidden + attributionButton.isHidden = !options.attributionButton._isVisible } private func constraints(with view: UIView, position: OrnamentPosition, margins: CGPoint) -> [NSLayoutConstraint] { diff --git a/Tests/MapboxMapsTests/Ornaments/OrnamentManagerTests.swift b/Tests/MapboxMapsTests/Ornaments/OrnamentManagerTests.swift index 552102e0b7a..21cb539e61c 100644 --- a/Tests/MapboxMapsTests/Ornaments/OrnamentManagerTests.swift +++ b/Tests/MapboxMapsTests/Ornaments/OrnamentManagerTests.swift @@ -27,7 +27,7 @@ class OrnamentManagerTests: XCTestCase { func testInitializer() { XCTAssertEqual(ornamentSupportableView.subviews.count, 4) - XCTAssertEqual(ornamentsManager.options.attributionButtonOptions.margins, options.attributionButtonOptions.margins) + XCTAssertEqual(ornamentsManager.options.attributionButton.margins, options.attributionButton.margins) } @@ -38,12 +38,12 @@ class OrnamentManagerTests: XCTestCase { return } - XCTAssertEqual(options.compassViewOptions.visibility, .adaptive) - options.compassViewOptions.visibility = .hidden + XCTAssertEqual(options.compass.visibility, .adaptive) + options.compass.visibility = .hidden ornamentsManager.options = options - XCTAssertEqual(options.compassViewOptions.visibility, .hidden) + XCTAssertEqual(options.compass.visibility, .hidden) let updatedSubviews = ornamentSupportableView.subviews.filter { $0.isKind(of: MapboxCompassOrnamentView.self) } guard let isUpdatedCompassHidden = updatedSubviews.first?.isHidden else { From 187658c05fa8aa1369ad26638d2f2d2a44f1dd12 Mon Sep 17 00:00:00 2001 From: Jordan Kiley Date: Wed, 5 May 2021 11:15:07 -0400 Subject: [PATCH 9/9] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3dd4405568c..4455ff97f89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Mapbox welcomes participation and contributions from everyone. * Making `bearing` and `pitch` parameters optional * Adding the `camera(for:camera:rect:)` variant - `OrnamentOptions` should now be accessed via `MapView.ornaments.options`. `MapConfig.ornaments` has been removed. Updates can be applied directly to `OrnamentsManager.options`. Previously the map's ornament options were updated on `MapConfig.ornaments` with `MapView.update`. ([#310](https://github.com/mapbox/mapbox-maps-ios/pull/310)) + - `OrnamentOptions` now uses structs to manage options for individual ornaments. For example, `OrnamentOptions.scaleBarPosition` is now `OrnamentOptions.scaleBar.position`. ([#318](https://github.com/mapbox/mapbox-maps-ios/pull/318)) - The `LogoView` class is now private. ([#310](https://github.com/mapbox/mapbox-maps-ios/pull/310)) ### Features ✨ and improvements 🏁