diff --git a/Example-macOS/AppDelegate.swift b/Example-macOS/AppDelegate.swift
new file mode 100644
index 00000000..80f37755
--- /dev/null
+++ b/Example-macOS/AppDelegate.swift
@@ -0,0 +1,30 @@
+//
+// AppDelegate.swift
+// Example-macOS
+//
+// Created by JH on 2024/5/26.
+//
+
+import Cocoa
+
+@main
+class AppDelegate: NSObject, NSApplicationDelegate {
+
+
+
+
+ func applicationDidFinishLaunching(_ aNotification: Notification) {
+ // Insert code here to initialize your application
+ }
+
+ func applicationWillTerminate(_ aNotification: Notification) {
+ // Insert code here to tear down your application
+ }
+
+ func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
+ return true
+ }
+
+
+}
+
diff --git a/Example-macOS/Assets.xcassets/AccentColor.colorset/Contents.json b/Example-macOS/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 00000000..eb878970
--- /dev/null
+++ b/Example-macOS/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Example-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..3f00db43
--- /dev/null
+++ b/Example-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,58 @@
+{
+ "images" : [
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Example-macOS/Assets.xcassets/Contents.json b/Example-macOS/Assets.xcassets/Contents.json
new file mode 100644
index 00000000..73c00596
--- /dev/null
+++ b/Example-macOS/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Example-macOS/Base.lproj/Main.storyboard b/Example-macOS/Base.lproj/Main.storyboard
new file mode 100644
index 00000000..b97eaf1e
--- /dev/null
+++ b/Example-macOS/Base.lproj/Main.storyboard
@@ -0,0 +1,757 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example-macOS/Example_macOS.entitlements b/Example-macOS/Example_macOS.entitlements
new file mode 100644
index 00000000..18aff0ce
--- /dev/null
+++ b/Example-macOS/Example_macOS.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.files.user-selected.read-only
+
+
+
diff --git a/Example-macOS/ViewController.swift b/Example-macOS/ViewController.swift
new file mode 100644
index 00000000..e30a9ca6
--- /dev/null
+++ b/Example-macOS/ViewController.swift
@@ -0,0 +1,93 @@
+//
+// ViewController.swift
+// Example-macOS
+//
+// Created by JH on 2024/5/26.
+//
+
+import Cocoa
+import NVActivityIndicatorView
+
+class ViewController: NSViewController {
+ @ViewLoading
+ @IBOutlet var collectionView: NSCollectionView
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+ collectionView.dataSource = self
+ collectionView.delegate = self
+ collectionView.register(CollectionViewItem.self, forItemWithIdentifier: .init(String(describing: CollectionViewItem.self)))
+ collectionView.enclosingScrollView?.scrollerStyle = .overlay
+ }
+
+ override var representedObject: Any? {
+ didSet {
+ // Update the view, if already loaded.
+ }
+ }
+
+ let allTypes = NVActivityIndicatorType.allCases.filter { $0 != .blank }
+}
+
+extension ViewController: NSCollectionViewDataSource, NSCollectionViewDelegate {
+ func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
+ allTypes.count
+ }
+
+ func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
+ let viewItem = collectionView.makeItem(withIdentifier: .init(String(describing: CollectionViewItem.self)), for: indexPath) as! CollectionViewItem
+ viewItem.type = allTypes[indexPath.item]
+ return viewItem
+ }
+}
+
+class CollectionViewItem: NSCollectionViewItem {
+ lazy var indicatorView: NVActivityIndicatorView = {
+ let indicatorView = NVActivityIndicatorView(frame: .zero, type: type)
+ view.addSubview(indicatorView)
+ indicatorView.translatesAutoresizingMaskIntoConstraints = false
+
+ NSLayoutConstraint.activate([
+ indicatorView.topAnchor.constraint(equalTo: view.topAnchor),
+ indicatorView.leftAnchor.constraint(equalTo: view.leftAnchor),
+ indicatorView.rightAnchor.constraint(equalTo: view.rightAnchor),
+ indicatorView.heightAnchor.constraint(equalTo: indicatorView.widthAnchor),
+ ])
+ indicatorView.layoutSubtreeIfNeeded()
+ indicatorView.startAnimating()
+ return indicatorView
+ }()
+
+ lazy var titleLabel: NSTextField = {
+ let titleLabel = NSTextField(labelWithString: "")
+ titleLabel.textColor = .labelColor
+ titleLabel.font = .systemFont(ofSize: 10)
+ view.addSubview(titleLabel)
+ titleLabel.translatesAutoresizingMaskIntoConstraints = false
+ NSLayoutConstraint.activate([
+ titleLabel.topAnchor.constraint(equalTo: indicatorView.bottomAnchor, constant: 10),
+ titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
+ ])
+ return titleLabel
+ }()
+
+ var type: NVActivityIndicatorType = .blank {
+ didSet {
+ indicatorView.type = type
+ indicatorView.stopAnimating()
+ indicatorView.startAnimating()
+ titleLabel.stringValue = type.animationName
+ }
+ }
+
+ override init(nibName nibNameOrNil: NSNib.Name?, bundle nibBundleOrNil: Bundle?) {
+ super.init(nibName: nil, bundle: nil)
+
+ }
+
+ @available(*, unavailable)
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
+ }
+}
diff --git a/Example/Example.entitlements b/Example/Example.entitlements
new file mode 100644
index 00000000..ee95ab7e
--- /dev/null
+++ b/Example/Example.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.network.client
+
+
+
diff --git a/Example/ViewController.swift b/Example/ViewController.swift
index 4bcddb6a..22a5714f 100644
--- a/Example/ViewController.swift
+++ b/Example/ViewController.swift
@@ -66,13 +66,15 @@ class ViewController: UIViewController, NVActivityIndicatorViewable {
type: indicatorType)
let animationTypeLabel = UILabel(frame: frame)
- animationTypeLabel.text = String(index)
+ animationTypeLabel.text = indicatorType.animationClassName.replacingOccurrences(of: "NVActivityIndicatorView.NVActivityIndicatorAnimation", with: "")
+ animationTypeLabel.font = .systemFont(ofSize: 10)
animationTypeLabel.sizeToFit()
animationTypeLabel.allowsDefaultTighteningForTruncation = true
animationTypeLabel.textColor = UIColor.white
- animationTypeLabel.frame.origin.x += 5
+ animationTypeLabel.frame.origin.x += 0
animationTypeLabel.frame.origin.y += CGFloat(cellHeight) - animationTypeLabel.frame.size.height
-
+ animationTypeLabel.frame.size.width = frame.width
+ animationTypeLabel.textAlignment = .center
activityIndicatorView.padding = 20
if indicatorType == NVActivityIndicatorType.orbit {
activityIndicatorView.padding = 0
diff --git a/NVActivityIndicatorView.podspec b/NVActivityIndicatorView.podspec
index ef6b9ebf..a96e4a28 100644
--- a/NVActivityIndicatorView.podspec
+++ b/NVActivityIndicatorView.podspec
@@ -9,6 +9,7 @@ Pod::Spec.new do |s|
s.social_media_url = 'http://twitter.com/ninjaprox'
s.documentation_url = 'https://nvactivityindicatorview.vinhis.me'
+ s.osx.deployment_target = '10.13'
s.ios.deployment_target = '9.0'
s.tvos.deployment_target = '9.0'
s.swift_version = '5.0'
@@ -25,5 +26,7 @@ Pod::Spec.new do |s|
end
s.default_subspec = 'Base'
- s.frameworks = 'UIKit', 'QuartzCore'
+ s.ios.frameworks = 'UIKit', 'QuartzCore'
+ s.tvos.frameworks = 'UIKit', 'QuartzCore'
+ s.osx.frameworks = 'AppKit', 'QuartzCore'
end
diff --git a/NVActivityIndicatorView.xcodeproj/project.pbxproj b/NVActivityIndicatorView.xcodeproj/project.pbxproj
index e03870a7..1b0d10d8 100644
--- a/NVActivityIndicatorView.xcodeproj/project.pbxproj
+++ b/NVActivityIndicatorView.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
@@ -13,12 +13,20 @@
1F1836E7248CEFC200583430 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1F1836E5248CEFC200583430 /* Main.storyboard */; };
1F1836E9248CEFC300583430 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F1836E8248CEFC300583430 /* Assets.xcassets */; };
1F1836EC248CEFC300583430 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1F1836EA248CEFC300583430 /* LaunchScreen.storyboard */; };
- 1F1836F2248CF08B00583430 /* NVActivityIndicatorViewExtended.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "NVActivityIndicatorView::NVActivityIndicatorViewExtended::Product" /* NVActivityIndicatorViewExtended.framework */; };
- 1F1836F3248CF08B00583430 /* NVActivityIndicatorViewExtended.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = "NVActivityIndicatorView::NVActivityIndicatorViewExtended::Product" /* NVActivityIndicatorViewExtended.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 1F1836F2248CF08B00583430 /* NVActivityIndicatorViewExtended.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "NVActivityIndicatorView::NVActivityIndicatorViewExtended::Product" /* NVActivityIndicatorViewExtended.framework */; platformFilters = (ios, maccatalyst, tvos, watchos, ); };
+ 1F1836F3248CF08B00583430 /* NVActivityIndicatorViewExtended.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = "NVActivityIndicatorView::NVActivityIndicatorViewExtended::Product" /* NVActivityIndicatorViewExtended.framework */; platformFilters = (ios, maccatalyst, tvos, watchos, ); settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1F183707248CF29F00583430 /* ActivityDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F183706248CF29F00583430 /* ActivityDataTests.swift */; };
1F18370B248CF31500583430 /* NVActivityIndicatorPresenterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F183708248CF31500583430 /* NVActivityIndicatorPresenterTests.swift */; };
1F18370C248CF31500583430 /* NVActivityIndicatorViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F183709248CF31500583430 /* NVActivityIndicatorViewTests.swift */; };
1F18370D248CF31500583430 /* NVActivityIndicatorTypeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F18370A248CF31500583430 /* NVActivityIndicatorTypeTests.swift */; };
+ E93F49372C03509F00857CBC /* Typealias.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93F49352C03509F00857CBC /* Typealias.swift */; };
+ E93F49382C03509F00857CBC /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93F49362C03509F00857CBC /* Extensions.swift */; };
+ E93F49412C03516E00857CBC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93F49402C03516E00857CBC /* AppDelegate.swift */; };
+ E93F49432C03516E00857CBC /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93F49422C03516E00857CBC /* ViewController.swift */; };
+ E93F49452C03516F00857CBC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E93F49442C03516F00857CBC /* Assets.xcassets */; };
+ E93F494D2C0351BF00857CBC /* NVActivityIndicatorView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "NVActivityIndicatorView::NVActivityIndicatorView::Product" /* NVActivityIndicatorView.framework */; };
+ E93F494E2C0351BF00857CBC /* NVActivityIndicatorView.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = "NVActivityIndicatorView::NVActivityIndicatorView::Product" /* NVActivityIndicatorView.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ E93F49532C0353CB00857CBC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E93F49462C03516F00857CBC /* Main.storyboard */; };
OBJ_102 /* NVActivityIndicatorPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_48 /* NVActivityIndicatorPresenter.swift */; };
OBJ_103 /* NVActivityIndicatorViewable.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_49 /* NVActivityIndicatorViewable.swift */; };
OBJ_105 /* NVActivityIndicatorView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "NVActivityIndicatorView::NVActivityIndicatorView::Product" /* NVActivityIndicatorView.framework */; };
@@ -84,6 +92,13 @@
remoteGlobalIDString = 1F1836DC248CEFC200583430;
remoteInfo = Example;
};
+ E93F494F2C0351BF00857CBC /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = OBJ_1 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = "NVActivityIndicatorView::NVActivityIndicatorView";
+ remoteInfo = NVActivityIndicatorView;
+ };
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -98,6 +113,17 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
+ E93F49512C0351BF00857CBC /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ E93F494E2C0351BF00857CBC /* NVActivityIndicatorView.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
@@ -117,6 +143,15 @@
1F183709248CF31500583430 /* NVActivityIndicatorViewTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NVActivityIndicatorViewTests.swift; sourceTree = ""; };
1F18370A248CF31500583430 /* NVActivityIndicatorTypeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NVActivityIndicatorTypeTests.swift; sourceTree = ""; };
1F73073E2BCFFEC700FBF25A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; };
+ E93F49352C03509F00857CBC /* Typealias.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Typealias.swift; sourceTree = ""; };
+ E93F49362C03509F00857CBC /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; };
+ E93F49392C0350FE00857CBC /* Example.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Example.entitlements; sourceTree = ""; };
+ E93F493E2C03516E00857CBC /* Example-macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example-macOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ E93F49402C03516E00857CBC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ E93F49422C03516E00857CBC /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
+ E93F49442C03516F00857CBC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ E93F49472C03516F00857CBC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ E93F49492C03516F00857CBC /* Example_macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Example_macOS.entitlements; sourceTree = ""; };
"NVActivityIndicatorView::NVActivityIndicatorView::Product" /* NVActivityIndicatorView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = NVActivityIndicatorView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
"NVActivityIndicatorView::NVActivityIndicatorViewExtended::Product" /* NVActivityIndicatorViewExtended.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = NVActivityIndicatorViewExtended.framework; sourceTree = BUILT_PRODUCTS_DIR; };
OBJ_10 /* NVActivityIndicatorAnimationAudioEqualizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NVActivityIndicatorAnimationAudioEqualizer.swift; sourceTree = ""; };
@@ -177,6 +212,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ E93F493B2C03516E00857CBC /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E93F494D2C0351BF00857CBC /* NVActivityIndicatorView.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
OBJ_104 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 0;
@@ -198,6 +241,7 @@
1F1836DE248CEFC200583430 /* Example */ = {
isa = PBXGroup;
children = (
+ E93F49392C0350FE00857CBC /* Example.entitlements */,
1F1836DF248CEFC200583430 /* AppDelegate.swift */,
1F1836E1248CEFC200583430 /* SceneDelegate.swift */,
1F1836E3248CEFC200583430 /* ViewController.swift */,
@@ -229,6 +273,18 @@
path = Tests;
sourceTree = "";
};
+ E93F493F2C03516E00857CBC /* Example-macOS */ = {
+ isa = PBXGroup;
+ children = (
+ E93F49402C03516E00857CBC /* AppDelegate.swift */,
+ E93F49422C03516E00857CBC /* ViewController.swift */,
+ E93F49442C03516F00857CBC /* Assets.xcassets */,
+ E93F49462C03516F00857CBC /* Main.storyboard */,
+ E93F49492C03516F00857CBC /* Example_macOS.entitlements */,
+ );
+ path = "Example-macOS";
+ sourceTree = "";
+ };
OBJ_47 /* NVActivityIndicatorViewExtended */ = {
isa = PBXGroup;
children = (
@@ -247,6 +303,7 @@
OBJ_7 /* Sources */,
1F1836DE248CEFC200583430 /* Example */,
1F1836FC248CF25600583430 /* Tests */,
+ E93F493F2C03516E00857CBC /* Example-macOS */,
OBJ_51 /* Products */,
1F1836F1248CF08B00583430 /* Frameworks */,
);
@@ -259,6 +316,7 @@
"NVActivityIndicatorView::NVActivityIndicatorViewExtended::Product" /* NVActivityIndicatorViewExtended.framework */,
1F1836DD248CEFC200583430 /* Example.app */,
1F1836FB248CF25600583430 /* Tests.xctest */,
+ E93F493E2C03516E00857CBC /* Example-macOS.app */,
);
name = Products;
sourceTree = BUILT_PRODUCTS_DIR;
@@ -279,6 +337,8 @@
OBJ_44 /* NVActivityIndicatorAnimationDelegate.swift */,
OBJ_45 /* NVActivityIndicatorShape.swift */,
OBJ_46 /* NVActivityIndicatorView.swift */,
+ E93F49362C03509F00857CBC /* Extensions.swift */,
+ E93F49352C03509F00857CBC /* Typealias.swift */,
);
name = NVActivityIndicatorView;
path = Sources/Base;
@@ -365,6 +425,25 @@
productReference = 1F1836FB248CF25600583430 /* Tests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
+ E93F493D2C03516E00857CBC /* Example-macOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = E93F494A2C03516F00857CBC /* Build configuration list for PBXNativeTarget "Example-macOS" */;
+ buildPhases = (
+ E93F493A2C03516E00857CBC /* Sources */,
+ E93F493B2C03516E00857CBC /* Frameworks */,
+ E93F493C2C03516E00857CBC /* Resources */,
+ E93F49512C0351BF00857CBC /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ E93F49502C0351BF00857CBC /* PBXTargetDependency */,
+ );
+ name = "Example-macOS";
+ productName = "Example-macOS";
+ productReference = E93F493E2C03516E00857CBC /* Example-macOS.app */;
+ productType = "com.apple.product-type.application";
+ };
"NVActivityIndicatorView::NVActivityIndicatorView" /* NVActivityIndicatorView */ = {
isa = PBXNativeTarget;
buildConfigurationList = OBJ_55 /* Build configuration list for PBXNativeTarget "NVActivityIndicatorView" */;
@@ -419,7 +498,7 @@
isa = PBXProject;
attributes = {
LastSwiftMigration = 9999;
- LastSwiftUpdateCheck = 1130;
+ LastSwiftUpdateCheck = 1540;
LastUpgradeCheck = 1420;
TargetAttributes = {
1F1836DC248CEFC200583430 = {
@@ -432,6 +511,9 @@
ProvisioningStyle = Automatic;
TestTargetID = 1F1836DC248CEFC200583430;
};
+ E93F493D2C03516E00857CBC = {
+ CreatedOnToolsVersion = 15.4;
+ };
};
};
buildConfigurationList = OBJ_2 /* Build configuration list for PBXProject "NVActivityIndicatorView" */;
@@ -451,6 +533,7 @@
"NVActivityIndicatorView::NVActivityIndicatorViewExtended" /* NVActivityIndicatorViewExtended */,
"NVActivityIndicatorView::SwiftPMPackageDescription" /* NVActivityIndicatorViewPackageDescription */,
1F1836DC248CEFC200583430 /* Example */,
+ E93F493D2C03516E00857CBC /* Example-macOS */,
1F1836FA248CF25600583430 /* Tests */,
);
};
@@ -474,6 +557,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ E93F493C2C03516E00857CBC /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E93F49532C0353CB00857CBC /* Main.storyboard in Resources */,
+ E93F49452C03516F00857CBC /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -498,6 +590,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ E93F493A2C03516E00857CBC /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E93F49432C03516E00857CBC /* ViewController.swift in Sources */,
+ E93F49412C03516E00857CBC /* AppDelegate.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
OBJ_101 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 0;
@@ -531,6 +632,7 @@
OBJ_68 /* NVActivityIndicatorAnimationBallPulseRise.swift in Sources */,
OBJ_69 /* NVActivityIndicatorAnimationBallPulseSync.swift in Sources */,
OBJ_70 /* NVActivityIndicatorAnimationBallRotate.swift in Sources */,
+ E93F49372C03509F00857CBC /* Typealias.swift in Sources */,
OBJ_71 /* NVActivityIndicatorAnimationBallRotateChase.swift in Sources */,
OBJ_72 /* NVActivityIndicatorAnimationBallScale.swift in Sources */,
OBJ_73 /* NVActivityIndicatorAnimationBallScaleMultiple.swift in Sources */,
@@ -552,6 +654,7 @@
OBJ_89 /* NVActivityIndicatorAnimationPacman.swift in Sources */,
OBJ_90 /* NVActivityIndicatorAnimationSemiCircleSpin.swift in Sources */,
OBJ_91 /* NVActivityIndicatorAnimationSquareSpin.swift in Sources */,
+ E93F49382C03509F00857CBC /* Extensions.swift in Sources */,
OBJ_92 /* NVActivityIndicatorAnimationTriangleSkewSpin.swift in Sources */,
OBJ_93 /* NVActivityIndicatorAnimationDelegate.swift in Sources */,
OBJ_94 /* NVActivityIndicatorShape.swift in Sources */,
@@ -564,6 +667,12 @@
/* Begin PBXTargetDependency section */
1F1836F5248CF08B00583430 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
+ platformFilters = (
+ ios,
+ maccatalyst,
+ tvos,
+ watchos,
+ );
target = "NVActivityIndicatorView::NVActivityIndicatorViewExtended" /* NVActivityIndicatorViewExtended */;
targetProxy = 1F1836F4248CF08B00583430 /* PBXContainerItemProxy */;
};
@@ -572,6 +681,11 @@
target = 1F1836DC248CEFC200583430 /* Example */;
targetProxy = 1F183700248CF25600583430 /* PBXContainerItemProxy */;
};
+ E93F49502C0351BF00857CBC /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = "NVActivityIndicatorView::NVActivityIndicatorView" /* NVActivityIndicatorView */;
+ targetProxy = E93F494F2C0351BF00857CBC /* PBXContainerItemProxy */;
+ };
OBJ_106 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = "NVActivityIndicatorView::NVActivityIndicatorView" /* NVActivityIndicatorView */;
@@ -596,6 +710,14 @@
name = LaunchScreen.storyboard;
sourceTree = "";
};
+ E93F49462C03516F00857CBC /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ E93F49472C03516F00857CBC /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
@@ -631,6 +753,8 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_ENTITLEMENTS = Example/Example.entitlements;
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Automatic;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@@ -649,15 +773,22 @@
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = Example/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = me.vinhis.Example;
PRODUCT_NAME = "$(TARGET_NAME)";
+ SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator watchos watchsimulator xros xrsimulator";
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
+ TARGETED_DEVICE_FAMILY = "1,2,6,7";
};
name = Debug;
};
@@ -693,6 +824,8 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_ENTITLEMENTS = Example/Example.entitlements;
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
ENABLE_NS_ASSERTIONS = NO;
@@ -707,14 +840,21 @@
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = Example/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = me.vinhis.Example;
PRODUCT_NAME = "$(TARGET_NAME)";
+ SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator watchos watchsimulator xros xrsimulator";
+ SUPPORTS_MACCATALYST = YES;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
+ TARGETED_DEVICE_FAMILY = "1,2,6,7";
VALIDATE_PRODUCT = YES;
};
name = Release;
@@ -769,7 +909,11 @@
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = Tests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
@@ -830,7 +974,11 @@
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = Tests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
@@ -844,6 +992,109 @@
};
name = Release;
};
+ E93F494B2C03516F00857CBC /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "Example-macOS/Example_macOS.entitlements";
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INFOPLIST_KEY_NSMainStoryboardFile = Main;
+ INFOPLIST_KEY_NSPrincipalClass = NSApplication;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MACOSX_DEPLOYMENT_TARGET = 14.5;
+ MARKETING_VERSION = 1.0;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.JH.Example-macOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = macosx;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SUPPORTS_MACCATALYST = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ E93F494C2C03516F00857CBC /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "Example-macOS/Example_macOS.entitlements";
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INFOPLIST_KEY_NSMainStoryboardFile = Main;
+ INFOPLIST_KEY_NSPrincipalClass = NSApplication;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MACOSX_DEPLOYMENT_TARGET = 14.5;
+ MARKETING_VERSION = 1.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = "com.JH.Example-macOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = macosx;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SUPPORTS_MACCATALYST = NO;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ };
+ name = Release;
+ };
OBJ_100 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -856,7 +1107,10 @@
HEADER_SEARCH_PATHS = "$(inherited)";
INFOPLIST_FILE = NVActivityIndicatorView.xcodeproj/NVActivityIndicatorViewExtended_Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx",
+ );
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 5.1.0;
OTHER_CFLAGS = "$(inherited)";
@@ -930,7 +1184,6 @@
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
- "SWIFT_PACKAGE=1",
"DEBUG=1",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -946,7 +1199,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator";
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) SWIFT_PACKAGE DEBUG";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
USE_HEADERMAP = NO;
@@ -982,10 +1235,7 @@
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = s;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "$(inherited)",
- "SWIFT_PACKAGE=1",
- );
+ GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
@@ -998,8 +1248,9 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator";
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) SWIFT_PACKAGE";
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
USE_HEADERMAP = NO;
};
@@ -1017,7 +1268,10 @@
HEADER_SEARCH_PATHS = "$(inherited)";
INFOPLIST_FILE = NVActivityIndicatorView.xcodeproj/NVActivityIndicatorView_Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx",
+ );
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 5.1.0;
OTHER_CFLAGS = "$(inherited)";
@@ -1048,7 +1302,10 @@
HEADER_SEARCH_PATHS = "$(inherited)";
INFOPLIST_FILE = NVActivityIndicatorView.xcodeproj/NVActivityIndicatorView_Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx",
+ );
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 5.1.0;
OTHER_CFLAGS = "$(inherited)";
@@ -1079,7 +1336,10 @@
HEADER_SEARCH_PATHS = "$(inherited)";
INFOPLIST_FILE = NVActivityIndicatorView.xcodeproj/NVActivityIndicatorViewExtended_Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx",
+ );
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
MARKETING_VERSION = 5.1.0;
OTHER_CFLAGS = "$(inherited)";
@@ -1119,6 +1379,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ E93F494A2C03516F00857CBC /* Build configuration list for PBXNativeTarget "Example-macOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E93F494B2C03516F00857CBC /* Debug */,
+ E93F494C2C03516F00857CBC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
OBJ_108 /* Build configuration list for PBXNativeTarget "NVActivityIndicatorViewPackageDescription" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/NVActivityIndicatorView.xcodeproj/xcshareddata/xcschemes/Example-macOS.xcscheme b/NVActivityIndicatorView.xcodeproj/xcshareddata/xcschemes/Example-macOS.xcscheme
new file mode 100644
index 00000000..afcdef99
--- /dev/null
+++ b/NVActivityIndicatorView.xcodeproj/xcshareddata/xcschemes/Example-macOS.xcscheme
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NVActivityIndicatorView.xcodeproj/xcshareddata/xcschemes/NVActivityIndicatorView.xcscheme b/NVActivityIndicatorView.xcodeproj/xcshareddata/xcschemes/NVActivityIndicatorView.xcscheme
new file mode 100644
index 00000000..dd1332f0
--- /dev/null
+++ b/NVActivityIndicatorView.xcodeproj/xcshareddata/xcschemes/NVActivityIndicatorView.xcscheme
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Package.swift b/Package.swift
index 47357990..f98ae0d8 100644
--- a/Package.swift
+++ b/Package.swift
@@ -7,7 +7,8 @@ let package = Package(
name: "NVActivityIndicatorView",
platforms: [
.iOS(.v9),
- .tvOS(.v9)
+ .tvOS(.v9),
+ .macOS(.v10_13),
],
products: [
.library(name: "NVActivityIndicatorView", targets: ["NVActivityIndicatorView"]),
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift
index e0fcf05e..fc4bb561 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationAudioEqualizer: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let lineSize = size.width / 9
let x = (layer.bounds.size.width - lineSize * 7) / 2
let y = (layer.bounds.size.height - size.height) / 2
@@ -49,9 +54,9 @@ class NVActivityIndicatorAnimationAudioEqualizer: NVActivityIndicatorAnimationDe
let heightFactor = values[j]
let height = size.height * CGFloat(heightFactor)
let point = CGPoint(x: 0, y: size.height - height)
- let path = UIBezierPath(rect: CGRect(origin: point, size: CGSize(width: lineSize, height: height)))
+ let path = NSUIBezierPath(rect: CGRect(origin: point, size: CGSize(width: lineSize, height: height)))
- animation.values?.append(path.cgPath)
+ animation.values?.append(path.asCGPath)
}
animation.duration = duration[i]
animation.repeatCount = HUGE
@@ -69,4 +74,3 @@ class NVActivityIndicatorAnimationAudioEqualizer: NVActivityIndicatorAnimationDe
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallBeat.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallBeat.swift
index 4b8d647d..8aa184ba 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallBeat.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallBeat.swift
@@ -25,12 +25,18 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
+
class NVActivityIndicatorAnimationBallBeat: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSpacing: CGFloat = 2
let circleSize = (size.width - circleSpacing * 2) / 3
let x = (layer.bounds.size.width - size.width) / 2
@@ -77,4 +83,3 @@ class NVActivityIndicatorAnimationBallBeat: NVActivityIndicatorAnimationDelegate
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotate.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotate.swift
index 28c57f63..620d15a5 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotate.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotate.swift
@@ -25,12 +25,19 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
+
+
class NVActivityIndicatorAnimationBallClipRotate: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let duration: CFTimeInterval = 0.75
// Scale animation
@@ -66,4 +73,3 @@ class NVActivityIndicatorAnimationBallClipRotate: NVActivityIndicatorAnimationDe
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotateMultiple.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotateMultiple.swift
index c4b064e7..91beecc9 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotateMultiple.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotateMultiple.swift
@@ -25,29 +25,39 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallClipRotateMultiple: NVActivityIndicatorAnimationDelegate {
-
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let bigCircleSize: CGFloat = size.width
let smallCircleSize: CGFloat = size.width / 2
let longDuration: CFTimeInterval = 1
let timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
- circleOf(shape: .ringTwoHalfHorizontal,
- duration: longDuration,
- timingFunction: timingFunction,
- layer: layer,
- size: bigCircleSize,
- color: color, reverse: false)
- circleOf(shape: .ringTwoHalfVertical,
- duration: longDuration,
- timingFunction: timingFunction,
- layer: layer,
- size: smallCircleSize,
- color: color, reverse: true)
+ circleOf(
+ shape: .ringTwoHalfHorizontal,
+ duration: longDuration,
+ timingFunction: timingFunction,
+ layer: layer,
+ size: bigCircleSize,
+ color: color,
+ reverse: false
+ )
+ circleOf(
+ shape: .ringTwoHalfVertical,
+ duration: longDuration,
+ timingFunction: timingFunction,
+ layer: layer,
+ size: smallCircleSize,
+ color: color,
+ reverse: true
+ )
}
func createAnimationIn(duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, reverse: Bool) -> CAAnimation {
@@ -69,6 +79,7 @@ class NVActivityIndicatorAnimationBallClipRotateMultiple: NVActivityIndicatorAni
} else {
rotateAnimation.values = [0, -Double.pi, -2 * Double.pi]
}
+
rotateAnimation.duration = duration
// Animation
@@ -83,12 +94,14 @@ class NVActivityIndicatorAnimationBallClipRotateMultiple: NVActivityIndicatorAni
}
// swiftlint:disable:next function_parameter_count
- func circleOf(shape: NVActivityIndicatorShape, duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGFloat, color: UIColor, reverse: Bool) {
+ func circleOf(shape: NVActivityIndicatorShape, duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGFloat, color: NSUIColor, reverse: Bool) {
let circle = shape.layerWith(size: CGSize(width: size, height: size), color: color)
- let frame = CGRect(x: (layer.bounds.size.width - size) / 2,
- y: (layer.bounds.size.height - size) / 2,
- width: size,
- height: size)
+ let frame = CGRect(
+ x: (layer.bounds.size.width - size) / 2,
+ y: (layer.bounds.size.height - size) / 2,
+ width: size,
+ height: size
+ )
let animation = createAnimationIn(duration: duration, timingFunction: timingFunction, reverse: reverse)
circle.frame = frame
@@ -96,4 +109,3 @@ class NVActivityIndicatorAnimationBallClipRotateMultiple: NVActivityIndicatorAni
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift
index 52ecf808..1281d4ea 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift
@@ -25,12 +25,16 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallClipRotatePulse: NVActivityIndicatorAnimationDelegate {
-
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let duration: CFTimeInterval = 1
let timingFunction = CAMediaTimingFunction(controlPoints: 0.09, 0.57, 0.49, 0.9)
@@ -38,7 +42,7 @@ class NVActivityIndicatorAnimationBallClipRotatePulse: NVActivityIndicatorAnimat
bigCircleWith(duration: duration, timingFunction: timingFunction, layer: layer, size: size, color: color)
}
- func smallCircleWith(duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGSize, color: UIColor) {
+ func smallCircleWith(duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGSize, color: NSUIColor) {
// Animation
let animation = CAKeyframeAnimation(keyPath: "transform.scale")
@@ -52,17 +56,19 @@ class NVActivityIndicatorAnimationBallClipRotatePulse: NVActivityIndicatorAnimat
// Draw circle
let circleSize = size.width / 2
let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color)
- let frame = CGRect(x: (layer.bounds.size.width - circleSize) / 2,
- y: (layer.bounds.size.height - circleSize) / 2,
- width: circleSize,
- height: circleSize)
+ let frame = CGRect(
+ x: (layer.bounds.size.width - circleSize) / 2,
+ y: (layer.bounds.size.height - circleSize) / 2,
+ width: circleSize,
+ height: circleSize
+ )
circle.frame = frame
circle.add(animation, forKey: "animation")
layer.addSublayer(circle)
}
- func bigCircleWith(duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGSize, color: UIColor) {
+ func bigCircleWith(duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGSize, color: NSUIColor) {
// Scale animation
let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
@@ -89,13 +95,14 @@ class NVActivityIndicatorAnimationBallClipRotatePulse: NVActivityIndicatorAnimat
// Draw circle
let circle = NVActivityIndicatorShape.ringTwoHalfVertical.layerWith(size: size, color: color)
- let frame = CGRect(x: (layer.bounds.size.width - size.width) / 2,
- y: (layer.bounds.size.height - size.height) / 2,
- width: size.width,
- height: size.height)
+ let frame = CGRect(
+ x: (layer.bounds.size.width - size.width) / 2,
+ y: (layer.bounds.size.height - size.height) / 2,
+ width: size.width,
+ height: size.height
+ )
circle.frame = frame
circle.add(animation, forKey: "animation")
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallDoubleBounce.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallDoubleBounce.swift
index ef81dee8..84d7e27c 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallDoubleBounce.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallDoubleBounce.swift
@@ -25,18 +25,23 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallDoubleBounce: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
for index in (0...1) {
bouncingBall(in: layer, size: size, color: color, startingAt: CACurrentMediaTime() + Double(index))
}
}
- fileprivate func bouncingBall(in layer: CALayer, size: CGSize, color: UIColor, startingAt: CFTimeInterval) {
+ fileprivate func bouncingBall(in layer: CALayer, size: CGSize, color: NSUIColor, startingAt: CFTimeInterval) {
// Scale animation
let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
scaleAnimation.duration = 2
@@ -60,4 +65,3 @@ class NVActivityIndicatorAnimationBallDoubleBounce: NVActivityIndicatorAnimation
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallGridBeat.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallGridBeat.swift
index 274882ac..56f7d92c 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallGridBeat.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallGridBeat.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallGridBeat: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSpacing: CGFloat = 2
let circleSize = (size.width - circleSpacing * 2) / 3
let x = (layer.bounds.size.width - size.width) / 2
@@ -67,4 +72,3 @@ class NVActivityIndicatorAnimationBallGridBeat: NVActivityIndicatorAnimationDele
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallGridPulse.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallGridPulse.swift
index 4c3f34c7..776e6e78 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallGridPulse.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallGridPulse.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallGridPulse: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSpacing: CGFloat = 2
let circleSize = (size.width - circleSpacing * 2) / 3
let x = (layer.bounds.size.width - size.width) / 2
@@ -79,4 +84,3 @@ class NVActivityIndicatorAnimationBallGridPulse: NVActivityIndicatorAnimationDel
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulse.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulse.swift
index c929b902..d4708364 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulse.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulse.swift
@@ -25,11 +25,16 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallPulse: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSpacing: CGFloat = 2
let circleSize: CGFloat = (size.width - 2 * circleSpacing) / 3
let x: CGFloat = (layer.bounds.size.width - size.width) / 2
@@ -63,4 +68,3 @@ class NVActivityIndicatorAnimationBallPulse: NVActivityIndicatorAnimationDelegat
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulseRise.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulseRise.swift
index 88ac1980..33f1de88 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulseRise.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulseRise.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallPulseRise: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSpacing: CGFloat = 2
let circleSize = (size.width - 4 * circleSpacing) / 5
let x = (layer.bounds.size.width - size.width) / 2
@@ -113,4 +118,3 @@ class NVActivityIndicatorAnimationBallPulseRise: NVActivityIndicatorAnimationDel
return animation
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulseSync.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulseSync.swift
index 3b62cb83..d7fba0de 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulseSync.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallPulseSync.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallPulseSync: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSpacing: CGFloat = 2
let circleSize = (size.width - circleSpacing * 2) / 3
let x = (layer.bounds.size.width - size.width) / 2
@@ -66,4 +71,3 @@ class NVActivityIndicatorAnimationBallPulseSync: NVActivityIndicatorAnimationDel
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallRotate.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallRotate.swift
index ed84678d..496b9127 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallRotate.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallRotate.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallRotate: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSize: CGFloat = size.width / 5
let duration: CFTimeInterval = 1
let timingFunction = CAMediaTimingFunction(controlPoints: 0.7, -0.13, 0.22, 0.86)
@@ -81,4 +86,3 @@ class NVActivityIndicatorAnimationBallRotate: NVActivityIndicatorAnimationDelega
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallRotateChase.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallRotateChase.swift
index bc9a4c41..fa6a2ee9 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallRotateChase.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallRotateChase.swift
@@ -25,12 +25,16 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallRotateChase: NVActivityIndicatorAnimationDelegate {
-
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSize = size.width / 5
// Draw circles
@@ -62,7 +66,16 @@ class NVActivityIndicatorAnimationBallRotateChase: NVActivityIndicatorAnimationD
let positionAnimation = CAKeyframeAnimation(keyPath: "position")
positionAnimation.duration = duration
positionAnimation.repeatCount = HUGE
- positionAnimation.path = UIBezierPath(arcCenter: CGPoint(x: x, y: y), radius: size.width / 2, startAngle: CGFloat(3 * Double.pi * 0.5), endAngle: CGFloat(3 * Double.pi * 0.5 + 2 * Double.pi), clockwise: true).cgPath
+
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ let clockwise = false
+ #endif
+
+ #if canImport(UIKit)
+ let clockwise = true
+ #endif
+
+ positionAnimation.path = NSUIBezierPath(arcCenter: CGPoint(x: x, y: y), radius: size.width / 2, startAngle: CGFloat(3 * Double.pi * 0.5), endAngle: CGFloat(3 * Double.pi * 0.5 + 2 * Double.pi), clockwise: clockwise).asCGPath
// Aniamtion
let animation = CAAnimationGroup()
@@ -75,4 +88,3 @@ class NVActivityIndicatorAnimationBallRotateChase: NVActivityIndicatorAnimationD
return animation
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallScale.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallScale.swift
index 2d4218c8..9ceb124c 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallScale.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallScale.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallScale: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let duration: CFTimeInterval = 1
// Scale animation
@@ -67,4 +72,3 @@ class NVActivityIndicatorAnimationBallScale: NVActivityIndicatorAnimationDelegat
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift
index a6123cb3..6d8f7d64 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift
@@ -25,12 +25,16 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallScaleMultiple: NVActivityIndicatorAnimationDelegate {
-
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let duration: CFTimeInterval = 1
let beginTime = CACurrentMediaTime()
let beginTimes = [0, 0.2, 0.4]
@@ -61,10 +65,12 @@ class NVActivityIndicatorAnimationBallScaleMultiple: NVActivityIndicatorAnimatio
// Draw balls
for i in 0 ..< 3 {
let circle = NVActivityIndicatorShape.circle.layerWith(size: size, color: color)
- let frame = CGRect(x: (layer.bounds.size.width - size.width) / 2,
- y: (layer.bounds.size.height - size.height) / 2,
- width: size.width,
- height: size.height)
+ let frame = CGRect(
+ x: (layer.bounds.size.width - size.width) / 2,
+ y: (layer.bounds.size.height - size.height) / 2,
+ width: size.width,
+ height: size.height
+ )
animation.beginTime = beginTime + beginTimes[i]
circle.frame = frame
@@ -74,4 +80,3 @@ class NVActivityIndicatorAnimationBallScaleMultiple: NVActivityIndicatorAnimatio
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift
index a453a678..afab5677 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallScaleRipple: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let duration: CFTimeInterval = 1
let timingFunction = CAMediaTimingFunction(controlPoints: 0.21, 0.53, 0.56, 0.8)
@@ -70,4 +75,3 @@ class NVActivityIndicatorAnimationBallScaleRipple: NVActivityIndicatorAnimationD
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift
index 13426ccc..b818f3ba 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallScaleRippleMultiple: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let duration: CFTimeInterval = 1.25
let beginTime = CACurrentMediaTime()
let beginTimes = [0, 0.2, 0.4]
@@ -75,4 +80,3 @@ class NVActivityIndicatorAnimationBallScaleRippleMultiple: NVActivityIndicatorAn
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallSpinFadeLoader.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallSpinFadeLoader.swift
index 9857330a..3702befb 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallSpinFadeLoader.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallSpinFadeLoader.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallSpinFadeLoader: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSpacing: CGFloat = -2
let circleSize = (size.width - 4 * circleSpacing) / 5
let x = (layer.bounds.size.width - size.width) / 2
@@ -76,7 +81,7 @@ class NVActivityIndicatorAnimationBallSpinFadeLoader: NVActivityIndicatorAnimati
}
}
- func circleAt(angle: CGFloat, size: CGFloat, origin: CGPoint, containerSize: CGSize, color: UIColor) -> CALayer {
+ func circleAt(angle: CGFloat, size: CGFloat, origin: CGPoint, containerSize: CGSize, color: NSUIColor) -> CALayer {
let radius = containerSize.width / 2 - size / 2
let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: size, height: size), color: color)
let frame = CGRect(
@@ -90,4 +95,3 @@ class NVActivityIndicatorAnimationBallSpinFadeLoader: NVActivityIndicatorAnimati
return circle
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift
index 69f45489..1fcff0be 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallTrianglePath: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSize = size.width / 5
let deltaX = size.width / 2 - circleSize / 2
let deltaY = size.height / 2 - circleSize / 2
@@ -101,4 +106,3 @@ class NVActivityIndicatorAnimationBallTrianglePath: NVActivityIndicatorAnimation
return valueMutableString as String
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallZigZag.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallZigZag.swift
index 3aadf395..132a37f3 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallZigZag.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallZigZag.swift
@@ -25,13 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
-import QuartzCore
+#endif
class NVActivityIndicatorAnimationBallZigZag: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSize: CGFloat = size.width / 5
let duration: CFTimeInterval = 0.7
let deltaX = size.width / 2 - circleSize / 2
@@ -68,7 +72,7 @@ class NVActivityIndicatorAnimationBallZigZag: NVActivityIndicatorAnimationDelega
circleAt(frame: frame, layer: layer, size: CGSize(width: circleSize, height: circleSize), color: color, animation: animation)
}
- func circleAt(frame: CGRect, layer: CALayer, size: CGSize, color: UIColor, animation: CAAnimation) {
+ func circleAt(frame: CGRect, layer: CALayer, size: CGSize, color: NSUIColor, animation: CAAnimation) {
let circle = NVActivityIndicatorShape.circle.layerWith(size: size, color: color)
circle.frame = frame
@@ -76,4 +80,3 @@ class NVActivityIndicatorAnimationBallZigZag: NVActivityIndicatorAnimationDelega
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBallZigZagDeflect.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBallZigZagDeflect.swift
index 0f3fe845..1dc26854 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBallZigZagDeflect.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBallZigZagDeflect.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBallZigZagDeflect: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSize: CGFloat = size.width / 5
let duration: CFTimeInterval = 0.75
let deltaX = size.width / 2 - circleSize / 2
@@ -68,7 +73,7 @@ class NVActivityIndicatorAnimationBallZigZagDeflect: NVActivityIndicatorAnimatio
circleAt(frame: frame, layer: layer, size: CGSize(width: circleSize, height: circleSize), color: color, animation: animation)
}
- func circleAt(frame: CGRect, layer: CALayer, size: CGSize, color: UIColor, animation: CAAnimation) {
+ func circleAt(frame: CGRect, layer: CALayer, size: CGSize, color: NSUIColor, animation: CAAnimation) {
let circle = NVActivityIndicatorShape.circle.layerWith(size: size, color: color)
circle.frame = frame
@@ -76,4 +81,3 @@ class NVActivityIndicatorAnimationBallZigZagDeflect: NVActivityIndicatorAnimatio
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationBlank.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationBlank.swift
index 00573763..c92c6f39 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationBlank.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationBlank.swift
@@ -25,13 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationBlank: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in _: CALayer, size _: CGSize, color _: UIColor) {
+ func setUpAnimation(in _: CALayer, size _: CGSize, color _: NSUIColor) {
// Do nothing
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationCircleStrokeSpin.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationCircleStrokeSpin.swift
index d18dc834..f79306cf 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationCircleStrokeSpin.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationCircleStrokeSpin.swift
@@ -25,18 +25,24 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationCircleStrokeSpin: NVActivityIndicatorAnimationDelegate {
-
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
- let beginTime: Double = 0.5
- let strokeStartDuration: Double = 1.2
- let strokeEndDuration: Double = 0.7
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
+ let beginTime = 0.5
+ let strokeStartDuration = 1.2
+ let strokeEndDuration = 0.7
let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation")
- rotationAnimation.byValue = Float.pi * 2
+
+ rotationAnimation.byValue = 2 * Double.pi
+
rotationAnimation.timingFunction = CAMediaTimingFunction(name: .linear)
let strokeEndAnimation = CABasicAnimation(keyPath: "strokeEnd")
@@ -46,11 +52,11 @@ class NVActivityIndicatorAnimationCircleStrokeSpin: NVActivityIndicatorAnimation
strokeEndAnimation.toValue = 1
let strokeStartAnimation = CABasicAnimation(keyPath: "strokeStart")
+ strokeStartAnimation.beginTime = beginTime
strokeStartAnimation.duration = strokeStartDuration
strokeStartAnimation.timingFunction = CAMediaTimingFunction(controlPoints: 0.4, 0.0, 0.2, 1.0)
strokeStartAnimation.fromValue = 0
strokeStartAnimation.toValue = 1
- strokeStartAnimation.beginTime = beginTime
let groupAnimation = CAAnimationGroup()
groupAnimation.animations = [rotationAnimation, strokeEndAnimation, strokeStartAnimation]
@@ -66,10 +72,9 @@ class NVActivityIndicatorAnimationCircleStrokeSpin: NVActivityIndicatorAnimation
width: size.width,
height: size.height
)
-
circle.frame = frame
circle.add(groupAnimation, forKey: "animation")
layer.addSublayer(circle)
}
}
-#endif
+
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationCubeTransition.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationCubeTransition.swift
index 745aa664..13070942 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationCubeTransition.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationCubeTransition.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationCubeTransition: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let squareSize = size.width / 5
let x = (layer.bounds.size.width - size.width) / 2
let y = (layer.bounds.size.height - size.height) / 2
@@ -91,4 +96,3 @@ class NVActivityIndicatorAnimationCubeTransition: NVActivityIndicatorAnimationDe
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationLineScale.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationLineScale.swift
index d3ce1aa8..383c57c1 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationLineScale.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationLineScale.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationLineScale: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let lineSize = size.width / 9
let x = (layer.bounds.size.width - size.width) / 2
let y = (layer.bounds.size.height - size.height) / 2
@@ -61,4 +66,3 @@ class NVActivityIndicatorAnimationLineScale: NVActivityIndicatorAnimationDelegat
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationLineScaleParty.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationLineScaleParty.swift
index d1cbe13f..4bf1f776 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationLineScaleParty.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationLineScaleParty.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationLineScaleParty: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let lineSize = size.width / 7
let x = (layer.bounds.size.width - size.width) / 2
let y = (layer.bounds.size.height - size.height) / 2
@@ -60,4 +65,3 @@ class NVActivityIndicatorAnimationLineScaleParty: NVActivityIndicatorAnimationDe
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift
index 21192866..ee6aff78 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationLineScalePulseOut: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let lineSize = size.width / 9
let x = (layer.bounds.size.width - size.width) / 2
let y = (layer.bounds.size.height - size.height) / 2
@@ -64,4 +69,3 @@ class NVActivityIndicatorAnimationLineScalePulseOut: NVActivityIndicatorAnimatio
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationLineScalePulseOutRapid.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationLineScalePulseOutRapid.swift
index 29d3c94b..3ef49be8 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationLineScalePulseOutRapid.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationLineScalePulseOutRapid.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationLineScalePulseOutRapid: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let lineSize = size.width / 9
let x = (layer.bounds.size.width - size.width) / 2
let y = (layer.bounds.size.height - size.height) / 2
@@ -65,4 +70,3 @@ class NVActivityIndicatorAnimationLineScalePulseOutRapid: NVActivityIndicatorAni
}
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationLineSpinFadeLoader.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationLineSpinFadeLoader.swift
index c8408dca..70c34c31 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationLineSpinFadeLoader.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationLineSpinFadeLoader.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationLineSpinFadeLoader: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let lineSpacing: CGFloat = 2
let lineSize = CGSize(width: (size.width - 4 * lineSpacing) / 5, height: (size.height - 2 * lineSpacing) / 3)
let x = (layer.bounds.size.width - size.width) / 2
@@ -64,7 +69,7 @@ class NVActivityIndicatorAnimationLineSpinFadeLoader: NVActivityIndicatorAnimati
}
}
- func lineAt(angle: CGFloat, size: CGSize, origin: CGPoint, containerSize: CGSize, color: UIColor) -> CALayer {
+ func lineAt(angle: CGFloat, size: CGSize, origin: CGPoint, containerSize: CGSize, color: NSUIColor) -> CALayer {
let radius = containerSize.width / 2 - max(size.width, size.height) / 2
let lineContainerSize = CGSize(width: max(size.width, size.height), height: max(size.width, size.height))
let lineContainer = CALayer()
@@ -88,4 +93,3 @@ class NVActivityIndicatorAnimationLineSpinFadeLoader: NVActivityIndicatorAnimati
return lineContainer
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationOrbit.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationOrbit.swift
index 07f86662..1069b839 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationOrbit.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationOrbit.swift
@@ -25,8 +25,13 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationOrbit: NVActivityIndicatorAnimationDelegate {
let duration: CFTimeInterval = 1.9
@@ -36,7 +41,7 @@ class NVActivityIndicatorAnimationOrbit: NVActivityIndicatorAnimationDelegate {
var coreSize: CGFloat = 0
var satelliteSize: CGFloat = 0
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
coreSize = size.width / (1 + satelliteCoreRatio + distanceRatio)
satelliteSize = coreSize * satelliteCoreRatio
@@ -46,7 +51,7 @@ class NVActivityIndicatorAnimationOrbit: NVActivityIndicatorAnimationDelegate {
satelliteInLayer(layer, size: size, color: color)
}
- func ring1InLayer(_ layer: CALayer, size _: CGSize, color: UIColor) {
+ func ring1InLayer(_ layer: CALayer, size _: CGSize, color: NSUIColor) {
// Scale animation
let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
@@ -74,17 +79,19 @@ class NVActivityIndicatorAnimationOrbit: NVActivityIndicatorAnimationDelegate {
// Draw circle
let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: coreSize, height: coreSize), color: color)
- let frame = CGRect(x: (layer.bounds.size.width - coreSize) / 2,
- y: (layer.bounds.size.height - coreSize) / 2,
- width: coreSize,
- height: coreSize)
+ let frame = CGRect(
+ x: (layer.bounds.size.width - coreSize) / 2,
+ y: (layer.bounds.size.height - coreSize) / 2,
+ width: coreSize,
+ height: coreSize
+ )
circle.frame = frame
circle.add(animation, forKey: "animation")
layer.addSublayer(circle)
}
- func ring2InLayer(_ layer: CALayer, size _: CGSize, color: UIColor) {
+ func ring2InLayer(_ layer: CALayer, size _: CGSize, color: NSUIColor) {
// Scale animation
let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
@@ -112,17 +119,19 @@ class NVActivityIndicatorAnimationOrbit: NVActivityIndicatorAnimationDelegate {
// Draw circle
let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: coreSize, height: coreSize), color: color)
- let frame = CGRect(x: (layer.bounds.size.width - coreSize) / 2,
- y: (layer.bounds.size.height - coreSize) / 2,
- width: coreSize,
- height: coreSize)
+ let frame = CGRect(
+ x: (layer.bounds.size.width - coreSize) / 2,
+ y: (layer.bounds.size.height - coreSize) / 2,
+ width: coreSize,
+ height: coreSize
+ )
circle.frame = frame
circle.add(animation, forKey: "animation")
layer.addSublayer(circle)
}
- func coreInLayer(_ layer: CALayer, size _: CGSize, color: UIColor) {
+ func coreInLayer(_ layer: CALayer, size _: CGSize, color: NSUIColor) {
let inTimingFunction = CAMediaTimingFunction(controlPoints: 0.7, 0, 1, 0.5)
let outTimingFunction = CAMediaTimingFunction(controlPoints: 0, 0.7, 0.5, 1)
let standByTimingFunction = CAMediaTimingFunction(name: .linear)
@@ -139,25 +148,36 @@ class NVActivityIndicatorAnimationOrbit: NVActivityIndicatorAnimationDelegate {
// Draw circle
let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: coreSize, height: coreSize), color: color)
- let frame = CGRect(x: (layer.bounds.size.width - coreSize) / 2,
- y: (layer.bounds.size.height - coreSize) / 2,
- width: coreSize,
- height: coreSize)
+ let frame = CGRect(
+ x: (layer.bounds.size.width - coreSize) / 2,
+ y: (layer.bounds.size.height - coreSize) / 2,
+ width: coreSize,
+ height: coreSize
+ )
circle.frame = frame
circle.add(scaleAnimation, forKey: "animation")
layer.addSublayer(circle)
}
- func satelliteInLayer(_ layer: CALayer, size: CGSize, color: UIColor) {
+ func satelliteInLayer(_ layer: CALayer, size: CGSize, color: NSUIColor) {
// Rotate animation
let rotateAnimation = CAKeyframeAnimation(keyPath: "position")
-
- rotateAnimation.path = UIBezierPath(arcCenter: CGPoint(x: layer.bounds.midX, y: layer.bounds.midY),
- radius: (size.width - satelliteSize) / 2,
- startAngle: CGFloat(Double.pi * 1.5),
- endAngle: CGFloat(Double.pi * 1.5 + 4 * Double.pi),
- clockwise: true).cgPath
+
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ let clockwise = false
+ #endif
+
+ #if canImport(UIKit)
+ let clockwise = true
+ #endif
+ rotateAnimation.path = NSUIBezierPath(
+ arcCenter: CGPoint(x: layer.bounds.midX, y: layer.bounds.midY),
+ radius: (size.width - satelliteSize) / 2,
+ startAngle: CGFloat(Double.pi * 1.5),
+ endAngle: CGFloat(Double.pi * 1.5 + 4 * Double.pi),
+ clockwise: clockwise
+ ).asCGPath
rotateAnimation.duration = duration * 2
rotateAnimation.repeatCount = HUGE
rotateAnimation.isRemovedOnCompletion = false
@@ -171,4 +191,3 @@ class NVActivityIndicatorAnimationOrbit: NVActivityIndicatorAnimationDelegate {
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationPacman.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationPacman.swift
index baa2e42a..e62c6b76 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationPacman.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationPacman.swift
@@ -25,17 +25,22 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationPacman: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
circleInLayer(layer, size: size, color: color)
pacmanInLayer(layer, size: size, color: color)
}
- func pacmanInLayer(_ layer: CALayer, size: CGSize, color: UIColor) {
+ func pacmanInLayer(_ layer: CALayer, size: CGSize, color: NSUIColor) {
let pacmanSize = 2 * size.width / 3
let pacmanDuration: CFTimeInterval = 0.5
let timingFunction = CAMediaTimingFunction(name: .default)
@@ -78,7 +83,7 @@ class NVActivityIndicatorAnimationPacman: NVActivityIndicatorAnimationDelegate {
layer.addSublayer(pacman)
}
- func circleInLayer(_ layer: CALayer, size: CGSize, color: UIColor) {
+ func circleInLayer(_ layer: CALayer, size: CGSize, color: NSUIColor) {
let circleSize = size.width / 5
let circleDuration: CFTimeInterval = 1
@@ -119,4 +124,3 @@ class NVActivityIndicatorAnimationPacman: NVActivityIndicatorAnimationDelegate {
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationSemiCircleSpin.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationSemiCircleSpin.swift
index c83ae5b1..712a9ee6 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationSemiCircleSpin.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationSemiCircleSpin.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationSemiCircleSpin: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let duration: CFTimeInterval = 0.6
// Animation
@@ -56,4 +61,3 @@ class NVActivityIndicatorAnimationSemiCircleSpin: NVActivityIndicatorAnimationDe
layer.addSublayer(circle)
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationSquareSpin.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationSquareSpin.swift
index 537e9f65..10f024ac 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationSquareSpin.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationSquareSpin.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationSquareSpin: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let duration: CFTimeInterval = 3
let timingFunction = CAMediaTimingFunction(controlPoints: 0.09, 0.57, 0.49, 0.9)
@@ -78,4 +83,3 @@ class NVActivityIndicatorAnimationSquareSpin: NVActivityIndicatorAnimationDelega
return transform
}
}
-#endif
diff --git a/Sources/Base/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift b/Sources/Base/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift
index 319d3aef..57e5c986 100644
--- a/Sources/Base/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift
+++ b/Sources/Base/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift
@@ -25,12 +25,17 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
class NVActivityIndicatorAnimationTriangleSkewSpin: NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) {
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor) {
let x = (layer.bounds.size.width - size.width) / 2
let y = (layer.bounds.size.height - size.height) / 2
let duration: CFTimeInterval = 3
@@ -76,4 +81,3 @@ class NVActivityIndicatorAnimationTriangleSkewSpin: NVActivityIndicatorAnimation
return transform
}
}
-#endif
diff --git a/Sources/Base/Extensions.swift b/Sources/Base/Extensions.swift
new file mode 100644
index 00000000..b7219eef
--- /dev/null
+++ b/Sources/Base/Extensions.swift
@@ -0,0 +1,130 @@
+import Foundation
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
+#if canImport(UIKit)
+import UIKit
+#endif
+
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+
+extension NSCoder {
+ static func cgPoint(for string: String) -> CGPoint {
+ NSPointFromString(string)
+ }
+}
+
+extension NSBezierPath {
+ @inlinable
+ func addArc(withCenter center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool) {
+ let startDegrees = startAngle * 180 / .pi
+ let endDegrees = endAngle * 180 / .pi
+ appendArc(withCenter: center, radius: radius, startAngle: startDegrees, endAngle: endDegrees, clockwise: clockwise)
+ }
+
+ @inlinable
+ func addLine(to point: CGPoint) {
+ line(to: point)
+ }
+
+ convenience init(roundedRect rect: CGRect, cornerRadius: CGFloat) {
+ self.init(roundedRect: rect, xRadius: cornerRadius, yRadius: cornerRadius)
+ }
+
+ convenience init(arcCenter: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool) {
+ self.init()
+ addArc(withCenter: arcCenter, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: clockwise)
+ }
+
+ var asCGPath: CGPath {
+ if #available(macOS 14.0, *) {
+ return cgPath
+ } else {
+ let path = CGMutablePath()
+ var points = [CGPoint](repeating: .zero, count: 3)
+ for i in 0 ..< elementCount {
+ let type = element(at: i, associatedPoints: &points)
+ switch type {
+ case .moveTo: path.move(to: points[0])
+ case .lineTo: path.addLine(to: points[0])
+ case .curveTo,
+ .cubicCurveTo: path.addCurve(to: points[2], control1: points[0], control2: points[1])
+ case .closePath: path.closeSubpath()
+ default:
+ break
+ }
+ }
+ return path
+ }
+ }
+}
+
+extension NSView {
+ var backgroundColor: NSColor? {
+ set {
+ setWantsLayer()
+ layer?.backgroundColor = newValue?.cgColor
+ }
+ get {
+ layer?.backgroundColor.flatMap { .init(cgColor: $0) }
+ }
+ }
+
+ static func animate(withDuration duration: TimeInterval = 0.25, timingFunction: CAMediaTimingFunction? = nil, animations: @escaping () -> Void, completion: ((Bool) -> Void)? = nil) {
+ NSAnimationContext.runAnimationGroup {
+ context in
+ context.duration = duration
+ context.timingFunction = timingFunction ?? context.timingFunction
+ context.allowsImplicitAnimation = true
+ context.completionHandler = {
+ completion?(true)
+ }
+ animations()
+ }
+ }
+
+ var alpha: CGFloat {
+ set { alphaValue = newValue }
+ get { alphaValue }
+ }
+
+ func setWantsLayer() {
+ wantsLayer = true
+ }
+}
+
+extension CGRect {
+ func inset(by insets: NSEdgeInsets) -> CGRect {
+ return CGRect(
+ x: origin.x + insets.left,
+ y: origin.y + insets.top,
+ width: width - (insets.left + insets.right),
+ height: height - (insets.top + insets.bottom)
+ )
+ }
+}
+
+extension NSValue {
+ convenience init(cgSize: CGSize) {
+ self.init(size: cgSize)
+ }
+}
+
+#endif
+
+#if canImport(UIKit)
+
+extension UIBezierPath {
+ var asCGPath: CGPath {
+ cgPath
+ }
+}
+
+#endif
+
+extension NSUIView {
+ var _layer: CALayer? {
+ layer
+ }
+}
diff --git a/Sources/Base/NVActivityIndicatorAnimationDelegate.swift b/Sources/Base/NVActivityIndicatorAnimationDelegate.swift
index 9df681a6..ac729f00 100644
--- a/Sources/Base/NVActivityIndicatorAnimationDelegate.swift
+++ b/Sources/Base/NVActivityIndicatorAnimationDelegate.swift
@@ -25,11 +25,16 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
// swiftlint:disable:next class_delegate_protocol
protocol NVActivityIndicatorAnimationDelegate {
- func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor)
+ func setUpAnimation(in layer: CALayer, size: CGSize, color: NSUIColor)
}
-#endif
+
diff --git a/Sources/Base/NVActivityIndicatorShape.swift b/Sources/Base/NVActivityIndicatorShape.swift
index 75ff2c57..e2e5e98d 100644
--- a/Sources/Base/NVActivityIndicatorShape.swift
+++ b/Sources/Base/NVActivityIndicatorShape.swift
@@ -25,8 +25,13 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
enum NVActivityIndicatorShape {
case circle
@@ -42,78 +47,173 @@ enum NVActivityIndicatorShape {
case stroke
// swiftlint:disable:next cyclomatic_complexity function_body_length
- func layerWith(size: CGSize, color: UIColor) -> CALayer {
- let layer: CAShapeLayer = CAShapeLayer()
- var path: UIBezierPath = UIBezierPath()
+ func layerWith(size: CGSize, color: NSUIColor) -> CALayer {
+ let layer = CAShapeLayer()
+ var path = NSUIBezierPath()
let lineWidth: CGFloat = 2
switch self {
case .circle:
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 2,
- startAngle: 0,
- endAngle: CGFloat(2 * Double.pi),
- clockwise: false)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: 0,
+ endAngle: CGFloat(2 * Double.pi),
+ clockwise: false
+ )
layer.fillColor = color.cgColor
case .circleSemi:
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 2,
- startAngle: CGFloat(-Double.pi / 6),
- endAngle: CGFloat(-5 * Double.pi / 6),
- clockwise: false)
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: -CGFloat(-Double.pi / 6),
+ endAngle: -CGFloat(-5 * Double.pi / 6),
+ clockwise: false
+ )
+ #endif
+
+ #if canImport(UIKit)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: CGFloat(-Double.pi / 6),
+ endAngle: CGFloat(-5 * Double.pi / 6),
+ clockwise: false
+ )
+ #endif
path.close()
layer.fillColor = color.cgColor
case .ring:
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 2,
- startAngle: 0,
- endAngle: CGFloat(2 * Double.pi),
- clockwise: false)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: 0,
+ endAngle: CGFloat(2 * Double.pi),
+ clockwise: false
+ )
layer.fillColor = nil
layer.strokeColor = color.cgColor
layer.lineWidth = lineWidth
case .ringTwoHalfVertical:
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 2,
- startAngle: CGFloat(-3 * Double.pi / 4),
- endAngle: CGFloat(-Double.pi / 4),
- clockwise: true)
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: -CGFloat(-3 * Double.pi / 4),
+ endAngle: -CGFloat(-Double.pi / 4),
+ clockwise: true
+ )
path.move(
- to: CGPoint(x: size.width / 2 - size.width / 2 * cos(CGFloat(Double.pi / 4)),
- y: size.height / 2 + size.height / 2 * sin(CGFloat(Double.pi / 4)))
- )
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 2,
- startAngle: CGFloat(-5 * Double.pi / 4),
- endAngle: CGFloat(-7 * Double.pi / 4),
- clockwise: false)
+ to: CGPoint(
+ x: size.width / 2 - size.width / 2 * cos(-CGFloat(Double.pi / 4)),
+ y: size.height / 2 + size.height / 2 * sin(-CGFloat(Double.pi / 4))
+ )
+ )
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: -CGFloat(-5 * Double.pi / 4),
+ endAngle: -CGFloat(-7 * Double.pi / 4),
+ clockwise: false
+ )
+ #endif
+
+ #if canImport(UIKit)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: CGFloat(-3 * Double.pi / 4),
+ endAngle: CGFloat(-Double.pi / 4),
+ clockwise: true
+ )
+ path.move(
+ to: CGPoint(
+ x: size.width / 2 - size.width / 2 * cos(CGFloat(Double.pi / 4)),
+ y: size.height / 2 + size.height / 2 * sin(CGFloat(Double.pi / 4))
+ )
+ )
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: CGFloat(-5 * Double.pi / 4),
+ endAngle: CGFloat(-7 * Double.pi / 4),
+ clockwise: false
+ )
+ #endif
+
layer.fillColor = nil
layer.strokeColor = color.cgColor
layer.lineWidth = lineWidth
case .ringTwoHalfHorizontal:
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 2,
- startAngle: CGFloat(3 * Double.pi / 4),
- endAngle: CGFloat(5 * Double.pi / 4),
- clockwise: true)
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: -CGFloat(3 * Double.pi / 4),
+ endAngle: -CGFloat(5 * Double.pi / 4),
+ clockwise: true
+ )
path.move(
- to: CGPoint(x: size.width / 2 + size.width / 2 * cos(CGFloat(Double.pi / 4)),
- y: size.height / 2 - size.height / 2 * sin(CGFloat(Double.pi / 4)))
- )
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 2,
- startAngle: CGFloat(-Double.pi / 4),
- endAngle: CGFloat(Double.pi / 4),
- clockwise: true)
+ to: CGPoint(
+ x: size.width / 2 + size.width / 2 * cos(-CGFloat(Double.pi / 4)),
+ y: size.height / 2 - size.height / 2 * sin(-CGFloat(Double.pi / 4))
+ )
+ )
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: -CGFloat(-Double.pi / 4),
+ endAngle: -CGFloat(Double.pi / 4),
+ clockwise: true
+ )
+ #endif
+
+ #if canImport(UIKit)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: CGFloat(3 * Double.pi / 4),
+ endAngle: CGFloat(5 * Double.pi / 4),
+ clockwise: true
+ )
+ path.move(
+ to: CGPoint(
+ x: size.width / 2 + size.width / 2 * cos(CGFloat(Double.pi / 4)),
+ y: size.height / 2 - size.height / 2 * sin(CGFloat(Double.pi / 4))
+ )
+ )
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: CGFloat(-Double.pi / 4),
+ endAngle: CGFloat(Double.pi / 4),
+ clockwise: true
+ )
+ #endif
layer.fillColor = nil
layer.strokeColor = color.cgColor
layer.lineWidth = lineWidth
case .ringThirdFour:
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 2,
- startAngle: CGFloat(-3 * Double.pi / 4),
- endAngle: CGFloat(-Double.pi / 4),
- clockwise: false)
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: -CGFloat(-3 * Double.pi / 4),
+ endAngle: -CGFloat(-Double.pi / 4),
+ clockwise: false
+ )
+ #endif
+
+ #if canImport(UIKit)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: CGFloat(-3 * Double.pi / 4),
+ endAngle: CGFloat(-Double.pi / 4),
+ clockwise: false
+ )
+ #endif
layer.fillColor = nil
layer.strokeColor = color.cgColor
layer.lineWidth = 2
@@ -132,34 +232,63 @@ enum NVActivityIndicatorShape {
path.close()
layer.fillColor = color.cgColor
case .line:
- path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: size.width, height: size.height),
- cornerRadius: size.width / 2)
+ path = NSUIBezierPath(
+ roundedRect: CGRect(x: 0, y: 0, width: size.width, height: size.height),
+ cornerRadius: size.width / 2
+ )
layer.fillColor = color.cgColor
case .pacman:
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 4,
- startAngle: 0,
- endAngle: CGFloat(2 * Double.pi),
- clockwise: true)
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 4,
+ startAngle: 0,
+ endAngle: -CGFloat(2 * Double.pi),
+ clockwise: true
+ )
+ #endif
+
+ #if canImport(UIKit)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 4,
+ startAngle: 0,
+ endAngle: CGFloat(2 * Double.pi),
+ clockwise: true
+ )
+ #endif
layer.fillColor = nil
layer.strokeColor = color.cgColor
layer.lineWidth = size.width / 2
case .stroke:
- path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
- radius: size.width / 2,
- startAngle: -(.pi / 2),
- endAngle: .pi + .pi / 2,
- clockwise: true)
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: -(.pi / 2),
+ endAngle: .pi + .pi / 2,
+ clockwise: false
+ )
+ #endif
+
+ #if canImport(UIKit)
+ path.addArc(
+ withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
+ radius: size.width / 2,
+ startAngle: -(.pi / 2),
+ endAngle: .pi + .pi / 2,
+ clockwise: true
+ )
+ #endif
layer.fillColor = nil
layer.strokeColor = color.cgColor
layer.lineWidth = 2
}
layer.backgroundColor = nil
- layer.path = path.cgPath
+ layer.path = path.asCGPath
layer.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height)
return layer
}
}
-#endif
diff --git a/Sources/Base/NVActivityIndicatorView.swift b/Sources/Base/NVActivityIndicatorView.swift
index ebd47719..0858261b 100644
--- a/Sources/Base/NVActivityIndicatorView.swift
+++ b/Sources/Base/NVActivityIndicatorView.swift
@@ -25,251 +25,186 @@
// SOFTWARE.
//
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+#endif
+
#if canImport(UIKit)
import UIKit
+#endif
-/**
- Enum of animation types used for activity indicator view.
-
- - Blank: Blank animation.
- - BallPulse: BallPulse animation.
- - BallGridPulse: BallGridPulse animation.
- - BallClipRotate: BallClipRotate animation.
- - SquareSpin: SquareSpin animation.
- - BallClipRotatePulse: BallClipRotatePulse animation.
- - BallClipRotateMultiple: BallClipRotateMultiple animation.
- - BallPulseRise: BallPulseRise animation.
- - BallRotate: BallRotate animation.
- - CubeTransition: CubeTransition animation.
- - BallZigZag: BallZigZag animation.
- - BallZigZagDeflect: BallZigZagDeflect animation.
- - BallTrianglePath: BallTrianglePath animation.
- - BallScale: BallScale animation.
- - LineScale: LineScale animation.
- - LineScaleParty: LineScaleParty animation.
- - BallScaleMultiple: BallScaleMultiple animation.
- - BallPulseSync: BallPulseSync animation.
- - BallBeat: BallBeat animation.
- - BallDoubleBounce: BallDoubleBounce animation.
- - LineScalePulseOut: LineScalePulseOut animation.
- - LineScalePulseOutRapid: LineScalePulseOutRapid animation.
- - BallScaleRipple: BallScaleRipple animation.
- - BallScaleRippleMultiple: BallScaleRippleMultiple animation.
- - BallSpinFadeLoader: BallSpinFadeLoader animation.
- - LineSpinFadeLoader: LineSpinFadeLoader animation.
- - TriangleSkewSpin: TriangleSkewSpin animation.
- - Pacman: Pacman animation.
- - BallGridBeat: BallGridBeat animation.
- - SemiCircleSpin: SemiCircleSpin animation.
- - BallRotateChase: BallRotateChase animation.
- - Orbit: Orbit animation.
- - AudioEqualizer: AudioEqualizer animation.
- - CircleStrokeSpin: CircleStrokeSpin animation.
- */
+/// Enum of animation types used for activity indicator view.
+///
+/// - Blank: Blank animation.
+/// - BallPulse: BallPulse animation.
+/// - BallGridPulse: BallGridPulse animation.
+/// - BallClipRotate: BallClipRotate animation.
+/// - SquareSpin: SquareSpin animation.
+/// - BallClipRotatePulse: BallClipRotatePulse animation.
+/// - BallClipRotateMultiple: BallClipRotateMultiple animation.
+/// - BallPulseRise: BallPulseRise animation.
+/// - BallRotate: BallRotate animation.
+/// - CubeTransition: CubeTransition animation.
+/// - BallZigZag: BallZigZag animation.
+/// - BallZigZagDeflect: BallZigZagDeflect animation.
+/// - BallTrianglePath: BallTrianglePath animation.
+/// - BallScale: BallScale animation.
+/// - LineScale: LineScale animation.
+/// - LineScaleParty: LineScaleParty animation.
+/// - BallScaleMultiple: BallScaleMultiple animation.
+/// - BallPulseSync: BallPulseSync animation.
+/// - BallBeat: BallBeat animation.
+/// - BallDoubleBounce: BallDoubleBounce animation.
+/// - LineScalePulseOut: LineScalePulseOut animation.
+/// - LineScalePulseOutRapid: LineScalePulseOutRapid animation.
+/// - BallScaleRipple: BallScaleRipple animation.
+/// - BallScaleRippleMultiple: BallScaleRippleMultiple animation.
+/// - BallSpinFadeLoader: BallSpinFadeLoader animation.
+/// - LineSpinFadeLoader: LineSpinFadeLoader animation.
+/// - TriangleSkewSpin: TriangleSkewSpin animation.
+/// - Pacman: Pacman animation.
+/// - BallGridBeat: BallGridBeat animation.
+/// - SemiCircleSpin: SemiCircleSpin animation.
+/// - BallRotateChase: BallRotateChase animation.
+/// - Orbit: Orbit animation.
+/// - AudioEqualizer: AudioEqualizer animation.
+/// - CircleStrokeSpin: CircleStrokeSpin animation.
public enum NVActivityIndicatorType: CaseIterable {
- /**
- Blank.
-
- - returns: Instance of NVActivityIndicatorAnimationBlank.
- */
+ /// Blank.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBlank.
case blank
- /**
- BallPulse.
-
- - returns: Instance of NVActivityIndicatorAnimationBallPulse.
- */
+ /// BallPulse.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallPulse.
case ballPulse
- /**
- BallGridPulse.
-
- - returns: Instance of NVActivityIndicatorAnimationBallGridPulse.
- */
+ /// BallGridPulse.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallGridPulse.
case ballGridPulse
- /**
- BallClipRotate.
-
- - returns: Instance of NVActivityIndicatorAnimationBallClipRotate.
- */
+ /// BallClipRotate.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallClipRotate.
case ballClipRotate
- /**
- SquareSpin.
-
- - returns: Instance of NVActivityIndicatorAnimationSquareSpin.
- */
+ /// SquareSpin.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationSquareSpin.
case squareSpin
- /**
- BallClipRotatePulse.
-
- - returns: Instance of NVActivityIndicatorAnimationBallClipRotatePulse.
- */
+ /// BallClipRotatePulse.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallClipRotatePulse.
case ballClipRotatePulse
- /**
- BallClipRotateMultiple.
-
- - returns: Instance of NVActivityIndicatorAnimationBallClipRotateMultiple.
- */
+ /// BallClipRotateMultiple.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallClipRotateMultiple.
case ballClipRotateMultiple
- /**
- BallPulseRise.
-
- - returns: Instance of NVActivityIndicatorAnimationBallPulseRise.
- */
+ /// BallPulseRise.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallPulseRise.
case ballPulseRise
- /**
- BallRotate.
-
- - returns: Instance of NVActivityIndicatorAnimationBallRotate.
- */
+ /// BallRotate.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallRotate.
case ballRotate
- /**
- CubeTransition.
-
- - returns: Instance of NVActivityIndicatorAnimationCubeTransition.
- */
+ /// CubeTransition.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationCubeTransition.
case cubeTransition
- /**
- BallZigZag.
-
- - returns: Instance of NVActivityIndicatorAnimationBallZigZag.
- */
+ /// BallZigZag.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallZigZag.
case ballZigZag
- /**
- BallZigZagDeflect
-
- - returns: Instance of NVActivityIndicatorAnimationBallZigZagDeflect
- */
+ /// BallZigZagDeflect
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallZigZagDeflect
case ballZigZagDeflect
- /**
- BallTrianglePath.
-
- - returns: Instance of NVActivityIndicatorAnimationBallTrianglePath.
- */
+ /// BallTrianglePath.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallTrianglePath.
case ballTrianglePath
- /**
- BallScale.
-
- - returns: Instance of NVActivityIndicatorAnimationBallScale.
- */
+ /// BallScale.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallScale.
case ballScale
- /**
- LineScale.
-
- - returns: Instance of NVActivityIndicatorAnimationLineScale.
- */
+ /// LineScale.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationLineScale.
case lineScale
- /**
- LineScaleParty.
-
- - returns: Instance of NVActivityIndicatorAnimationLineScaleParty.
- */
+ /// LineScaleParty.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationLineScaleParty.
case lineScaleParty
- /**
- BallScaleMultiple.
-
- - returns: Instance of NVActivityIndicatorAnimationBallScaleMultiple.
- */
+ /// BallScaleMultiple.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallScaleMultiple.
case ballScaleMultiple
- /**
- BallPulseSync.
-
- - returns: Instance of NVActivityIndicatorAnimationBallPulseSync.
- */
+ /// BallPulseSync.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallPulseSync.
case ballPulseSync
- /**
- BallBeat.
-
- - returns: Instance of NVActivityIndicatorAnimationBallBeat.
- */
+ /// BallBeat.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallBeat.
case ballBeat
- /**
- BallDoubleBounce.
-
- - returns: Instance of NVActivityIndicatorAnimationBallDoubleBounce.
- */
+ /// BallDoubleBounce.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallDoubleBounce.
case ballDoubleBounce
- /**
- LineScalePulseOut.
-
- - returns: Instance of NVActivityIndicatorAnimationLineScalePulseOut.
- */
+ /// LineScalePulseOut.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationLineScalePulseOut.
case lineScalePulseOut
- /**
- LineScalePulseOutRapid.
-
- - returns: Instance of NVActivityIndicatorAnimationLineScalePulseOutRapid.
- */
+ /// LineScalePulseOutRapid.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationLineScalePulseOutRapid.
case lineScalePulseOutRapid
- /**
- BallScaleRipple.
-
- - returns: Instance of NVActivityIndicatorAnimationBallScaleRipple.
- */
+ /// BallScaleRipple.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallScaleRipple.
case ballScaleRipple
- /**
- BallScaleRippleMultiple.
-
- - returns: Instance of NVActivityIndicatorAnimationBallScaleRippleMultiple.
- */
+ /// BallScaleRippleMultiple.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallScaleRippleMultiple.
case ballScaleRippleMultiple
- /**
- BallSpinFadeLoader.
-
- - returns: Instance of NVActivityIndicatorAnimationBallSpinFadeLoader.
- */
+ /// BallSpinFadeLoader.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallSpinFadeLoader.
case ballSpinFadeLoader
- /**
- LineSpinFadeLoader.
-
- - returns: Instance of NVActivityIndicatorAnimationLineSpinFadeLoader.
- */
+ /// LineSpinFadeLoader.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationLineSpinFadeLoader.
case lineSpinFadeLoader
- /**
- TriangleSkewSpin.
-
- - returns: Instance of NVActivityIndicatorAnimationTriangleSkewSpin.
- */
+ /// TriangleSkewSpin.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationTriangleSkewSpin.
case triangleSkewSpin
- /**
- Pacman.
-
- - returns: Instance of NVActivityIndicatorAnimationPacman.
- */
+ /// Pacman.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationPacman.
case pacman
- /**
- BallGridBeat.
-
- - returns: Instance of NVActivityIndicatorAnimationBallGridBeat.
- */
+ /// BallGridBeat.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallGridBeat.
case ballGridBeat
- /**
- SemiCircleSpin.
-
- - returns: Instance of NVActivityIndicatorAnimationSemiCircleSpin.
- */
+ /// SemiCircleSpin.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationSemiCircleSpin.
case semiCircleSpin
- /**
- BallRotateChase.
-
- - returns: Instance of NVActivityIndicatorAnimationBallRotateChase.
- */
+ /// BallRotateChase.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationBallRotateChase.
case ballRotateChase
- /**
- Orbit.
-
- - returns: Instance of NVActivityIndicatorAnimationOrbit.
- */
+ /// Orbit.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationOrbit.
case orbit
- /**
- AudioEqualizer.
-
- - returns: Instance of NVActivityIndicatorAnimationAudioEqualizer.
- */
+ /// AudioEqualizer.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationAudioEqualizer.
case audioEqualizer
- /**
- Stroke.
-
- - returns: Instance of NVActivityIndicatorAnimationCircleStrokeSpin.
- */
+ /// Stroke.
+ ///
+ /// - returns: Instance of NVActivityIndicatorAnimationCircleStrokeSpin.
case circleStrokeSpin
// swiftlint:disable:next cyclomatic_complexity function_body_length
@@ -345,28 +280,32 @@ public enum NVActivityIndicatorType: CaseIterable {
return NVActivityIndicatorAnimationCircleStrokeSpin()
}
}
+
+ public var animationName: String {
+ String(describing: animation()).replacingOccurrences(of: "NVActivityIndicatorView.NVActivityIndicatorAnimation", with: "")
+ }
}
/// Function that performs fade in/out animation.
-public typealias FadeInAnimation = (UIView) -> Void
+public typealias FadeInAnimation = (NSUIView) -> Void
/// Function that performs fade out animation.
///
/// - Note: Must call the second parameter on the animation completion.
-public typealias FadeOutAnimation = (UIView, @escaping () -> Void) -> Void
+public typealias FadeOutAnimation = (NSUIView, @escaping () -> Void) -> Void
// swiftlint:disable file_length
/// Activity indicator view with nice animations
-public final class NVActivityIndicatorView: UIView {
+public final class NVActivityIndicatorView: NSUIView {
// swiftlint:disable identifier_name
/// Default type. Default value is .BallSpinFadeLoader.
public static var DEFAULT_TYPE: NVActivityIndicatorType = .ballSpinFadeLoader
/// Default color of activity indicator. Default value is UIColor.white.
- public static var DEFAULT_COLOR = UIColor.white
+ public static var DEFAULT_COLOR = NSUIColor.white
/// Default color of text. Default value is UIColor.white.
- public static var DEFAULT_TEXT_COLOR = UIColor.white
+ public static var DEFAULT_TEXT_COLOR = NSUIColor.white
/// Default padding. Default value is 0.
public static var DEFAULT_PADDING: CGFloat = 0
@@ -393,31 +332,38 @@ public final class NVActivityIndicatorView: UIView {
public static var DEFAULT_BLOCKER_MESSAGE_SPACING = CGFloat(8.0)
/// Default font of message displayed in UI blocker. Default value is bold system font, size 20.
- public static var DEFAULT_BLOCKER_MESSAGE_FONT = UIFont.boldSystemFont(ofSize: 20)
+ public static var DEFAULT_BLOCKER_MESSAGE_FONT = NSUIFont.boldSystemFont(ofSize: 20)
/// Default background color of UI blocker. Default value is UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
- public static var DEFAULT_BLOCKER_BACKGROUND_COLOR = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
+ public static var DEFAULT_BLOCKER_BACKGROUND_COLOR = NSUIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
/// Default fade in animation.
public static var DEFAULT_FADE_IN_ANIMATION: FadeInAnimation = { view in
view.alpha = 0
- UIView.animate(withDuration: 0.25) {
+ NSUIView.animate(withDuration: 0.25) {
view.alpha = 1
}
}
/// Default fade out animation.
- public static var DEFAULT_FADE_OUT_ANIMATION: FadeOutAnimation = { (view, complete) in
- UIView.animate(withDuration: 0.25,
- animations: {
- view.alpha = 0
- },
- completion: { completed in
- if completed {
- complete()
- }
- })
+ public static var DEFAULT_FADE_OUT_ANIMATION: FadeOutAnimation = { view, complete in
+ NSUIView.animate(
+ withDuration: 0.25,
+ animations: {
+ view.alpha = 0
+ },
+ completion: { completed in
+ if completed {
+ complete()
+ }
+ }
+ )
}
+
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ public override var isFlipped: Bool { true }
+ #endif
+
// swiftlint:enable identifier_name
/// Animation type.
@@ -434,7 +380,7 @@ public final class NVActivityIndicatorView: UIView {
}
/// Color of activity indicator view.
- @IBInspectable public var color: UIColor = NVActivityIndicatorView.DEFAULT_COLOR
+ @IBInspectable public var color: NSUIColor = NVActivityIndicatorView.DEFAULT_COLOR
/// Padding of activity indicator view.
@IBInspectable public var padding: CGFloat = NVActivityIndicatorView.DEFAULT_PADDING
@@ -444,52 +390,52 @@ public final class NVActivityIndicatorView: UIView {
public var animating: Bool { return isAnimating }
/// Current status of animation, read-only.
- private(set) public var isAnimating: Bool = false
-
- /**
- Returns an object initialized from data in a given unarchiver.
- self, initialized using the data in decoder.
-
- - parameter decoder: an unarchiver object.
+ public private(set) var isAnimating: Bool = false
- - returns: self, initialized using the data in decoder.
- */
+ /// Returns an object initialized from data in a given unarchiver.
+ /// self, initialized using the data in decoder.
+ ///
+ /// - parameter decoder: an unarchiver object.
+ ///
+ /// - returns: self, initialized using the data in decoder.
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
- backgroundColor = UIColor.clear
+ backgroundColor = NSUIColor.clear
isHidden = true
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ setWantsLayer()
+ #endif
}
- /**
- Create a activity indicator view.
-
- Appropriate NVActivityIndicatorView.DEFAULT_* values are used for omitted params.
-
- - parameter frame: view's frame.
- - parameter type: animation type.
- - parameter color: color of activity indicator view.
- - parameter padding: padding of activity indicator view.
-
- - returns: The activity indicator view.
- */
- public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) {
+ /// Create a activity indicator view.
+ ///
+ /// Appropriate NVActivityIndicatorView.DEFAULT_* values are used for omitted params.
+ ///
+ /// - parameter frame: view's frame.
+ /// - parameter type: animation type.
+ /// - parameter color: color of activity indicator view.
+ /// - parameter padding: padding of activity indicator view.
+ ///
+ /// - returns: The activity indicator view.
+ public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: NSUIColor? = nil, padding: CGFloat? = nil) {
self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE
self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR
self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING
super.init(frame: frame)
isHidden = true
+ #if canImport(AppKit) && !targetEnvironment(macCatalyst)
+ setWantsLayer()
+ #endif
}
- // Fix issue #62
- // Intrinsic content size is used in autolayout
- // that causes mislayout when using with MBProgressHUD.
- /**
- Returns the natural size for the receiving view, considering only properties of the view itself.
-
- A size indicating the natural size for the receiving view based on its intrinsic properties.
-
- - returns: A size indicating the natural size for the receiving view based on its intrinsic properties.
- */
+ /// Fix issue #62
+ /// Intrinsic content size is used in autolayout
+ /// that causes mislayout when using with MBProgressHUD.
+ /// Returns the natural size for the receiving view, considering only properties of the view itself.
+ ///
+ /// A size indicating the natural size for the receiving view based on its intrinsic properties.
+ ///
+ /// - returns: A size indicating the natural size for the receiving view based on its intrinsic properties.
public override var intrinsicContentSize: CGSize {
return CGSize(width: bounds.width, height: bounds.height)
}
@@ -503,29 +449,25 @@ public final class NVActivityIndicatorView: UIView {
}
}
- /**
- Start animating.
- */
+ /// Start animating.
public final func startAnimating() {
guard !isAnimating else {
return
}
isHidden = false
isAnimating = true
- layer.speed = 1
+ _layer?.speed = 1
setUpAnimation()
}
- /**
- Stop animating.
- */
+ /// Stop animating.
public final func stopAnimating() {
guard isAnimating else {
return
}
isHidden = true
isAnimating = false
- layer.sublayers?.removeAll()
+ _layer?.sublayers?.removeAll()
}
// MARK: Internal
@@ -548,12 +490,13 @@ public final class NVActivityIndicatorView: UIView {
private final func setUpAnimation() {
let animation: NVActivityIndicatorAnimationDelegate = type.animation()
- var animationRect = frame.inset(by: UIEdgeInsets(top: padding, left: padding, bottom: padding, right: padding))
+ var animationRect = frame.inset(by: NSUIEdgeInsets(top: padding, left: padding, bottom: padding, right: padding))
let minEdge = min(animationRect.width, animationRect.height)
- layer.sublayers = nil
+ _layer?.sublayers = nil
animationRect.size = CGSize(width: minEdge, height: minEdge)
- animation.setUpAnimation(in: layer, size: animationRect.size, color: color)
+ if let layer = _layer {
+ animation.setUpAnimation(in: layer, size: animationRect.size, color: color)
+ }
}
}
-#endif
diff --git a/Sources/Base/Typealias.swift b/Sources/Base/Typealias.swift
new file mode 100644
index 00000000..a1e97a39
--- /dev/null
+++ b/Sources/Base/Typealias.swift
@@ -0,0 +1,37 @@
+#if canImport(AppKit) && !targetEnvironment(macCatalyst)
+import AppKit
+
+public typealias NSUIView = NSView
+public typealias NSUIViewController = NSViewController
+public typealias NSUIStoryboard = NSStoryboard
+public typealias NSUIStackView = NSStackView
+public typealias NSUIStackViewOrientationOrAxis = NSUserInterfaceLayoutOrientation
+public typealias NSUILayoutConstraintOrientationOrAxis = NSLayoutConstraint.Orientation
+public typealias NSUILayoutPriority = NSLayoutConstraint.Priority
+public typealias NSUIStackViewAlignment = NSLayoutConstraint.Attribute
+public typealias NSUIStackViewDistribution = NSUIStackView.Distribution
+public typealias NSUIEdgeInsets = NSEdgeInsets
+public typealias NSUILayoutGuide = NSLayoutGuide
+public typealias NSUIColor = NSColor
+public typealias NSUIFont = NSFont
+public typealias NSUIBezierPath = NSBezierPath
+#endif
+
+#if canImport(UIKit)
+import UIKit
+
+public typealias NSUIView = UIView
+public typealias NSUIViewController = UIViewController
+public typealias NSUIStoryboard = UIStoryboard
+public typealias NSUIStackView = UIStackView
+public typealias NSUIStackViewOrientationOrAxis = NSLayoutConstraint.Axis
+public typealias NSUIStackViewAlignment = NSUIStackView.Alignment
+public typealias NSUIStackViewDistribution = NSUIStackView.Distribution
+public typealias NSUILayoutPriority = UILayoutPriority
+public typealias NSUILayoutConstraintOrientationOrAxis = NSLayoutConstraint.Axis
+public typealias NSUIEdgeInsets = UIEdgeInsets
+public typealias NSUILayoutGuide = UILayoutGuide
+public typealias NSUIColor = UIColor
+public typealias NSUIBezierPath = UIBezierPath
+public typealias NSUIFont = UIFont
+#endif