diff --git a/Demo/Demo.xcodeproj/project.pbxproj b/Demo/Demo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2033c5e --- /dev/null +++ b/Demo/Demo.xcodeproj/project.pbxproj @@ -0,0 +1,378 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 52; + objects = { + +/* Begin PBXBuildFile section */ + 08477C322A6A2F5E0028F2E6 /* Segmenter in Frameworks */ = {isa = PBXBuildFile; productRef = 08477C312A6A2F5E0028F2E6 /* Segmenter */; }; + 0882849125A3489800072D2E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0882849025A3489800072D2E /* AppDelegate.swift */; }; + 0882849325A3489800072D2E /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0882849225A3489800072D2E /* SceneDelegate.swift */; }; + 0882849525A3489800072D2E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0882849425A3489800072D2E /* ViewController.swift */; }; + 0882849825A3489800072D2E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0882849625A3489800072D2E /* Main.storyboard */; }; + 0882849A25A3489900072D2E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0882849925A3489900072D2E /* Assets.xcassets */; }; + 0882849D25A3489900072D2E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0882849B25A3489900072D2E /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 08477C302A6A2F550028F2E6 /* Segmenter */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = Segmenter; path = ..; sourceTree = ""; }; + 0882848D25A3489800072D2E /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0882849025A3489800072D2E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 0882849225A3489800072D2E /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 0882849425A3489800072D2E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 0882849725A3489800072D2E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 0882849925A3489900072D2E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 0882849C25A3489900072D2E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 0882849E25A3489900072D2E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 08F705D92A6A2EA30008C5F6 /* Segmenter */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = Segmenter; path = ..; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0882848A25A3489800072D2E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 08477C322A6A2F5E0028F2E6 /* Segmenter in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0882848425A3489800072D2E = { + isa = PBXGroup; + children = ( + 08F705D82A6A2EA30008C5F6 /* Packages */, + 0882848F25A3489800072D2E /* Segmenter */, + 0882848E25A3489800072D2E /* Products */, + 08F705DA2A6A2EB10008C5F6 /* Frameworks */, + ); + sourceTree = ""; + }; + 0882848E25A3489800072D2E /* Products */ = { + isa = PBXGroup; + children = ( + 0882848D25A3489800072D2E /* Demo.app */, + ); + name = Products; + sourceTree = ""; + }; + 0882848F25A3489800072D2E /* Segmenter */ = { + isa = PBXGroup; + children = ( + 0882849025A3489800072D2E /* AppDelegate.swift */, + 0882849225A3489800072D2E /* SceneDelegate.swift */, + 0882849425A3489800072D2E /* ViewController.swift */, + 0882849625A3489800072D2E /* Main.storyboard */, + 0882849925A3489900072D2E /* Assets.xcassets */, + 0882849B25A3489900072D2E /* LaunchScreen.storyboard */, + 0882849E25A3489900072D2E /* Info.plist */, + ); + path = Segmenter; + sourceTree = ""; + }; + 08F705D82A6A2EA30008C5F6 /* Packages */ = { + isa = PBXGroup; + children = ( + 08F705D92A6A2EA30008C5F6 /* Segmenter */, + 08477C302A6A2F550028F2E6 /* Segmenter */, + ); + name = Packages; + sourceTree = ""; + }; + 08F705DA2A6A2EB10008C5F6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0882848C25A3489800072D2E /* Demo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 088284A125A3489900072D2E /* Build configuration list for PBXNativeTarget "Demo" */; + buildPhases = ( + 0882848925A3489800072D2E /* Sources */, + 0882848A25A3489800072D2E /* Frameworks */, + 0882848B25A3489800072D2E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Demo; + packageProductDependencies = ( + 08477C312A6A2F5E0028F2E6 /* Segmenter */, + ); + productName = Segmenter; + productReference = 0882848D25A3489800072D2E /* Demo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0882848525A3489800072D2E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1230; + LastUpgradeCheck = 1230; + TargetAttributes = { + 0882848C25A3489800072D2E = { + CreatedOnToolsVersion = 12.3; + }; + }; + }; + buildConfigurationList = 0882848825A3489800072D2E /* Build configuration list for PBXProject "Demo" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 0882848425A3489800072D2E; + productRefGroup = 0882848E25A3489800072D2E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 0882848C25A3489800072D2E /* Demo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0882848B25A3489800072D2E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0882849D25A3489900072D2E /* LaunchScreen.storyboard in Resources */, + 0882849A25A3489900072D2E /* Assets.xcassets in Resources */, + 0882849825A3489800072D2E /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0882848925A3489800072D2E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0882849525A3489800072D2E /* ViewController.swift in Sources */, + 0882849125A3489800072D2E /* AppDelegate.swift in Sources */, + 0882849325A3489800072D2E /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 0882849625A3489800072D2E /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 0882849725A3489800072D2E /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 0882849B25A3489900072D2E /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 0882849C25A3489900072D2E /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 0882849F25A3489900072D2E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.3; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 088284A025A3489900072D2E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.3; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 088284A225A3489900072D2E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = P55DG9QH44; + INFOPLIST_FILE = Segmenter/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = cc.iwecon.Segmenter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 088284A325A3489900072D2E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = P55DG9QH44; + INFOPLIST_FILE = Segmenter/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = cc.iwecon.Segmenter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0882848825A3489800072D2E /* Build configuration list for PBXProject "Demo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0882849F25A3489900072D2E /* Debug */, + 088284A025A3489900072D2E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 088284A125A3489900072D2E /* Build configuration list for PBXNativeTarget "Demo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 088284A225A3489900072D2E /* Debug */, + 088284A325A3489900072D2E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + 08477C312A6A2F5E0028F2E6 /* Segmenter */ = { + isa = XCSwiftPackageProductDependency; + productName = Segmenter; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 0882848525A3489800072D2E /* Project object */; +} diff --git a/Demo/Segmenter.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 56% rename from Demo/Segmenter.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 919434a..6267639 100644 --- a/Demo/Segmenter.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/i/repositories/private/Segmenter/Demo/Demo.xcodeproj"> diff --git a/Demo/Segmenter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Demo/Segmenter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Demo/Segmenter.xcodeproj/project.pbxproj b/Demo/Segmenter.xcodeproj/project.pbxproj deleted file mode 100644 index 744aabd..0000000 --- a/Demo/Segmenter.xcodeproj/project.pbxproj +++ /dev/null @@ -1,499 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 0882849125A3489800072D2E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0882849025A3489800072D2E /* AppDelegate.swift */; }; - 0882849325A3489800072D2E /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0882849225A3489800072D2E /* SceneDelegate.swift */; }; - 0882849525A3489800072D2E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0882849425A3489800072D2E /* ViewController.swift */; }; - 0882849825A3489800072D2E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0882849625A3489800072D2E /* Main.storyboard */; }; - 0882849A25A3489900072D2E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0882849925A3489900072D2E /* Assets.xcassets */; }; - 0882849D25A3489900072D2E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0882849B25A3489900072D2E /* LaunchScreen.storyboard */; }; - 08BA614227EC606600D78709 /* DefaultSupplementaryViewsTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA612A27EC606600D78709 /* DefaultSupplementaryViewsTransition.swift */; }; - 08BA614327EC606600D78709 /* FadePopSupplementaryViewsTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA612B27EC606600D78709 /* FadePopSupplementaryViewsTransition.swift */; }; - 08BA614427EC606600D78709 /* SupplementaryViewsTransitionProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA612C27EC606600D78709 /* SupplementaryViewsTransitionProvider.swift */; }; - 08BA614527EC606600D78709 /* SegmenterGradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA612D27EC606600D78709 /* SegmenterGradientView.swift */; }; - 08BA614627EC606600D78709 /* UIEdgeInsets+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA612E27EC606600D78709 /* UIEdgeInsets+.swift */; }; - 08BA614727EC606600D78709 /* +VerticallyOffsetMapHashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA612F27EC606600D78709 /* +VerticallyOffsetMapHashable.swift */; }; - 08BA614827EC606600D78709 /* Segment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613127EC606600D78709 /* Segment.swift */; }; - 08BA614927EC606600D78709 /* +ViewInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613327EC606600D78709 /* +ViewInfo.swift */; }; - 08BA614A27EC606600D78709 /* +ImageInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613427EC606600D78709 /* +ImageInfo.swift */; }; - 08BA614B27EC606600D78709 /* +LabelInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613527EC606600D78709 /* +LabelInfo.swift */; }; - 08BA614C27EC606600D78709 /* SegmentInfoProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613627EC606600D78709 /* SegmentInfoProvider.swift */; }; - 08BA614D27EC606600D78709 /* +Segment+Label.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613827EC606600D78709 /* +Segment+Label.swift */; }; - 08BA614E27EC606600D78709 /* +Segment+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613927EC606600D78709 /* +Segment+Image.swift */; }; - 08BA614F27EC606600D78709 /* +Segment+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613A27EC606600D78709 /* +Segment+Provider.swift */; }; - 08BA615027EC606600D78709 /* +Segment+View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613B27EC606600D78709 /* +Segment+View.swift */; }; - 08BA615127EC606600D78709 /* +SupplementaryContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613C27EC606600D78709 /* +SupplementaryContainerView.swift */; }; - 08BA615327EC606600D78709 /* +Distribution.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613E27EC606600D78709 /* +Distribution.swift */; }; - 08BA615427EC606600D78709 /* Segmentedable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA613F27EC606600D78709 /* Segmentedable.swift */; }; - 08BA615527EC606600D78709 /* SegmenterSelectedDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA614027EC606600D78709 /* SegmenterSelectedDelegate.swift */; }; - 08BA615627EC606600D78709 /* Segmenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BA614127EC606600D78709 /* Segmenter.swift */; }; - 08C8C7AB29F7A6A100572349 /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08C8C7AA29F7A6A100572349 /* Indicator.swift */; }; - 08C8C7AD29F7BC2500572349 /* LineIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08C8C7AC29F7BC2500572349 /* LineIndicator.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 0882848D25A3489800072D2E /* Segmenter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Segmenter.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 0882849025A3489800072D2E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 0882849225A3489800072D2E /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 0882849425A3489800072D2E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 0882849725A3489800072D2E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 0882849925A3489900072D2E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 0882849C25A3489900072D2E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 0882849E25A3489900072D2E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 08BA612A27EC606600D78709 /* DefaultSupplementaryViewsTransition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultSupplementaryViewsTransition.swift; sourceTree = ""; }; - 08BA612B27EC606600D78709 /* FadePopSupplementaryViewsTransition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FadePopSupplementaryViewsTransition.swift; sourceTree = ""; }; - 08BA612C27EC606600D78709 /* SupplementaryViewsTransitionProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupplementaryViewsTransitionProvider.swift; sourceTree = ""; }; - 08BA612D27EC606600D78709 /* SegmenterGradientView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SegmenterGradientView.swift; sourceTree = ""; }; - 08BA612E27EC606600D78709 /* UIEdgeInsets+.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIEdgeInsets+.swift"; sourceTree = ""; }; - 08BA612F27EC606600D78709 /* +VerticallyOffsetMapHashable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+VerticallyOffsetMapHashable.swift"; sourceTree = ""; }; - 08BA613127EC606600D78709 /* Segment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Segment.swift; sourceTree = ""; }; - 08BA613327EC606600D78709 /* +ViewInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+ViewInfo.swift"; sourceTree = ""; }; - 08BA613427EC606600D78709 /* +ImageInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+ImageInfo.swift"; sourceTree = ""; }; - 08BA613527EC606600D78709 /* +LabelInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+LabelInfo.swift"; sourceTree = ""; }; - 08BA613627EC606600D78709 /* SegmentInfoProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SegmentInfoProvider.swift; sourceTree = ""; }; - 08BA613827EC606600D78709 /* +Segment+Label.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+Segment+Label.swift"; sourceTree = ""; }; - 08BA613927EC606600D78709 /* +Segment+Image.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+Segment+Image.swift"; sourceTree = ""; }; - 08BA613A27EC606600D78709 /* +Segment+Provider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+Segment+Provider.swift"; sourceTree = ""; }; - 08BA613B27EC606600D78709 /* +Segment+View.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+Segment+View.swift"; sourceTree = ""; }; - 08BA613C27EC606600D78709 /* +SupplementaryContainerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+SupplementaryContainerView.swift"; sourceTree = ""; }; - 08BA613E27EC606600D78709 /* +Distribution.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "+Distribution.swift"; sourceTree = ""; }; - 08BA613F27EC606600D78709 /* Segmentedable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Segmentedable.swift; sourceTree = ""; }; - 08BA614027EC606600D78709 /* SegmenterSelectedDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SegmenterSelectedDelegate.swift; sourceTree = ""; }; - 08BA614127EC606600D78709 /* Segmenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Segmenter.swift; sourceTree = ""; }; - 08C8C7AA29F7A6A100572349 /* Indicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Indicator.swift; sourceTree = ""; }; - 08C8C7AC29F7BC2500572349 /* LineIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineIndicator.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 0882848A25A3489800072D2E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0882848425A3489800072D2E = { - isa = PBXGroup; - children = ( - 08D1BCBC26329C0400967F1B /* Sources */, - 0882848F25A3489800072D2E /* Segmenter */, - 0882848E25A3489800072D2E /* Products */, - ); - sourceTree = ""; - }; - 0882848E25A3489800072D2E /* Products */ = { - isa = PBXGroup; - children = ( - 0882848D25A3489800072D2E /* Segmenter.app */, - ); - name = Products; - sourceTree = ""; - }; - 0882848F25A3489800072D2E /* Segmenter */ = { - isa = PBXGroup; - children = ( - 0882849025A3489800072D2E /* AppDelegate.swift */, - 0882849225A3489800072D2E /* SceneDelegate.swift */, - 0882849425A3489800072D2E /* ViewController.swift */, - 0882849625A3489800072D2E /* Main.storyboard */, - 0882849925A3489900072D2E /* Assets.xcassets */, - 0882849B25A3489900072D2E /* LaunchScreen.storyboard */, - 0882849E25A3489900072D2E /* Info.plist */, - ); - path = Segmenter; - sourceTree = ""; - }; - 08BA612727EC606600D78709 /* Segmenter */ = { - isa = PBXGroup; - children = ( - 08C8C7A929F7A69B00572349 /* Indicator */, - 08BA612827EC606600D78709 /* Transition */, - 08BA612D27EC606600D78709 /* SegmenterGradientView.swift */, - 08BA612E27EC606600D78709 /* UIEdgeInsets+.swift */, - 08BA612F27EC606600D78709 /* +VerticallyOffsetMapHashable.swift */, - 08BA613027EC606600D78709 /* Segment */, - 08BA613C27EC606600D78709 /* +SupplementaryContainerView.swift */, - 08BA613E27EC606600D78709 /* +Distribution.swift */, - 08BA613F27EC606600D78709 /* Segmentedable.swift */, - 08BA614027EC606600D78709 /* SegmenterSelectedDelegate.swift */, - 08BA614127EC606600D78709 /* Segmenter.swift */, - ); - path = Segmenter; - sourceTree = ""; - }; - 08BA612827EC606600D78709 /* Transition */ = { - isa = PBXGroup; - children = ( - 08BA612927EC606600D78709 /* SupplementaryViewsTransition */, - ); - path = Transition; - sourceTree = ""; - }; - 08BA612927EC606600D78709 /* SupplementaryViewsTransition */ = { - isa = PBXGroup; - children = ( - 08BA612A27EC606600D78709 /* DefaultSupplementaryViewsTransition.swift */, - 08BA612B27EC606600D78709 /* FadePopSupplementaryViewsTransition.swift */, - 08BA612C27EC606600D78709 /* SupplementaryViewsTransitionProvider.swift */, - ); - path = SupplementaryViewsTransition; - sourceTree = ""; - }; - 08BA613027EC606600D78709 /* Segment */ = { - isa = PBXGroup; - children = ( - 08BA613127EC606600D78709 /* Segment.swift */, - 08BA613227EC606600D78709 /* Info */, - 08BA613727EC606600D78709 /* Views */, - ); - path = Segment; - sourceTree = ""; - }; - 08BA613227EC606600D78709 /* Info */ = { - isa = PBXGroup; - children = ( - 08BA613327EC606600D78709 /* +ViewInfo.swift */, - 08BA613427EC606600D78709 /* +ImageInfo.swift */, - 08BA613527EC606600D78709 /* +LabelInfo.swift */, - 08BA613627EC606600D78709 /* SegmentInfoProvider.swift */, - ); - path = Info; - sourceTree = ""; - }; - 08BA613727EC606600D78709 /* Views */ = { - isa = PBXGroup; - children = ( - 08BA613827EC606600D78709 /* +Segment+Label.swift */, - 08BA613927EC606600D78709 /* +Segment+Image.swift */, - 08BA613A27EC606600D78709 /* +Segment+Provider.swift */, - 08BA613B27EC606600D78709 /* +Segment+View.swift */, - ); - path = Views; - sourceTree = ""; - }; - 08C8C7A929F7A69B00572349 /* Indicator */ = { - isa = PBXGroup; - children = ( - 08C8C7AA29F7A6A100572349 /* Indicator.swift */, - 08C8C7AC29F7BC2500572349 /* LineIndicator.swift */, - ); - path = Indicator; - sourceTree = ""; - }; - 08D1BCBC26329C0400967F1B /* Sources */ = { - isa = PBXGroup; - children = ( - 08BA612727EC606600D78709 /* Segmenter */, - ); - name = Sources; - path = ../Sources; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 0882848C25A3489800072D2E /* Segmenter */ = { - isa = PBXNativeTarget; - buildConfigurationList = 088284A125A3489900072D2E /* Build configuration list for PBXNativeTarget "Segmenter" */; - buildPhases = ( - 0882848925A3489800072D2E /* Sources */, - 0882848A25A3489800072D2E /* Frameworks */, - 0882848B25A3489800072D2E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Segmenter; - productName = Segmenter; - productReference = 0882848D25A3489800072D2E /* Segmenter.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 0882848525A3489800072D2E /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1230; - LastUpgradeCheck = 1230; - TargetAttributes = { - 0882848C25A3489800072D2E = { - CreatedOnToolsVersion = 12.3; - }; - }; - }; - buildConfigurationList = 0882848825A3489800072D2E /* Build configuration list for PBXProject "Segmenter" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 0882848425A3489800072D2E; - productRefGroup = 0882848E25A3489800072D2E /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 0882848C25A3489800072D2E /* Segmenter */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 0882848B25A3489800072D2E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0882849D25A3489900072D2E /* LaunchScreen.storyboard in Resources */, - 0882849A25A3489900072D2E /* Assets.xcassets in Resources */, - 0882849825A3489800072D2E /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 0882848925A3489800072D2E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 08BA615027EC606600D78709 /* +Segment+View.swift in Sources */, - 0882849525A3489800072D2E /* ViewController.swift in Sources */, - 08BA615427EC606600D78709 /* Segmentedable.swift in Sources */, - 0882849125A3489800072D2E /* AppDelegate.swift in Sources */, - 08BA614627EC606600D78709 /* UIEdgeInsets+.swift in Sources */, - 08BA614327EC606600D78709 /* FadePopSupplementaryViewsTransition.swift in Sources */, - 08BA614927EC606600D78709 /* +ViewInfo.swift in Sources */, - 08C8C7AB29F7A6A100572349 /* Indicator.swift in Sources */, - 08BA615127EC606600D78709 /* +SupplementaryContainerView.swift in Sources */, - 08BA615327EC606600D78709 /* +Distribution.swift in Sources */, - 08BA614A27EC606600D78709 /* +ImageInfo.swift in Sources */, - 08BA614527EC606600D78709 /* SegmenterGradientView.swift in Sources */, - 08BA614727EC606600D78709 /* +VerticallyOffsetMapHashable.swift in Sources */, - 08BA615627EC606600D78709 /* Segmenter.swift in Sources */, - 08BA614F27EC606600D78709 /* +Segment+Provider.swift in Sources */, - 0882849325A3489800072D2E /* SceneDelegate.swift in Sources */, - 08BA614B27EC606600D78709 /* +LabelInfo.swift in Sources */, - 08BA614427EC606600D78709 /* SupplementaryViewsTransitionProvider.swift in Sources */, - 08BA614E27EC606600D78709 /* +Segment+Image.swift in Sources */, - 08BA614D27EC606600D78709 /* +Segment+Label.swift in Sources */, - 08BA614227EC606600D78709 /* DefaultSupplementaryViewsTransition.swift in Sources */, - 08C8C7AD29F7BC2500572349 /* LineIndicator.swift in Sources */, - 08BA614C27EC606600D78709 /* SegmentInfoProvider.swift in Sources */, - 08BA614827EC606600D78709 /* Segment.swift in Sources */, - 08BA615527EC606600D78709 /* SegmenterSelectedDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 0882849625A3489800072D2E /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 0882849725A3489800072D2E /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 0882849B25A3489900072D2E /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 0882849C25A3489900072D2E /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 0882849F25A3489900072D2E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.3; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 088284A025A3489900072D2E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.3; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 088284A225A3489900072D2E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = P55DG9QH44; - INFOPLIST_FILE = Segmenter/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = cc.iwecon.Segmenter; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 088284A325A3489900072D2E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = P55DG9QH44; - INFOPLIST_FILE = Segmenter/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = cc.iwecon.Segmenter; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 0882848825A3489800072D2E /* Build configuration list for PBXProject "Segmenter" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0882849F25A3489900072D2E /* Debug */, - 088284A025A3489900072D2E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 088284A125A3489900072D2E /* Build configuration list for PBXNativeTarget "Segmenter" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 088284A225A3489900072D2E /* Debug */, - 088284A325A3489900072D2E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 0882848525A3489800072D2E /* Project object */; -} diff --git a/Demo/Segmenter/ViewController.swift b/Demo/Segmenter/ViewController.swift index a0d050f..7e27181 100644 --- a/Demo/Segmenter/ViewController.swift +++ b/Demo/Segmenter/ViewController.swift @@ -6,6 +6,36 @@ // import UIKit +import Segmenter + +final class IImageView: Segment.Image { + + required init(_ segment: Segment, info: SegmentInfoProvider) { + super.init(segment, info: info) + + print("ok") + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} + +struct IInfo: SegmentImageInfoProvider { + + var activeImage: UIImage + + var inactiveImage: UIImage? + + var activeSize: CGSize + + var inactiveSize: CGSize + + var viewType: (SegmentView).Type { + IImageView.self + } + +} class ViewController: UIViewController { @@ -46,11 +76,14 @@ class ViewController: UIViewController { segmenter.isShadowShouldShow = false segmenter.contentInset.bottom = 10 // set indicator - segmenter.indicator = LineIndicator() + let indicator = LineIndicator() + + segmenter.indicator = indicator segmenter.segments = [ .init(view: v, inactiveView: r, activeSize: CGSize(width: 44, height: 24), inactiveSize: CGSize(width: 34, height: 18.57), supplementaryViews: [makeButton("按钮1"), makeButton("按钮2"), makeButton("按钮3")]), .init(image: UIImage(named: "chuanghua")!, inactiveImage: UIImage(named: "chuanghua-2")!, activeSize: CGSize(width: 32, height: 32), inactiveSize: CGSize(width: 24, height: 24), supplementaryViews: [makeButton("按 钮 4"), makeButton("按钮5"), makeButton("按 钮 6")]), .init(title: "歌手 Anchor"), + .init(custom: IInfo(activeImage: UIImage(named: "chuanghua-2")!, activeSize: CGSize(width: 32, height: 32), inactiveSize: CGSize(width: 24, height: 24))), .init(title: "歌曲 Songs", supplementaryViews: [makeButton("听妈妈的话")]), .init(title: "歌词 LRC", supplementaryViews: [makeButton("你突然释怀的笑"), makeButton("笑声盘旋半山腰")]), .init(title: "简介 Brief", supplementaryViews: [makeButton("周 杰 伦 简 介")]), diff --git a/Sources/Segmenter/Indicator/LineIndicator.swift b/Sources/Segmenter/Indicator/LineIndicator.swift index daa80e1..33d63ab 100644 --- a/Sources/Segmenter/Indicator/LineIndicator.swift +++ b/Sources/Segmenter/Indicator/LineIndicator.swift @@ -42,7 +42,7 @@ public final class LineIndicator: UIView, Indicator { right = self.frame.maxX } - UIView.animateKeyframes(withDuration: Segmenter.default.animateDuration, delay: 0, options: [.beginFromCurrentState, .allowUserInteraction]) { + UIView.animateKeyframes(withDuration: Segmenter.default.animateDuration, delay: 0, options: [.beginFromCurrentState, .calculationModeCubicPaced]) { UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 0.3) { switch behavior { case .forward: diff --git a/Sources/Segmenter/Segment/Info/+ImageInfo.swift b/Sources/Segmenter/Segment/Info/+ImageInfo.swift index 671b20a..59b4e26 100644 --- a/Sources/Segmenter/Segment/Info/+ImageInfo.swift +++ b/Sources/Segmenter/Segment/Info/+ImageInfo.swift @@ -4,18 +4,27 @@ import UIKit +public protocol SegmentImageInfoProvider: SegmentInfoProvider { + var activeImage: UIImage { get } + var inactiveImage: UIImage? { get } + + var activeSize: CGSize { get } + var inactiveSize: CGSize { get } +} + +// MARK: ImageInfo extension Segment { - class _ImageInfo: SegmentInfoProvider { + struct _ImageInfo: SegmentImageInfoProvider { var viewType: (SegmentView).Type { - _Image.self + Image.self } - let activeImage: UIImage - let inactiveImage: UIImage? + var activeImage: UIImage + var inactiveImage: UIImage? - let activeSize: CGSize - let inactiveSize: CGSize + var activeSize: CGSize + var inactiveSize: CGSize init(activeImage: UIImage, inacitveImage: UIImage? = nil, activeSize: CGSize, inactiveSize: CGSize) { self.activeImage = activeImage diff --git a/Sources/Segmenter/Segment/Info/+LabelInfo.swift b/Sources/Segmenter/Segment/Info/+LabelInfo.swift index 2a3af2b..6157bd5 100644 --- a/Sources/Segmenter/Segment/Info/+LabelInfo.swift +++ b/Sources/Segmenter/Segment/Info/+LabelInfo.swift @@ -4,20 +4,29 @@ import UIKit +public protocol SegmentLabelInfoProvider: SegmentInfoProvider { + var title: String? { get } + + var activeFont: UIFont? { get } + var activeColor: UIColor? { get } + var inactiveFont: UIFont? { get } + var inactiveColor: UIColor? { get } +} + // MARK:- LabelInfo extension Segment { - struct _LabelInfo: SegmentInfoProvider { + struct _LabelInfo: SegmentLabelInfoProvider { var viewType: (SegmentView).Type { - _Label.self + Label.self } - let title: String? + var title: String? - let activeFont: UIFont? - let activeColor: UIColor? - let inactiveFont: UIFont? - let inactiveColor: UIColor? + var activeFont: UIFont? + var activeColor: UIColor? + var inactiveFont: UIFont? + var inactiveColor: UIColor? init(title: String, activeFont: UIFont? = nil, activeColor: UIColor? = nil, inactiveFont: UIFont? = nil, inactiveColor: UIColor? = nil) { self.title = title diff --git a/Sources/Segmenter/Segment/Info/+ViewInfo.swift b/Sources/Segmenter/Segment/Info/+ViewInfo.swift index ff8a7e0..171ee2e 100644 --- a/Sources/Segmenter/Segment/Info/+ViewInfo.swift +++ b/Sources/Segmenter/Segment/Info/+ViewInfo.swift @@ -4,18 +4,27 @@ import UIKit +public protocol SegmentViewInfoProvier: SegmentInfoProvider { + var activeView: UIView { get } + var inactiveView: UIView? { get } + + var activeSize: CGSize { get } + var inactiveSize: CGSize { get } +} + +// MARK: ViewInfo extension Segment { - class _ViewInfo: SegmentInfoProvider { + struct _ViewInfo: SegmentViewInfoProvier { var viewType: (SegmentView).Type { - _View.self + View.self } - let activeView: UIView - let inactiveView: UIView? + var activeView: UIView + var inactiveView: UIView? - let activeSize: CGSize - let inactiveSize: CGSize + var activeSize: CGSize + var inactiveSize: CGSize init(activeView: UIView, inactiveView: UIView? = nil, activeSize: CGSize, inactiveSize: CGSize) { self.activeView = activeView diff --git a/Sources/Segmenter/Segment/Views/+Segment+Image.swift b/Sources/Segmenter/Segment/Views/+Segment+Image.swift index b9d029c..2d414bb 100644 --- a/Sources/Segmenter/Segment/Views/+Segment+Image.swift +++ b/Sources/Segmenter/Segment/Views/+Segment+Image.swift @@ -6,13 +6,11 @@ import UIKit extension Segment { - class _Image: _View { + open class Image: View { - required init(_ segment: Segment, info: SegmentInfoProvider) { - guard let info = info as? _ImageInfo, - info.viewType == _Image.self - else { - fatalError("SegmentInfo and segmentViewType do not match.") + public required init(_ segment: Segment, info: SegmentInfoProvider) { + guard let info = info as? SegmentImageInfoProvider else { + fatalError("SegmentInfoProvider do not match as `SegmentImageInfoProvider`.") } func makeImageView(_ image: UIImage?) -> UIImageView? { @@ -31,7 +29,7 @@ extension Segment { super.init(Segment(kind: .view(viewInfo)), info: viewInfo) } - required init?(coder: NSCoder) { + public required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } diff --git a/Sources/Segmenter/Segment/Views/+Segment+Label.swift b/Sources/Segmenter/Segment/Views/+Segment+Label.swift index c625a12..234b49d 100644 --- a/Sources/Segmenter/Segment/Views/+Segment+Label.swift +++ b/Sources/Segmenter/Segment/Views/+Segment+Label.swift @@ -6,20 +6,18 @@ import UIKit extension Segment { - class _Label: UIControl, SegmentViewProvider { + open class Label: UIControl, SegmentViewProvider { - required init(_ segment: Segment, info: SegmentInfoProvider) { + public required init(_ segment: Segment, info: SegmentInfoProvider) { super.init(frame: .zero) + guard let labelInfo = info as? SegmentLabelInfoProvider else { + fatalError("SegmentInfoProvider do not match as `SegmentLabelInfoProvider`.") + } + addSubview(activeLabel) addSubview(inactiveLabel) - guard let labelInfo = info as? _LabelInfo, - info.viewType == _Label.self - else { - fatalError("SegmentInfo and segmentViewType do not match.") - } - activeLabel.text = labelInfo.title inactiveLabel.text = labelInfo.title @@ -30,7 +28,7 @@ extension Segment { inactiveLabel.textColor = labelInfo.inactiveColor } - lazy var activeLabel: UILabel = { + open lazy var activeLabel: UILabel = { let label = UILabel() label.textAlignment = .left label.alpha = 0 @@ -40,7 +38,7 @@ extension Segment { return label }() - lazy var inactiveLabel: UILabel = { + open lazy var inactiveLabel: UILabel = { let label = UILabel() label.textAlignment = .left label.alpha = 0 @@ -50,21 +48,21 @@ extension Segment { return label }() - var activeSize: CGSize { + open var activeSize: CGSize { activeLabel.frame.size } - var inactiveSize: CGSize { + open var inactiveSize: CGSize { inactiveLabel.frame.size } - override func sizeThatFits(_ size: CGSize) -> CGSize { + open override func sizeThatFits(_ size: CGSize) -> CGSize { invalidateIntrinsicContentSize() layoutIfNeeded() return isSelected ? activeLabel.intrinsicContentSize : inactiveLabel.intrinsicContentSize } - override var isSelected: Bool { + open override var isSelected: Bool { didSet { sizeToFit() @@ -78,7 +76,7 @@ extension Segment { } } - override func layoutSubviews() { + open override func layoutSubviews() { super.layoutSubviews() activeLabel.sizeToFit() @@ -88,10 +86,10 @@ extension Segment { inactiveLabel.frame.origin = .init(x: 0, y: self.frame.height - inactiveLabel.frame.height) } - override init(frame: CGRect) { + public override init(frame: CGRect) { super.init(frame: frame) } - required init?(coder: NSCoder) { + public required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } diff --git a/Sources/Segmenter/Segment/Views/+Segment+View.swift b/Sources/Segmenter/Segment/Views/+Segment+View.swift index 0bc2f74..bc31e27 100644 --- a/Sources/Segmenter/Segment/Views/+Segment+View.swift +++ b/Sources/Segmenter/Segment/Views/+Segment+View.swift @@ -6,25 +6,23 @@ import UIKit extension Segment { - class _View: SegmentView { + open class View: SegmentView { - var activeView: UIView - var inactiveView: UIView? - var isSingleView = false - var activeSize: CGSize = .zero - var inactiveSize: CGSize = .zero + open var activeView: UIView + open var inactiveView: UIView? + open var isSingleView = false + open var activeSize: CGSize = .zero + open var inactiveSize: CGSize = .zero - required init(_ segment: Segment, info: SegmentInfoProvider) { - guard let info = info as? Segment._ViewInfo - else { - fatalError("SegmentInfo do not match.") + public required init(_ segment: Segment, info: SegmentInfoProvider) { + guard let info = info as? SegmentViewInfoProvier else { + fatalError("SegmentInfoProvider do not match as `SegmentViewInfoProvier`.") } self.isSingleView = true self.activeView = info.activeView self.activeView.frame.size = info.activeSize self.activeView.layer.anchorPoint = .init(x: 0, y: 1) - //super.init(frame: .zero) super.init(frame: .zero) addSubview(self.activeView) @@ -42,11 +40,11 @@ extension Segment { } } - required init?(coder: NSCoder) { + public required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - override var isSelected: Bool { + open override var isSelected: Bool { didSet { sizeToFit() @@ -65,12 +63,12 @@ extension Segment { } } - override func sizeThatFits(_ size: CGSize) -> CGSize { + open override func sizeThatFits(_ size: CGSize) -> CGSize { layoutIfNeeded() return isSelected ? activeSize : inactiveSize } - override func layoutSubviews() { + open override func layoutSubviews() { super.layoutSubviews() if !isSingleView { diff --git a/Sources/Segmenter/Segmenter.swift b/Sources/Segmenter/Segmenter.swift index e0b8287..4d758ea 100644 --- a/Sources/Segmenter/Segmenter.swift +++ b/Sources/Segmenter/Segmenter.swift @@ -605,6 +605,14 @@ public final class Segmenter: UIControl { height: scrollContainer.frame.height ) case .fade: + UIView.performWithoutAnimation { + self.supplementaryView.frame = CGRect( + x: frame.width, + y: self.scrollView.frame.minY + self.contentInset.top, + width: 0, + height: self.scrollContainer.frame.height + ) + } supplementaryView.alpha = 0 } scrollView.contentSize = CGSize(width: scrollViewContentWidth, height: scrollFrame.height) @@ -614,7 +622,7 @@ public final class Segmenter: UIControl { func calculatorSupplementaryViewSize(_ views: [UIView]) { let offsetWidth: CGFloat = 20 switch supplementaryViewTransition { - case .default: + case .`default`: supplementaryView.frame = CGRect( x: frame.width - currentSupplementaryViewsWidthWithSpacing - offsetWidth, y: scrollView.frame.minY + contentInset.top, @@ -624,6 +632,16 @@ public final class Segmenter: UIControl { height: scrollFrame.height ) case .fade: + UIView.performWithoutAnimation { + self.supplementaryView.frame = CGRect( + x: frame.width - self.currentSupplementaryViewsWidthWithSpacing - offsetWidth, + y: self.scrollView.frame.minY + self.contentInset.top, + // 20 偏移量,多出来 20,用来给 scrollView 出现做淡出的 + // 偏移的 20 部分的点击时间会传递到 segmentContainerView 中,已在 hitTest 中处理 + width: self.currentSupplementaryViewsWidthWithSpacing + offsetWidth, + height: scrollFrame.height + ) + } supplementaryView.alpha = 1 } scrollContainer.frame = CGRect( @@ -733,9 +751,9 @@ public final class Segmenter: UIControl { public override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { var responderView = super.hitTest(point, with: event) - // supplementaryContainer 加了 20 的宽度偏移量, 用来给超出的 segment 做淡出/入效果, 不需要响应事件 if distribution == .default { let f = supplementaryView.frame + // supplementaryContainer 加了 20 的宽度偏移量, 用来给超出的 segment 做淡出/入效果, 不需要响应事件 // bugfix: 20 + spacing, remove spacing let supplementaryContainerInvalidFrame = CGRect(x: f.minX, y: f.minY, width: 20, height: f.height) if supplementaryContainerInvalidFrame.contains(point) { @@ -750,7 +768,9 @@ public final class Segmenter: UIControl { } } } - return responderView + + // bugfix + return super.hitTest(point, with: event) } }