From b3723dfeb85653ff62b63b35a169b6baf02ad011 Mon Sep 17 00:00:00 2001 From: zhoujianping Date: Fri, 27 Oct 2023 02:12:37 +0800 Subject: [PATCH] =?UTF-8?q?0.2.4:=201.=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=9B2.=E6=AD=A3=E7=A1=AE=E8=8E=B7=E5=8F=96=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=E4=BF=A1=E6=81=AF=EF=BC=88=E4=B8=BB=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Example/JPCrop/CropViewController.swift | 17 +- Example/Podfile.lock | 6 +- .../Pods/Local Podspecs/JPCrop.podspec.json | 6 +- Example/Pods/Manifest.lock | 6 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 338 +++++++++--------- .../JPCrop/JPCrop-Info.plist | 4 +- .../JPCrop/JPCrop.debug.xcconfig | 1 + .../JPCrop/JPCrop.release.xcconfig | 1 + .../Pods-JPCrop_Example-Info.plist | 2 +- .../Pods-JPCrop_Example-frameworks.sh | 2 +- .../Target Support Files/pop/pop-Info.plist | 2 +- .../pop/pop.debug.xcconfig | 1 + .../pop/pop.release.xcconfig | 1 + .../{Croper.API.swift => Croper+API.swift} | 2 +- ...ulation.swift => Croper+Calculation.swift} | 0 .../{Croper.Setup.swift => Croper+Func.swift} | 89 +---- ...per.Configure.swift => Croper+Model.swift} | 26 +- .../{Croper.Builder.swift => Croper+UI.swift} | 19 - 18 files changed, 243 insertions(+), 280 deletions(-) rename JPCrop/Classes/{Croper.API.swift => Croper+API.swift} (99%) rename JPCrop/Classes/{Croper.Calculation.swift => Croper+Calculation.swift} (100%) rename JPCrop/Classes/{Croper.Setup.swift => Croper+Func.swift} (69%) rename JPCrop/Classes/{Croper.Configure.swift => Croper+Model.swift} (80%) rename JPCrop/Classes/{Croper.Builder.swift => Croper+UI.swift} (71%) diff --git a/Example/JPCrop/CropViewController.swift b/Example/JPCrop/CropViewController.swift index b7b8350..49d0fa2 100644 --- a/Example/JPCrop/CropViewController.swift +++ b/Example/JPCrop/CropViewController.swift @@ -127,7 +127,7 @@ private extension CropViewController { left: 15.px, bottom: 50.px + NavBarH + DiffTabBarH + 15.px, right: 15.px) - let croper = Croper(frame: PortraitScreenBounds, configure) + let croper = Croper(frame: PortraitScreenBounds, configure: configure) croper.clipsToBounds = false view.insertSubview(croper, at: 0) self.croper = croper @@ -157,10 +157,17 @@ private extension CropViewController { navigationController?.popViewController(animated: true) guard let cropDone = self.cropDone else { return } - let configure = croper.syncConfigure() - croper.asyncCrop { - guard let image = $0 else { return } - cropDone(image, configure) + + DispatchQueue.global().async { + guard let image = self.croper.crop() else { + JPrint("裁剪失败!") + return + } + + let configure = self.croper.getCurrentConfigure() + DispatchQueue.main.async { + cropDone(image, configure) + } } } } diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 9a31012..78ef9ea 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - JPCrop (0.2.3) + - JPCrop (0.2.4) - pop (1.0.12) DEPENDENCIES: @@ -15,9 +15,9 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - JPCrop: d260e4456ee0b281214642f6abd96b76b3e17971 + JPCrop: 3a5b56acc7c0865312540c9738ae4253cee3fa2b pop: d582054913807fd11fd50bfe6a539d91c7e1a55a PODFILE CHECKSUM: 2370da9e45a5c7299c50a99d73814c8e01e456f7 -COCOAPODS: 1.11.3 +COCOAPODS: 1.12.1 diff --git a/Example/Pods/Local Podspecs/JPCrop.podspec.json b/Example/Pods/Local Podspecs/JPCrop.podspec.json index 6f601c9..c933b30 100644 --- a/Example/Pods/Local Podspecs/JPCrop.podspec.json +++ b/Example/Pods/Local Podspecs/JPCrop.podspec.json @@ -1,6 +1,6 @@ { "name": "JPCrop", - "version": "0.2.3", + "version": "0.2.4", "summary": "A clipping tool that can fine tune the direction of rotation.", "description": "A clipping tool that can fine tune the direction of rotation.", "homepage": "https://github.com/Rogue24/JPCrop", @@ -13,10 +13,10 @@ }, "source": { "git": "https://github.com/Rogue24/JPCrop.git", - "tag": "0.2.3" + "tag": "0.2.4" }, "platforms": { - "ios": "9.0" + "ios": "11.0" }, "source_files": "JPCrop/Classes/**/*", "swift_versions": "5.0", diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 9a31012..78ef9ea 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,5 +1,5 @@ PODS: - - JPCrop (0.2.3) + - JPCrop (0.2.4) - pop (1.0.12) DEPENDENCIES: @@ -15,9 +15,9 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - JPCrop: d260e4456ee0b281214642f6abd96b76b3e17971 + JPCrop: 3a5b56acc7c0865312540c9738ae4253cee3fa2b pop: d582054913807fd11fd50bfe6a539d91c7e1a55a PODFILE CHECKSUM: 2370da9e45a5c7299c50a99d73814c8e01e456f7 -COCOAPODS: 1.11.3 +COCOAPODS: 1.12.1 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index ae5f2e8..d2b0360 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,26 +7,27 @@ objects = { /* Begin PBXBuildFile section */ - 03AF43B329AF7316EDB005B961952213 /* Croper.Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DA51FE3448B67BCBA3821DB797B4DAE /* Croper.Setup.swift */; }; 09E1CE62B60FE6934C102143FF19501B /* POPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A1C241A966AB0F0AF6E7FC991698A57 /* POPVector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C4D59BFB646F9F5A25F3948B7EEF3E2 /* Croper+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F0AE49C9A5AF144E87D3B06D92ACE37 /* Croper+UI.swift */; }; 1165C47E123ED2F21A383127501AE056 /* POPAnimationEventInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 78D30A7024AF2A96DD44AF2BE167F231 /* POPAnimationEventInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1405B118F80672F9D39D39A074321E72 /* POPAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = F277E491CE17CF8AFD3D108A933B1A58 /* POPAnimationExtras.mm */; }; 1570C5315A10CF1E7F0EA461573E4661 /* TransformationMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = E5EE64521716F09DE82CD606E4CDCABC /* TransformationMatrix.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 162C42D3C18D6590CE24262FC34FEC87 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; 1772E5F0E5AFCFCB5730E7B104422CAF /* POPBasicAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 109CD8E8DAEE76423280253D4A36AAC5 /* POPBasicAnimation.mm */; }; 1818220334986B68937BB24FEA91AF44 /* POPAction.h in Headers */ = {isa = PBXBuildFile; fileRef = B6AA5565A42CE56023ED141296D084FD /* POPAction.h */; settings = {ATTRIBUTES = (Project, ); }; }; 192ECECB9493866805ECD3CCE4ABF2C3 /* POPAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = C7605EA8650A9F59418BA6FD13E022D2 /* POPAnimator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EAA0CCC392594C50C63CCE9FCE03130 /* Croper.API.swift in Sources */ = {isa = PBXBuildFile; fileRef = E78DEDCBBF77EB5C363779D06752B9E4 /* Croper.API.swift */; }; + 1B2C36444724ABC7DC1E309824438A42 /* Croper+Calculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6897A32C6284BE77BFFAFE799C0C9960 /* Croper+Calculation.swift */; }; 229ECA02134C6650ACF3579795C3AF94 /* POPDecayAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = C171D542563C2409419948B5A710A991 /* POPDecayAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 28DD9A980543F9D997EC59792935F154 /* Croper+API.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A4ECFFD8FBA27F8AEA4B7E7E391378 /* Croper+API.swift */; }; 28F57AD072A9F2F96E79083B495ECE56 /* POPCustomAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6E1A169EBE6002B814D437A485DCB90F /* POPCustomAnimation.mm */; }; 2ADFED90A21729D3DE2B0A33CD5C7D0E /* POPCGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = F17EAF9313F0F49EB55033A5A9ACE459 /* POPCGUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2B4E0DF5DF6A10A5654F6D61DAB64DF1 /* POPGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = AD82056D7DD1BAF347BE82D6B9C97DF0 /* POPGeometry.mm */; }; - 2C35020F65DD0C19175B5076F6788FDD /* Croper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB75F9D83A44DA2BCDB77FDA264A17DB /* Croper.swift */; }; + 2E269564BA347C5FDA707BD08B89FB8D /* JPCrop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 82425B18A20236BC0251C49B5DB44234 /* JPCrop-dummy.m */; }; 30375BDADB0F04BFC04641F7249A6753 /* POPAnimatablePropertyTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2FA5FCEB62F52FF62D0DFA12075363 /* POPAnimatablePropertyTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; 30F3763A705AF37FECB597325D8D304B /* POPVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9DF5171B34EA48DB5360884A6E73FBA9 /* POPVector.mm */; }; 33DAD49C5F2C1742AE711E1D2D30F32B /* POPAnimatableProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = 577A24EFDB8268261D393393705A5A1B /* POPAnimatableProperty.mm */; }; 34E2C0C50868CF03AFF623DF26D05E9C /* POPAnimationTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 95B4F5B76CF959DFD25FF80FDB60781A /* POPAnimationTracer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4698CB9B6A68EF178E4290A9561CF55F /* POPMath.mm in Sources */ = {isa = PBXBuildFile; fileRef = 668173F48A7F03D461130B8D18B9FEEB /* POPMath.mm */; }; + 507673A4B4AF127DE11F38F9ED56D58F /* Croper+Func.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B5D13FF9E062459CF4486F5296CC6C4 /* Croper+Func.swift */; }; 52111B9FBE550CEEB9964587EC20AD32 /* POPBasicAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 67473C9AB79C77686570239AFD97E4B0 /* POPBasicAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5369B41B999E82AACE3F040E470BD80D /* POPGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A5079CEB8F72A48B7F71806E682C25 /* POPGeometry.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5718112FF4E9B958F6489D4E612AE45B /* POPBasicAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 21E67F9E63FC1A8F60E649758E7BECD6 /* POPBasicAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -34,14 +35,12 @@ 66BC63CCD91F401B4842A522BCB0A710 /* POPDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABBFE04AAF9F547BB2BDF647C3B467DF /* POPDecayAnimation.mm */; }; 6B63E273EE8FCC83C7EE7C4B1DECFA38 /* POPSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 876D150C4B25A3AD3A3148A60F0AF16B /* POPSpringAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6C701C507501B1F2AF81067E18E84602 /* POPAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AF635F16F9F6D55B1A4EADEF45156C2 /* POPAnimation.mm */; }; - 6E6FDF039479FB18F47ACE688A144734 /* Croper.Builder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AD6DD808C81D8FD855DCEF608C824E1 /* Croper.Builder.swift */; }; 6EC5C0E30CB8DE1D4460A8D5D2F504D4 /* POPAnimationRuntime.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AA9583FFF678A763CA713CFBB985ECC /* POPAnimationRuntime.mm */; }; 716C0AD2B61F9E2EC681916E9D23CF47 /* POPAnimationRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 204FF09D7E148954E6E4346D9BF2912A /* POPAnimationRuntime.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71AC998DD405A37F0F4E66B970368FD0 /* POPAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D305E88701F065296198B7ADC3F3F15 /* POPAnimationExtras.h */; settings = {ATTRIBUTES = (Public, ); }; }; 71F5850DDA73156329B176A94CC92A82 /* POPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = E382704827D8131921177D67BF30B164 /* POPDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 730BDF71EF4044771E4353AFA2509D88 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; 752E16FF88D0816E8ADBCB629CC4A581 /* POPAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = D06C6046626D21FB21B2C13B084879C3 /* POPAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BB51C154084A0B5508DE4732524A289 /* JPCrop-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 730BBD5F2DD925F0453697D755471685 /* JPCrop-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F9AC73C912914924A6FF97426AAEEFF /* JPCrop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBBE8CECCEF006135004A4DF932D704 /* JPCrop-dummy.m */; }; 8DC5948638DCC602E5F23B8145BE5719 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; 8DE27B4AB59F1AA90798A889BCA339D2 /* POPSpringAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 295EF5FDE0F31E1C6D6A9521CB7C4DF0 /* POPSpringAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8FA2E5E6164116EC07B0BD9351EE42B5 /* POPAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 94F0B8116E37A215596A08E38E47C55D /* POPAnimator.mm */; }; @@ -53,22 +52,24 @@ 93E06E59B85F0DC1E166DB345D54E153 /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC376635A0D5FE7E4BAE61A69F4BF41 /* UnitBezier.h */; settings = {ATTRIBUTES = (Project, ); }; }; 94A75483E7007FEB119E4D4B6D2FD92D /* POPSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = D32E11961092DC929C93EFDF29156D5B /* POPSpringAnimation.mm */; }; 9875D84064A2CF977A9B82935BFFD7AD /* POPCGUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2AE78B09D5096F27BEA561A1066FC5A8 /* POPCGUtils.mm */; }; + 9F44B35A2219BB3A5E857203E1140895 /* Croper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C5B6C0C058900F34DA4E12C21E6207E /* Croper.swift */; }; A250C49F09872CD1449A131AF88B1092 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; A737532AB93CA5D2B92CAA2152969137 /* POPLayerExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BAD384ABA6712BF292A9274BB5530A0 /* POPLayerExtras.mm */; }; A7987ACE4532613365892893499BFFCC /* FloatConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = B986D1BEFEB2547DB683CF32491C7818 /* FloatConversion.h */; settings = {ATTRIBUTES = (Project, ); }; }; A9AA81F3B7AC245D698FFC4D1548A895 /* Pods-JPCrop_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CFE31F00743ABB81BB94EBDAB21F84C6 /* Pods-JPCrop_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; ABAA6397F60E39E16EA8C90366092308 /* POPAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = CFC4BA89643497868E4DC28879D3A727 /* POPAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ADD233663165409BE1A40FCFE17ED8B6 /* Croper.Calculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D477B27941212B105FF6FB5D336DBB2 /* Croper.Calculation.swift */; }; + B3B4DBDC1676612E7D13FB407D52E58D /* JPCrop-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5832BCD669AA88ADE2C482CE2FDB0142 /* JPCrop-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; B59DB35C5EEC08A44334C1387E15C320 /* POPAnimationTracerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CD40E08DCCF45BD7726935E6A659539 /* POPAnimationTracerInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; B73BCBD8599B24BAA14BA03077F715FE /* POPLayerExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 399077A77398439336EFAA244DCB95C4 /* POPLayerExtras.h */; settings = {ATTRIBUTES = (Public, ); }; }; B8DAC2456A1F5E866B5ACB24A16BA67A /* POPAnimationTracer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7DF59932692D5DB644CFAC2899F0B987 /* POPAnimationTracer.mm */; }; CA2F614AEF813682516703B456A26BCF /* POPPropertyAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 70CCDB0767F8DA1026F9414F94B35713 /* POPPropertyAnimation.mm */; }; - CD3B63C00EB054EA23E386DD03EC5AA4 /* Croper.Configure.swift in Sources */ = {isa = PBXBuildFile; fileRef = A45EFECA07884B913E0EE9C02CFE6BCC /* Croper.Configure.swift */; }; + CC2BABEFE5A18FAACF4A1991DA6C61F4 /* Croper+Crop.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0E4E381B7F3C96F0B41CCFEE0B0896 /* Croper+Crop.swift */; }; CF2737156E6BB014DCE2AE342FFC1B9D /* TransformationMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75FF4D7F1253443B2338F918BA8E6311 /* TransformationMatrix.cpp */; }; D464063E1514C73AE3B9D89CBAF3213D /* POPCustomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 42DE2086709DDACF5763C1FB8FE960CD /* POPCustomAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; DBA13A702819FF7FEE8B395655C35558 /* POPAnimatableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 5728DF1CECCD8182FAAB273C1D3E8C07 /* POPAnimatableProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; E414C785D7CF023B525B262E3F1EBA3B /* POPAnimatorPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 05DFEBFAF26240F8AF37F9A16E7C4EF3 /* POPAnimatorPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; E960093249EEE54E0A5148D4DB3F76E3 /* POPAnimationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8005A74A140726F83EEA4AEB4B64F5 /* POPAnimationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBC11096669F2A670078AF79A338A78D /* Croper+Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20D7DAC34CE1D5C3EB4D2FE9217A385D /* Croper+Model.swift */; }; EC91AD28A59BB87E60BDB71ABEEB19AD /* POPPropertyAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B01EF08422270A59BDD17CE72C995B5 /* POPPropertyAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; F33C3ABE2FB69A73E40F792CC96C1E5A /* Pods-JPCrop_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 487668827F8000CC80E44058E5E78D95 /* Pods-JPCrop_Example-dummy.m */; }; FD6DD85C2E2EC3B616DFED079AF8CD9B /* POPAnimationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F7B1E80EF77F923F8E3C13386561796 /* POPAnimationEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -77,19 +78,19 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 36003436C146421C8A481F0A84FF450B /* PBXContainerItemProxy */ = { + 1CDB9A6DA7E88AC0EF2761729C4D064B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 548657D290D5BB84737DDCFC34E67ADF; - remoteInfo = JPCrop; + remoteGlobalIDString = 0483D7F620C992E5C4BD62A7266EABB4; + remoteInfo = pop; }; - F749C681E4E631264955FEB7E322D69E /* PBXContainerItemProxy */ = { + DB6F8EA0C7F7F926687FF565B18E2B87 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 0483D7F620C992E5C4BD62A7266EABB4; - remoteInfo = pop; + remoteGlobalIDString = 548657D290D5BB84737DDCFC34E67ADF; + remoteInfo = JPCrop; }; /* End PBXContainerItemProxy section */ @@ -98,60 +99,59 @@ 049902CE95E177FA5FB79E1AD2A65341 /* Pods-JPCrop_Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-JPCrop_Example"; path = Pods_JPCrop_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 0562415EA343CBEF1F985DB21F7E5A36 /* POPPropertyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimation.h; path = pop/POPPropertyAnimation.h; sourceTree = ""; }; 05DFEBFAF26240F8AF37F9A16E7C4EF3 /* POPAnimatorPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatorPrivate.h; path = pop/POPAnimatorPrivate.h; sourceTree = ""; }; + 0B5D13FF9E062459CF4486F5296CC6C4 /* Croper+Func.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Croper+Func.swift"; path = "JPCrop/Classes/Croper+Func.swift"; sourceTree = ""; }; + 0C5B6C0C058900F34DA4E12C21E6207E /* Croper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Croper.swift; path = JPCrop/Classes/Croper.swift; sourceTree = ""; }; 109CD8E8DAEE76423280253D4A36AAC5 /* POPBasicAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPBasicAnimation.mm; path = pop/POPBasicAnimation.mm; sourceTree = ""; }; 10D3F7766FB7F0D4EFA691FF5BF0EB93 /* POPSpringSolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringSolver.h; path = pop/POPSpringSolver.h; sourceTree = ""; }; - 11F906AC6BAAB4792E96ABB233DABA90 /* JPCrop.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JPCrop.modulemap; sourceTree = ""; }; + 15A4ECFFD8FBA27F8AEA4B7E7E391378 /* Croper+API.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Croper+API.swift"; path = "JPCrop/Classes/Croper+API.swift"; sourceTree = ""; }; 1AA9583FFF678A763CA713CFBB985ECC /* POPAnimationRuntime.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPAnimationRuntime.mm; path = pop/POPAnimationRuntime.mm; sourceTree = ""; }; - 1AD6DD808C81D8FD855DCEF608C824E1 /* Croper.Builder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Croper.Builder.swift; path = JPCrop/Classes/Croper.Builder.swift; sourceTree = ""; }; 1AF635F16F9F6D55B1A4EADEF45156C2 /* POPAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPAnimation.mm; path = pop/POPAnimation.mm; sourceTree = ""; }; 204FF09D7E148954E6E4346D9BF2912A /* POPAnimationRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationRuntime.h; path = pop/POPAnimationRuntime.h; sourceTree = ""; }; + 20D7DAC34CE1D5C3EB4D2FE9217A385D /* Croper+Model.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Croper+Model.swift"; path = "JPCrop/Classes/Croper+Model.swift"; sourceTree = ""; }; 21E67F9E63FC1A8F60E649758E7BECD6 /* POPBasicAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimationInternal.h; path = pop/POPBasicAnimationInternal.h; sourceTree = ""; }; 295EF5FDE0F31E1C6D6A9521CB7C4DF0 /* POPSpringAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimationInternal.h; path = pop/POPSpringAnimationInternal.h; sourceTree = ""; }; 2AE78B09D5096F27BEA561A1066FC5A8 /* POPCGUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPCGUtils.mm; path = pop/POPCGUtils.mm; sourceTree = ""; }; - 2CBBE8CECCEF006135004A4DF932D704 /* JPCrop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JPCrop-dummy.m"; sourceTree = ""; }; 31A4EB5E9DBCEAB5677B511DDD8AADC8 /* POPMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPMath.h; path = pop/POPMath.h; sourceTree = ""; }; 399077A77398439336EFAA244DCB95C4 /* POPLayerExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPLayerExtras.h; path = pop/POPLayerExtras.h; sourceTree = ""; }; - 3B2BE005F9CE27CF7BBE4545CC2ACE8C /* JPCrop-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "JPCrop-Info.plist"; sourceTree = ""; }; 42DE2086709DDACF5763C1FB8FE960CD /* POPCustomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCustomAnimation.h; path = pop/POPCustomAnimation.h; sourceTree = ""; }; 472FBB25DF876E501B5E906671288E5C /* pop-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "pop-Info.plist"; sourceTree = ""; }; 487668827F8000CC80E44058E5E78D95 /* Pods-JPCrop_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-JPCrop_Example-dummy.m"; sourceTree = ""; }; 51305B2D9D8DA36D89CC277D729083D2 /* pop */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = pop; path = pop.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5717AEAD802A33AD8D552A861E48E569 /* JPCrop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JPCrop.release.xcconfig; sourceTree = ""; }; 5728DF1CECCD8182FAAB273C1D3E8C07 /* POPAnimatableProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatableProperty.h; path = pop/POPAnimatableProperty.h; sourceTree = ""; }; 577A24EFDB8268261D393393705A5A1B /* POPAnimatableProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPAnimatableProperty.mm; path = pop/POPAnimatableProperty.mm; sourceTree = ""; }; - 59D2D47DAC88ED7CBD14574C54E60034 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 5832BCD669AA88ADE2C482CE2FDB0142 /* JPCrop-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JPCrop-umbrella.h"; sourceTree = ""; }; 5B01EF08422270A59BDD17CE72C995B5 /* POPPropertyAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimationInternal.h; path = pop/POPPropertyAnimationInternal.h; sourceTree = ""; }; 5C486813DD34575BEB05ECF2CE808917 /* JPCrop */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = JPCrop; path = JPCrop.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 639188CE156612F10B7429D3FA1A47E5 /* Pods-JPCrop_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-JPCrop_Example-acknowledgements.plist"; sourceTree = ""; }; 668173F48A7F03D461130B8D18B9FEEB /* POPMath.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPMath.mm; path = pop/POPMath.mm; sourceTree = ""; }; 67473C9AB79C77686570239AFD97E4B0 /* POPBasicAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimation.h; path = pop/POPBasicAnimation.h; sourceTree = ""; }; - 6AF91D0F3483F6C589160E805C6A5DDF /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - 6D477B27941212B105FF6FB5D336DBB2 /* Croper.Calculation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Croper.Calculation.swift; path = JPCrop/Classes/Croper.Calculation.swift; sourceTree = ""; }; + 6897A32C6284BE77BFFAFE799C0C9960 /* Croper+Calculation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Croper+Calculation.swift"; path = "JPCrop/Classes/Croper+Calculation.swift"; sourceTree = ""; }; 6E1A169EBE6002B814D437A485DCB90F /* POPCustomAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPCustomAnimation.mm; path = pop/POPCustomAnimation.mm; sourceTree = ""; }; 6E2FA5FCEB62F52FF62D0DFA12075363 /* POPAnimatablePropertyTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatablePropertyTypes.h; path = pop/POPAnimatablePropertyTypes.h; sourceTree = ""; }; + 6F0AE49C9A5AF144E87D3B06D92ACE37 /* Croper+UI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Croper+UI.swift"; path = "JPCrop/Classes/Croper+UI.swift"; sourceTree = ""; }; + 6FE1C786C62F6D6844BAB3B85B535F0C /* JPCrop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JPCrop-prefix.pch"; sourceTree = ""; }; 70CCDB0767F8DA1026F9414F94B35713 /* POPPropertyAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPPropertyAnimation.mm; path = pop/POPPropertyAnimation.mm; sourceTree = ""; }; 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 730BBD5F2DD925F0453697D755471685 /* JPCrop-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JPCrop-umbrella.h"; sourceTree = ""; }; 75FF4D7F1253443B2338F918BA8E6311 /* TransformationMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransformationMatrix.cpp; path = pop/WebCore/TransformationMatrix.cpp; sourceTree = ""; }; 78D30A7024AF2A96DD44AF2BE167F231 /* POPAnimationEventInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEventInternal.h; path = pop/POPAnimationEventInternal.h; sourceTree = ""; }; 7B8E505019FC3C5A3313C646B4B9AEA0 /* Pods-JPCrop_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-JPCrop_Example.debug.xcconfig"; sourceTree = ""; }; 7CD40E08DCCF45BD7726935E6A659539 /* POPAnimationTracerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracerInternal.h; path = pop/POPAnimationTracerInternal.h; sourceTree = ""; }; 7D305E88701F065296198B7ADC3F3F15 /* POPAnimationExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationExtras.h; path = pop/POPAnimationExtras.h; sourceTree = ""; }; 7DF59932692D5DB644CFAC2899F0B987 /* POPAnimationTracer.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPAnimationTracer.mm; path = pop/POPAnimationTracer.mm; sourceTree = ""; }; - 835B3F92FC05490CD14B5EB073D1E6CF /* JPCrop.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = JPCrop.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 837FC7C14837B08C0A96D4DF52C521E8 /* JPCrop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JPCrop-prefix.pch"; sourceTree = ""; }; + 82425B18A20236BC0251C49B5DB44234 /* JPCrop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JPCrop-dummy.m"; sourceTree = ""; }; 876D150C4B25A3AD3A3148A60F0AF16B /* POPSpringAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimation.h; path = pop/POPSpringAnimation.h; sourceTree = ""; }; 8A1C241A966AB0F0AF6E7FC991698A57 /* POPVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPVector.h; path = pop/POPVector.h; sourceTree = ""; }; 8F7B1E80EF77F923F8E3C13386561796 /* POPAnimationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEvent.h; path = pop/POPAnimationEvent.h; sourceTree = ""; }; + 8FD8D048E7110AFE268A9742BFFD1526 /* JPCrop.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JPCrop.modulemap; sourceTree = ""; }; 8FE7D3B8A2873C060CCBCD10D9A9F183 /* pop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.release.xcconfig; sourceTree = ""; }; 94F0B8116E37A215596A08E38E47C55D /* POPAnimator.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPAnimator.mm; path = pop/POPAnimator.mm; sourceTree = ""; }; 95B4F5B76CF959DFD25FF80FDB60781A /* POPAnimationTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracer.h; path = pop/POPAnimationTracer.h; sourceTree = ""; }; + 9A31CAA137220D9EF1DF3BCD807AFBA1 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 9BAD384ABA6712BF292A9274BB5530A0 /* POPLayerExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPLayerExtras.mm; path = pop/POPLayerExtras.mm; sourceTree = ""; }; 9C8005A74A140726F83EEA4AEB4B64F5 /* POPAnimationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationPrivate.h; path = pop/POPAnimationPrivate.h; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9DA51FE3448B67BCBA3821DB797B4DAE /* Croper.Setup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Croper.Setup.swift; path = JPCrop/Classes/Croper.Setup.swift; sourceTree = ""; }; 9DF5171B34EA48DB5360884A6E73FBA9 /* POPVector.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPVector.mm; path = pop/POPVector.mm; sourceTree = ""; }; - A45EFECA07884B913E0EE9C02CFE6BCC /* Croper.Configure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Croper.Configure.swift; path = JPCrop/Classes/Croper.Configure.swift; sourceTree = ""; }; + A568DA2F9FF920FE02BE35158EA24EA0 /* JPCrop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JPCrop.release.xcconfig; sourceTree = ""; }; ABBFE04AAF9F547BB2BDF647C3B467DF /* POPDecayAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPDecayAnimation.mm; path = pop/POPDecayAnimation.mm; sourceTree = ""; }; ABCE04C2E451E93EF650124DEF046C1F /* POP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POP.h; path = pop/POP.h; sourceTree = ""; }; AD82056D7DD1BAF347BE82D6B9C97DF0 /* POPGeometry.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPGeometry.mm; path = pop/POPGeometry.mm; sourceTree = ""; }; @@ -162,6 +162,7 @@ BDFBF27319F1C5468C20F215633D64A8 /* POPAnimationEvent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPAnimationEvent.mm; path = pop/POPAnimationEvent.mm; sourceTree = ""; }; C171D542563C2409419948B5A710A991 /* POPDecayAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimationInternal.h; path = pop/POPDecayAnimationInternal.h; sourceTree = ""; }; C7605EA8650A9F59418BA6FD13E022D2 /* POPAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimator.h; path = pop/POPAnimator.h; sourceTree = ""; }; + CB0E4E381B7F3C96F0B41CCFEE0B0896 /* Croper+Crop.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Croper+Crop.swift"; path = "JPCrop/Classes/Croper+Crop.swift"; sourceTree = ""; }; CFC4BA89643497868E4DC28879D3A727 /* POPAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationInternal.h; path = pop/POPAnimationInternal.h; sourceTree = ""; }; CFE31F00743ABB81BB94EBDAB21F84C6 /* Pods-JPCrop_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-JPCrop_Example-umbrella.h"; sourceTree = ""; }; D06C6046626D21FB21B2C13B084879C3 /* POPAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimation.h; path = pop/POPAnimation.h; sourceTree = ""; }; @@ -169,19 +170,20 @@ D818BA43B73BA434B641DE571DD20336 /* POPDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimation.h; path = pop/POPDecayAnimation.h; sourceTree = ""; }; D84D271163682E818C9EF9B09457FAE0 /* Pods-JPCrop_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-JPCrop_Example-frameworks.sh"; sourceTree = ""; }; DAC376635A0D5FE7E4BAE61A69F4BF41 /* UnitBezier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnitBezier.h; path = pop/WebCore/UnitBezier.h; sourceTree = ""; }; + DC907D6F998E9B4628FCBC1CA8E57CCD /* JPCrop.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = JPCrop.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; E0C582A68CAE0684FA55BA26316278FC /* pop.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = pop.modulemap; sourceTree = ""; }; E1CCD61C9F910851C53A75713A85B257 /* pop-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-umbrella.h"; sourceTree = ""; }; E382704827D8131921177D67BF30B164 /* POPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDefines.h; path = pop/POPDefines.h; sourceTree = ""; }; E3851534EBD47C17E8DA2CE358EBE4A5 /* Pods-JPCrop_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-JPCrop_Example-Info.plist"; sourceTree = ""; }; E5EE64521716F09DE82CD606E4CDCABC /* TransformationMatrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TransformationMatrix.h; path = pop/WebCore/TransformationMatrix.h; sourceTree = ""; }; - E78DEDCBBF77EB5C363779D06752B9E4 /* Croper.API.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Croper.API.swift; path = JPCrop/Classes/Croper.API.swift; sourceTree = ""; }; EBFF994F3CA9B7EABB9BF18C2416668B /* Pods-JPCrop_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-JPCrop_Example.modulemap"; sourceTree = ""; }; + EC9AEBFA2F9460362E776C7307968FF9 /* JPCrop-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "JPCrop-Info.plist"; sourceTree = ""; }; EE2E22A127E136F9DEA882BC1975E5BF /* Pods-JPCrop_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-JPCrop_Example.release.xcconfig"; sourceTree = ""; }; + F14A3A8ED0D433EF06261346E802695E /* JPCrop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JPCrop.debug.xcconfig; sourceTree = ""; }; F17EAF9313F0F49EB55033A5A9ACE459 /* POPCGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCGUtils.h; path = pop/POPCGUtils.h; sourceTree = ""; }; F277E491CE17CF8AFD3D108A933B1A58 /* POPAnimationExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = POPAnimationExtras.mm; path = pop/POPAnimationExtras.mm; sourceTree = ""; }; F5A5079CEB8F72A48B7F71806E682C25 /* POPGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPGeometry.h; path = pop/POPGeometry.h; sourceTree = ""; }; - F7782E03B735B120B46D8FACCBE368D3 /* JPCrop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JPCrop.debug.xcconfig; sourceTree = ""; }; - FB75F9D83A44DA2BCDB77FDA264A17DB /* Croper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Croper.swift; path = JPCrop/Classes/Croper.swift; sourceTree = ""; }; + FA628C1697E5980681F9ED97C5B31AC1 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; FC0FC4D42F85AD36AA804BDAF20E15D9 /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -202,11 +204,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F6280E02EB00347D5F8A78207FE5D000 /* Frameworks */ = { + CBC2E718551D128C15454F82089E2C24 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 162C42D3C18D6590CE24262FC34FEC87 /* Foundation.framework in Frameworks */, + 730BDF71EF4044771E4353AFA2509D88 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -231,21 +233,6 @@ name = "Targets Support Files"; sourceTree = ""; }; - 3009535656903DDE8F6941802A340ED3 /* Support Files */ = { - isa = PBXGroup; - children = ( - 11F906AC6BAAB4792E96ABB233DABA90 /* JPCrop.modulemap */, - 2CBBE8CECCEF006135004A4DF932D704 /* JPCrop-dummy.m */, - 3B2BE005F9CE27CF7BBE4545CC2ACE8C /* JPCrop-Info.plist */, - 837FC7C14837B08C0A96D4DF52C521E8 /* JPCrop-prefix.pch */, - 730BBD5F2DD925F0453697D755471685 /* JPCrop-umbrella.h */, - F7782E03B735B120B46D8FACCBE368D3 /* JPCrop.debug.xcconfig */, - 5717AEAD802A33AD8D552A861E48E569 /* JPCrop.release.xcconfig */, - ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/JPCrop"; - sourceTree = ""; - }; 4B63EBC335E019A8BC51AD2DEBD52909 /* pop */ = { isa = PBXGroup; children = ( @@ -307,14 +294,6 @@ path = pop; sourceTree = ""; }; - 5055C7E0F72800CFA355F2FEC1A168EE /* Development Pods */ = { - isa = PBXGroup; - children = ( - 5EFC8B5DC6B0CC80D3ACD2975DA797F1 /* JPCrop */, - ); - name = "Development Pods"; - sourceTree = ""; - }; 578452D2E740E91742655AC8F1636D1F /* iOS */ = { isa = PBXGroup; children = ( @@ -323,28 +302,20 @@ name = iOS; sourceTree = ""; }; - 5EFC8B5DC6B0CC80D3ACD2975DA797F1 /* JPCrop */ = { + 58DEA7D29449BAF79FBE56457CB732AC /* Development Pods */ = { isa = PBXGroup; children = ( - FB75F9D83A44DA2BCDB77FDA264A17DB /* Croper.swift */, - E78DEDCBBF77EB5C363779D06752B9E4 /* Croper.API.swift */, - 1AD6DD808C81D8FD855DCEF608C824E1 /* Croper.Builder.swift */, - 6D477B27941212B105FF6FB5D336DBB2 /* Croper.Calculation.swift */, - A45EFECA07884B913E0EE9C02CFE6BCC /* Croper.Configure.swift */, - 9DA51FE3448B67BCBA3821DB797B4DAE /* Croper.Setup.swift */, - 67C4C356C7A3B7038BD7A5C0E26ED8CE /* Pod */, - 3009535656903DDE8F6941802A340ED3 /* Support Files */, + E4FDE664AF52683C8D87B93927E3277B /* JPCrop */, ); - name = JPCrop; - path = ../..; + name = "Development Pods"; sourceTree = ""; }; - 67C4C356C7A3B7038BD7A5C0E26ED8CE /* Pod */ = { + 66CAECD6B9333B448F903F267C536BEC /* Pod */ = { isa = PBXGroup; children = ( - 835B3F92FC05490CD14B5EB073D1E6CF /* JPCrop.podspec */, - 59D2D47DAC88ED7CBD14574C54E60034 /* LICENSE */, - 6AF91D0F3483F6C589160E805C6A5DDF /* README.md */, + DC907D6F998E9B4628FCBC1CA8E57CCD /* JPCrop.podspec */, + FA628C1697E5980681F9ED97C5B31AC1 /* LICENSE */, + 9A31CAA137220D9EF1DF3BCD807AFBA1 /* README.md */, ); name = Pod; sourceTree = ""; @@ -374,11 +345,26 @@ name = Pods; sourceTree = ""; }; + 8A0F828ACC0D987C885CBDC818C0C735 /* Support Files */ = { + isa = PBXGroup; + children = ( + 8FD8D048E7110AFE268A9742BFFD1526 /* JPCrop.modulemap */, + 82425B18A20236BC0251C49B5DB44234 /* JPCrop-dummy.m */, + EC9AEBFA2F9460362E776C7307968FF9 /* JPCrop-Info.plist */, + 6FE1C786C62F6D6844BAB3B85B535F0C /* JPCrop-prefix.pch */, + 5832BCD669AA88ADE2C482CE2FDB0142 /* JPCrop-umbrella.h */, + F14A3A8ED0D433EF06261346E802695E /* JPCrop.debug.xcconfig */, + A568DA2F9FF920FE02BE35158EA24EA0 /* JPCrop.release.xcconfig */, + ); + name = "Support Files"; + path = "Example/Pods/Target Support Files/JPCrop"; + sourceTree = ""; + }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 5055C7E0F72800CFA355F2FEC1A168EE /* Development Pods */, + 58DEA7D29449BAF79FBE56457CB732AC /* Development Pods */, D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 751A0AC9EEE37C007C0278DF8DC645A7 /* Pods */, 17E5BFDF9E067674F2CC8FE14D979306 /* Products */, @@ -394,6 +380,23 @@ name = Frameworks; sourceTree = ""; }; + E4FDE664AF52683C8D87B93927E3277B /* JPCrop */ = { + isa = PBXGroup; + children = ( + 0C5B6C0C058900F34DA4E12C21E6207E /* Croper.swift */, + 15A4ECFFD8FBA27F8AEA4B7E7E391378 /* Croper+API.swift */, + 6897A32C6284BE77BFFAFE799C0C9960 /* Croper+Calculation.swift */, + CB0E4E381B7F3C96F0B41CCFEE0B0896 /* Croper+Crop.swift */, + 0B5D13FF9E062459CF4486F5296CC6C4 /* Croper+Func.swift */, + 20D7DAC34CE1D5C3EB4D2FE9217A385D /* Croper+Model.swift */, + 6F0AE49C9A5AF144E87D3B06D92ACE37 /* Croper+UI.swift */, + 66CAECD6B9333B448F903F267C536BEC /* Pod */, + 8A0F828ACC0D987C885CBDC818C0C735 /* Support Files */, + ); + name = JPCrop; + path = ../..; + sourceTree = ""; + }; FCC452ADE09CA80624F511C5C1AFBC74 /* Support Files */ = { isa = PBXGroup; children = ( @@ -454,19 +457,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9D201FC6FF9E5B0484610B324664C303 /* Headers */ = { + 839C010569CA6943F90C8601A9F118F3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - A9AA81F3B7AC245D698FFC4D1548A895 /* Pods-JPCrop_Example-umbrella.h in Headers */, + B3B4DBDC1676612E7D13FB407D52E58D /* JPCrop-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - DE8DE21D20B4AF1CC0A8EE51B2105C20 /* Headers */ = { + 9D201FC6FF9E5B0484610B324664C303 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7BB51C154084A0B5508DE4732524A289 /* JPCrop-umbrella.h in Headers */, + A9AA81F3B7AC245D698FFC4D1548A895 /* Pods-JPCrop_Example-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -493,12 +496,12 @@ }; 548657D290D5BB84737DDCFC34E67ADF /* JPCrop */ = { isa = PBXNativeTarget; - buildConfigurationList = BC4F8A36EA1A53B0C37F7985FBFFEC41 /* Build configuration list for PBXNativeTarget "JPCrop" */; + buildConfigurationList = FB19202898F227874F68452188C953A0 /* Build configuration list for PBXNativeTarget "JPCrop" */; buildPhases = ( - DE8DE21D20B4AF1CC0A8EE51B2105C20 /* Headers */, - 8C1CF9FE1448D79A957BDFB0D8964B16 /* Sources */, - F6280E02EB00347D5F8A78207FE5D000 /* Frameworks */, - F8B683BED20378C1F9AE7C35C3E1E58F /* Resources */, + 839C010569CA6943F90C8601A9F118F3 /* Headers */, + 0C378689ABA88A0083C8822522BE5662 /* Sources */, + CBC2E718551D128C15454F82089E2C24 /* Frameworks */, + 20A2ECCF6F85D217387BBDE3E89542EB /* Resources */, ); buildRules = ( ); @@ -521,8 +524,8 @@ buildRules = ( ); dependencies = ( - 9ED88F2251995355303B24334E37F4F3 /* PBXTargetDependency */, - 3CA571608B5D779F454BFE943C45518D /* PBXTargetDependency */, + 7432305C73740A27BD945D16C9C70C32 /* PBXTargetDependency */, + 983EEE1D00AB422A901C01237635F25B /* PBXTargetDependency */, ); name = "Pods-JPCrop_Example"; productName = Pods_JPCrop_Example; @@ -566,14 +569,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2762CAE164681E550484B81821EC293A /* Resources */ = { + 20A2ECCF6F85D217387BBDE3E89542EB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - F8B683BED20378C1F9AE7C35C3E1E58F /* Resources */ = { + 2762CAE164681E550484B81821EC293A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -609,17 +612,18 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 8C1CF9FE1448D79A957BDFB0D8964B16 /* Sources */ = { + 0C378689ABA88A0083C8822522BE5662 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C35020F65DD0C19175B5076F6788FDD /* Croper.swift in Sources */, - 1EAA0CCC392594C50C63CCE9FCE03130 /* Croper.API.swift in Sources */, - 6E6FDF039479FB18F47ACE688A144734 /* Croper.Builder.swift in Sources */, - ADD233663165409BE1A40FCFE17ED8B6 /* Croper.Calculation.swift in Sources */, - CD3B63C00EB054EA23E386DD03EC5AA4 /* Croper.Configure.swift in Sources */, - 03AF43B329AF7316EDB005B961952213 /* Croper.Setup.swift in Sources */, - 7F9AC73C912914924A6FF97426AAEEFF /* JPCrop-dummy.m in Sources */, + 9F44B35A2219BB3A5E857203E1140895 /* Croper.swift in Sources */, + 28DD9A980543F9D997EC59792935F154 /* Croper+API.swift in Sources */, + 1B2C36444724ABC7DC1E309824438A42 /* Croper+Calculation.swift in Sources */, + CC2BABEFE5A18FAACF4A1991DA6C61F4 /* Croper+Crop.swift in Sources */, + 507673A4B4AF127DE11F38F9ED56D58F /* Croper+Func.swift in Sources */, + EBC11096669F2A670078AF79A338A78D /* Croper+Model.swift in Sources */, + 0C4D59BFB646F9F5A25F3948B7EEF3E2 /* Croper+UI.swift in Sources */, + 2E269564BA347C5FDA707BD08B89FB8D /* JPCrop-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -634,17 +638,17 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 3CA571608B5D779F454BFE943C45518D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = pop; - target = 0483D7F620C992E5C4BD62A7266EABB4 /* pop */; - targetProxy = F749C681E4E631264955FEB7E322D69E /* PBXContainerItemProxy */; - }; - 9ED88F2251995355303B24334E37F4F3 /* PBXTargetDependency */ = { + 7432305C73740A27BD945D16C9C70C32 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = JPCrop; target = 548657D290D5BB84737DDCFC34E67ADF /* JPCrop */; - targetProxy = 36003436C146421C8A481F0A84FF450B /* PBXContainerItemProxy */; + targetProxy = DB6F8EA0C7F7F926687FF565B18E2B87 /* PBXContainerItemProxy */; + }; + 983EEE1D00AB422A901C01237635F25B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = pop; + target = 0483D7F620C992E5C4BD62A7266EABB4 /* pop */; + targetProxy = 1CDB9A6DA7E88AC0EF2761729C4D064B /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -683,11 +687,13 @@ }; name = Debug; }; - 25DA4D4A79366C73A92A31130D1CE0BD /* Release */ = { + 74F1519AE1F777FA27963F6605DEA6DC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5717AEAD802A33AD8D552A861E48E569 /* JPCrop.release.xcconfig */; + baseConfigurationReference = EE2E22A127E136F9DEA882BC1975E5BF /* Pods-JPCrop_Example.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -696,18 +702,19 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/JPCrop/JPCrop-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/JPCrop/JPCrop-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/JPCrop/JPCrop.modulemap"; - PRODUCT_MODULE_NAME = JPCrop; - PRODUCT_NAME = JPCrop; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -715,9 +722,9 @@ }; name = Release; }; - 6C947352E395D17C2B26E35B75057330 /* Debug */ = { + 76504DE894B27B0DF1765DFF366D5A47 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7782E03B735B120B46D8FACCBE368D3 /* JPCrop.debug.xcconfig */; + baseConfigurationReference = 8FE7D3B8A2873C060CCBCD10D9A9F183 /* pop.release.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -728,64 +735,31 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/JPCrop/JPCrop-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/JPCrop/JPCrop-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/pop/pop-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/JPCrop/JPCrop.modulemap"; - PRODUCT_MODULE_NAME = JPCrop; - PRODUCT_NAME = JPCrop; + MODULEMAP_FILE = "Target Support Files/pop/pop.modulemap"; + PRODUCT_MODULE_NAME = pop; + PRODUCT_NAME = pop; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 74F1519AE1F777FA27963F6605DEA6DC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EE2E22A127E136F9DEA882BC1975E5BF /* Pods-JPCrop_Example.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 76504DE894B27B0DF1765DFF366D5A47 /* Release */ = { + 7F60ACBC91567B7821E6CB8D8FA9A33B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8FE7D3B8A2873C060CCBCD10D9A9F183 /* pop.release.xcconfig */; + baseConfigurationReference = F14A3A8ED0D433EF06261346E802695E /* JPCrop.debug.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -794,24 +768,23 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/pop/pop-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/JPCrop/JPCrop-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/JPCrop/JPCrop-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/pop/pop.modulemap"; - PRODUCT_MODULE_NAME = pop; - PRODUCT_NAME = pop; + MODULEMAP_FILE = "Target Support Files/JPCrop/JPCrop.modulemap"; + PRODUCT_MODULE_NAME = JPCrop; + PRODUCT_NAME = JPCrop; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; 903A0004D3E6651EFD5D2E16214D101B /* Release */ = { isa = XCBuildConfiguration; @@ -972,6 +945,39 @@ }; name = Debug; }; + DB455156C8C307E4F9053AD8F7F79677 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A568DA2F9FF920FE02BE35158EA24EA0 /* JPCrop.release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/JPCrop/JPCrop-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/JPCrop/JPCrop-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/JPCrop/JPCrop.modulemap"; + PRODUCT_MODULE_NAME = JPCrop; + PRODUCT_NAME = JPCrop; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -993,20 +999,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BC4F8A36EA1A53B0C37F7985FBFFEC41 /* Build configuration list for PBXNativeTarget "JPCrop" */ = { + DC85E885CD9F9521EC428D2AAB85789D /* Build configuration list for PBXNativeTarget "pop" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6C947352E395D17C2B26E35B75057330 /* Debug */, - 25DA4D4A79366C73A92A31130D1CE0BD /* Release */, + AAF6B04B4DB29BD320919E069E27A5F9 /* Debug */, + 76504DE894B27B0DF1765DFF366D5A47 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DC85E885CD9F9521EC428D2AAB85789D /* Build configuration list for PBXNativeTarget "pop" */ = { + FB19202898F227874F68452188C953A0 /* Build configuration list for PBXNativeTarget "JPCrop" */ = { isa = XCConfigurationList; buildConfigurations = ( - AAF6B04B4DB29BD320919E069E27A5F9 /* Debug */, - 76504DE894B27B0DF1765DFF366D5A47 /* Release */, + 7F60ACBC91567B7821E6CB8D8FA9A33B /* Debug */, + DB455156C8C307E4F9053AD8F7F79677 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Target Support Files/JPCrop/JPCrop-Info.plist b/Example/Pods/Target Support Files/JPCrop/JPCrop-Info.plist index 421cf1d..0a741de 100644 --- a/Example/Pods/Target Support Files/JPCrop/JPCrop-Info.plist +++ b/Example/Pods/Target Support Files/JPCrop/JPCrop-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.2.3 + 0.2.4 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/JPCrop/JPCrop.debug.xcconfig b/Example/Pods/Target Support Files/JPCrop/JPCrop.debug.xcconfig index 92f1985..8f13b37 100644 --- a/Example/Pods/Target Support Files/JPCrop/JPCrop.debug.xcconfig +++ b/Example/Pods/Target Support Files/JPCrop/JPCrop.debug.xcconfig @@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/Example/Pods/Target Support Files/JPCrop/JPCrop.release.xcconfig b/Example/Pods/Target Support Files/JPCrop/JPCrop.release.xcconfig index 92f1985..8f13b37 100644 --- a/Example/Pods/Target Support Files/JPCrop/JPCrop.release.xcconfig +++ b/Example/Pods/Target Support Files/JPCrop/JPCrop.release.xcconfig @@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/Example/Pods/Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-Info.plist b/Example/Pods/Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-Info.plist index 2243fe6..19cf209 100644 --- a/Example/Pods/Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-Info.plist +++ b/Example/Pods/Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier diff --git a/Example/Pods/Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-frameworks.sh index 6ebb98e..77b231a 100755 --- a/Example/Pods/Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-JPCrop_Example/Pods-JPCrop_Example-frameworks.sh @@ -41,7 +41,7 @@ install_framework() if [ -L "${source}" ]; then echo "Symlinked..." - source="$(readlink "${source}")" + source="$(readlink -f "${source}")" fi if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then diff --git a/Example/Pods/Target Support Files/pop/pop-Info.plist b/Example/Pods/Target Support Files/pop/pop-Info.plist index b8236f1..478f932 100644 --- a/Example/Pods/Target Support Files/pop/pop-Info.plist +++ b/Example/Pods/Target Support Files/pop/pop-Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + ${PODS_DEVELOPMENT_LANGUAGE} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier diff --git a/Example/Pods/Target Support Files/pop/pop.debug.xcconfig b/Example/Pods/Target Support Files/pop/pop.debug.xcconfig index 1b741c9..372bd17 100644 --- a/Example/Pods/Target Support Files/pop/pop.debug.xcconfig +++ b/Example/Pods/Target Support Files/pop/pop.debug.xcconfig @@ -6,6 +6,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OTHER_LDFLAGS = $(inherited) -l"c++" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/pop PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/Example/Pods/Target Support Files/pop/pop.release.xcconfig b/Example/Pods/Target Support Files/pop/pop.release.xcconfig index 1b741c9..372bd17 100644 --- a/Example/Pods/Target Support Files/pop/pop.release.xcconfig +++ b/Example/Pods/Target Support Files/pop/pop.release.xcconfig @@ -6,6 +6,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OTHER_LDFLAGS = $(inherited) -l"c++" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/pop PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates diff --git a/JPCrop/Classes/Croper.API.swift b/JPCrop/Classes/Croper+API.swift similarity index 99% rename from JPCrop/Classes/Croper.API.swift rename to JPCrop/Classes/Croper+API.swift index 5521272..9982a96 100644 --- a/JPCrop/Classes/Croper.API.swift +++ b/JPCrop/Classes/Croper+API.swift @@ -124,7 +124,7 @@ public extension Croper { /// - compressScale: 压缩比例,默认为1,即原图尺寸 func asyncCrop(_ compressScale: CGFloat = 1, _ cropDone: @escaping (UIImage?) -> ()) { guard let imageRef = image.cgImage else { - cropDone(nil) + DispatchQueue.main.async { cropDone(nil) } return } diff --git a/JPCrop/Classes/Croper.Calculation.swift b/JPCrop/Classes/Croper+Calculation.swift similarity index 100% rename from JPCrop/Classes/Croper.Calculation.swift rename to JPCrop/Classes/Croper+Calculation.swift diff --git a/JPCrop/Classes/Croper.Setup.swift b/JPCrop/Classes/Croper+Func.swift similarity index 69% rename from JPCrop/Classes/Croper.Setup.swift rename to JPCrop/Classes/Croper+Func.swift index 16863f7..3586731 100644 --- a/JPCrop/Classes/Croper.Setup.swift +++ b/JPCrop/Classes/Croper+Func.swift @@ -5,16 +5,23 @@ // Created by Rogue24 on 2022/3/5. // +import UIKit + extension Croper { - var isLandscapeImage: Bool { imageWHRatio > 1 } + var isLandscapeImage: Bool { + imageWHRatio > 1 + } - func scaleValue(_ t: CGAffineTransform) -> CGFloat { sqrt(t.a * t.a + t.c * t.c) } + func scaleValue(_ t: CGAffineTransform) -> CGFloat { + sqrt(t.a * t.a + t.c * t.c) + } func rotate(_ angle: CGFloat, isAutoZoom: Bool, animated: Bool) { guard animated else { rotate(angle, isAutoZoom: isAutoZoom) return } + UIView.animate(withDuration: Self.animDuration, delay: 0, options: .curveEaseOut) { self.rotate(angle, isAutoZoom: isAutoZoom) } @@ -45,10 +52,12 @@ extension Croper { } func updateGrid(_ idleGridAlpha: Float, _ rotateGridAlpha: Float, animated: Bool = false) { + if animated { buildAnimation(addTo: idleGridLayer, "opacity", idleGridAlpha, 0.12, timingFunctionName: .easeIn) buildAnimation(addTo: rotateGridLayer, "opacity", rotateGridAlpha, 0.12, timingFunctionName: .easeIn) } + CATransaction.begin() CATransaction.setDisableActions(true) idleGridLayer.opacity = idleGridAlpha @@ -59,12 +68,7 @@ extension Croper { extension Croper { /// 更新裁剪宽高比,并获取改变前后的差值 - func resetCropWHRatio(_ whRatio: CGFloat) -> ( - factor: RotateFactor, - contentScalePoint: CGPoint, - zoomScale: CGFloat, - imageFrameSize: CGSize - ) { + func resetCropWHRatio(_ whRatio: CGFloat) -> DiffFactor { cropWHRatio = fitCropWHRatio(whRatio, isCallBack: true) // 更新可裁剪区域 @@ -99,7 +103,10 @@ extension Croper { let imageFrameSize = CGSize(width: imageBoundsSize.width * zoomScale, height: imageBoundsSize.height * zoomScale) - return (factor, contentScalePoint, zoomScale, imageFrameSize) + return .init(factor: factor, + contentScalePoint: contentScalePoint, + zoomScale: zoomScale, + imageFrameSize: imageFrameSize) } /// 无痕刷新 scrollView 改变后的 transform 和其他差值(让 scrollView 形变后相对于之前的 UI 状态“看上去”没有变化一样) @@ -171,67 +178,3 @@ extension Croper { CATransaction.commit() } } - -extension Croper { - static func crop(_ compressScale: CGFloat, - _ imageRef: CGImage, - _ cropWHRatio: CGFloat, - _ scale: CGFloat, - _ convertTranslate: CGPoint, - _ radian: CGFloat, - _ imageBoundsHeight: CGFloat) -> UIImage? { - - let width = CGFloat(imageRef.width) * compressScale - let height = CGFloat(imageRef.height) * compressScale - - // 获取裁剪尺寸和裁剪区域 - var rendSize: CGSize - if width > height { - rendSize = CGSize(width: height * cropWHRatio, height: height) - if rendSize.width > width { - rendSize = CGSize(width: width, height: width / cropWHRatio) - } - } else { - rendSize = CGSize(width: width, height: width / cropWHRatio) - if rendSize.height > height { - rendSize = CGSize(width: height * cropWHRatio, height: height) - } - } - - var bitmapRawValue = CGBitmapInfo.byteOrder32Little.rawValue - let alphaInfo = imageRef.alphaInfo - if alphaInfo == .premultipliedLast || - alphaInfo == .premultipliedFirst || - alphaInfo == .last || - alphaInfo == .first { - bitmapRawValue += CGImageAlphaInfo.premultipliedFirst.rawValue - } else { - bitmapRawValue += CGImageAlphaInfo.noneSkipFirst.rawValue - } - - guard let context = CGContext(data: nil, - width: Int(rendSize.width), - height: Int(rendSize.height), - bitsPerComponent: 8, - bytesPerRow: 0, - space: CGColorSpaceCreateDeviceRGB(), - bitmapInfo: bitmapRawValue) else { return nil } - context.setShouldAntialias(true) - context.setAllowsAntialiasing(true) - context.interpolationQuality = .high - - let iScale = CGFloat(imageRef.height) / (imageBoundsHeight * scale) - var translate = convertTranslate - translate.y = imageBoundsHeight - translate.y // 左下点与底部的距离 - translate.x *= -1 * scale * iScale - translate.y *= -1 * scale * iScale - - let transform = CGAffineTransform(scaleX: scale, y: scale).rotated(by: -radian).translatedBy(x: translate.x, y: translate.y) - context.concatenate(transform) - - context.draw(imageRef, in: CGRect(origin: .zero, size: CGSize(width: width, height: height))) - - guard let newImageRef = context.makeImage() else { return nil } - return UIImage(cgImage: newImageRef) - } -} diff --git a/JPCrop/Classes/Croper.Configure.swift b/JPCrop/Classes/Croper+Model.swift similarity index 80% rename from JPCrop/Classes/Croper.Configure.swift rename to JPCrop/Classes/Croper+Model.swift index 9a80700..bf9617b 100644 --- a/JPCrop/Classes/Croper.Configure.swift +++ b/JPCrop/Classes/Croper+Model.swift @@ -8,8 +8,6 @@ import UIKit public extension Croper { - typealias RotateFactor = (scale: CGFloat, transform: CGAffineTransform, contentInset: UIEdgeInsets) - /// 旋转基准角度:0°/360°、90°、180°、270° enum OriginAngle: CGFloat { /// 以 0°/360° 为基准,可旋转范围:`-45° ~ 45°` @@ -45,6 +43,7 @@ public extension Croper { } } + /// 初始化配置 struct Configure { /// 裁剪图片 public let image: UIImage @@ -79,3 +78,26 @@ public extension Croper { } } } + +extension Croper { + struct RotateFactor { + let scale: CGFloat + let transform: CGAffineTransform + let contentInset: UIEdgeInsets + } + + struct DiffFactor { + let factor: RotateFactor + let contentScalePoint: CGPoint + let zoomScale: CGFloat + let imageFrameSize: CGSize + } + + struct CropFactor { + let cropWHRatio: CGFloat + let scale: CGFloat + let convertTranslate: CGPoint + let radian: CGFloat + let imageBoundsHeight: CGFloat + } +} diff --git a/JPCrop/Classes/Croper.Builder.swift b/JPCrop/Classes/Croper+UI.swift similarity index 71% rename from JPCrop/Classes/Croper.Builder.swift rename to JPCrop/Classes/Croper+UI.swift index 65e0f09..3b91f5c 100644 --- a/JPCrop/Classes/Croper.Builder.swift +++ b/JPCrop/Classes/Croper+UI.swift @@ -55,25 +55,6 @@ extension Croper { layer.addSublayer(borderLayer) } - func buildGridPath(_ gridCount: (verCount: Int, horCount: Int)) -> UIBezierPath { - let gridPath = UIBezierPath() - guard gridCount.verCount > 1, gridCount.horCount > 1 else { return gridPath } - let verSpace = cropFrame.height / CGFloat(gridCount.verCount) - let horSpace = cropFrame.width / CGFloat(gridCount.horCount) - for i in 1 ..< gridCount.verCount { - let px = cropFrame.origin.x - let py = cropFrame.origin.y + verSpace * CGFloat(i) - gridPath.move(to: CGPoint(x: px, y: py)) - gridPath.addLine(to: CGPoint(x: px + cropFrame.width, y: py)) - } - for i in 1 ..< gridCount.horCount { - let px = cropFrame.origin.x + horSpace * CGFloat(i) - let py = cropFrame.origin.y - gridPath.move(to: CGPoint(x: px, y: py)) - gridPath.addLine(to: CGPoint(x: px, y: py + cropFrame.height)) - } - return gridPath - } func buildAnimation(addTo layer: CALayer, _ keyPath: String, _ toValue: T, _ duration: TimeInterval, timingFunctionName: CAMediaTimingFunctionName = .easeOut) { let anim = CABasicAnimation(keyPath: keyPath)