2
Podfile
|
|
@ -18,7 +18,7 @@ target 'QuickLocation' do
|
||||||
pod 'RxDataSources'
|
pod 'RxDataSources'
|
||||||
pod 'RxSwiftExt'
|
pod 'RxSwiftExt'
|
||||||
pod 'SwiftDate'
|
pod 'SwiftDate'
|
||||||
#pod 'RxGesture'
|
pod 'RxGesture'
|
||||||
pod 'CocoaLumberjack/Swift'
|
pod 'CocoaLumberjack/Swift'
|
||||||
pod 'KingfisherWebP'
|
pod 'KingfisherWebP'
|
||||||
pod 'Masonry'
|
pod 'Masonry'
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@ PODS:
|
||||||
- Differentiator (~> 5.0)
|
- Differentiator (~> 5.0)
|
||||||
- RxCocoa (~> 6.0)
|
- RxCocoa (~> 6.0)
|
||||||
- RxSwift (~> 6.0)
|
- RxSwift (~> 6.0)
|
||||||
|
- RxGesture (4.0.4):
|
||||||
|
- RxCocoa (~> 6.0)
|
||||||
|
- RxSwift (~> 6.0)
|
||||||
- RxRelay (6.8.0):
|
- RxRelay (6.8.0):
|
||||||
- RxSwift (= 6.8.0)
|
- RxSwift (= 6.8.0)
|
||||||
- RxSwift (6.8.0)
|
- RxSwift (6.8.0)
|
||||||
|
|
@ -192,6 +195,7 @@ DEPENDENCIES:
|
||||||
- Popover
|
- Popover
|
||||||
- RxCocoa
|
- RxCocoa
|
||||||
- RxDataSources
|
- RxDataSources
|
||||||
|
- RxGesture
|
||||||
- RxSwift
|
- RxSwift
|
||||||
- RxSwiftExt
|
- RxSwiftExt
|
||||||
- SDCycleScrollView
|
- SDCycleScrollView
|
||||||
|
|
@ -246,6 +250,7 @@ SPEC REPOS:
|
||||||
- Popover
|
- Popover
|
||||||
- RxCocoa
|
- RxCocoa
|
||||||
- RxDataSources
|
- RxDataSources
|
||||||
|
- RxGesture
|
||||||
- RxRelay
|
- RxRelay
|
||||||
- RxSwift
|
- RxSwift
|
||||||
- RxSwiftExt
|
- RxSwiftExt
|
||||||
|
|
@ -310,6 +315,7 @@ SPEC CHECKSUMS:
|
||||||
Popover: 10e1d9528f81d9504df984b7b3f491292bc1822d
|
Popover: 10e1d9528f81d9504df984b7b3f491292bc1822d
|
||||||
RxCocoa: 2d33c1e1e5d66492052ad46b11024ae287572880
|
RxCocoa: 2d33c1e1e5d66492052ad46b11024ae287572880
|
||||||
RxDataSources: aa47cc1ed6c500fa0dfecac5c979b723542d79cf
|
RxDataSources: aa47cc1ed6c500fa0dfecac5c979b723542d79cf
|
||||||
|
RxGesture: f3efb47ed2d26a8082f7b660d4a59970e275a7f8
|
||||||
RxRelay: 335c78b926a2aea8d863a6d25f1ed3b5ad8e8705
|
RxRelay: 335c78b926a2aea8d863a6d25f1ed3b5ad8e8705
|
||||||
RxSwift: 4e28be97cbcfeee614af26d83415febbf2bf6f45
|
RxSwift: 4e28be97cbcfeee614af26d83415febbf2bf6f45
|
||||||
RxSwiftExt: 43aaacb6a4d3c69c55e9d1cf4f79920043d13583
|
RxSwiftExt: 43aaacb6a4d3c69c55e9d1cf4f79920043d13583
|
||||||
|
|
@ -328,6 +334,6 @@ SPEC CHECKSUMS:
|
||||||
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
|
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
|
||||||
ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117
|
ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117
|
||||||
|
|
||||||
PODFILE CHECKSUM: 0b13abaab81fbf89876a935ff6457fbe0baf31d2
|
PODFILE CHECKSUM: 4d254b7f0c48f2a2100703f9ac600d5d826b586a
|
||||||
|
|
||||||
COCOAPODS: 1.16.2
|
COCOAPODS: 1.16.2
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@ PODS:
|
||||||
- Differentiator (~> 5.0)
|
- Differentiator (~> 5.0)
|
||||||
- RxCocoa (~> 6.0)
|
- RxCocoa (~> 6.0)
|
||||||
- RxSwift (~> 6.0)
|
- RxSwift (~> 6.0)
|
||||||
|
- RxGesture (4.0.4):
|
||||||
|
- RxCocoa (~> 6.0)
|
||||||
|
- RxSwift (~> 6.0)
|
||||||
- RxRelay (6.8.0):
|
- RxRelay (6.8.0):
|
||||||
- RxSwift (= 6.8.0)
|
- RxSwift (= 6.8.0)
|
||||||
- RxSwift (6.8.0)
|
- RxSwift (6.8.0)
|
||||||
|
|
@ -192,6 +195,7 @@ DEPENDENCIES:
|
||||||
- Popover
|
- Popover
|
||||||
- RxCocoa
|
- RxCocoa
|
||||||
- RxDataSources
|
- RxDataSources
|
||||||
|
- RxGesture
|
||||||
- RxSwift
|
- RxSwift
|
||||||
- RxSwiftExt
|
- RxSwiftExt
|
||||||
- SDCycleScrollView
|
- SDCycleScrollView
|
||||||
|
|
@ -246,6 +250,7 @@ SPEC REPOS:
|
||||||
- Popover
|
- Popover
|
||||||
- RxCocoa
|
- RxCocoa
|
||||||
- RxDataSources
|
- RxDataSources
|
||||||
|
- RxGesture
|
||||||
- RxRelay
|
- RxRelay
|
||||||
- RxSwift
|
- RxSwift
|
||||||
- RxSwiftExt
|
- RxSwiftExt
|
||||||
|
|
@ -310,6 +315,7 @@ SPEC CHECKSUMS:
|
||||||
Popover: 10e1d9528f81d9504df984b7b3f491292bc1822d
|
Popover: 10e1d9528f81d9504df984b7b3f491292bc1822d
|
||||||
RxCocoa: 2d33c1e1e5d66492052ad46b11024ae287572880
|
RxCocoa: 2d33c1e1e5d66492052ad46b11024ae287572880
|
||||||
RxDataSources: aa47cc1ed6c500fa0dfecac5c979b723542d79cf
|
RxDataSources: aa47cc1ed6c500fa0dfecac5c979b723542d79cf
|
||||||
|
RxGesture: f3efb47ed2d26a8082f7b660d4a59970e275a7f8
|
||||||
RxRelay: 335c78b926a2aea8d863a6d25f1ed3b5ad8e8705
|
RxRelay: 335c78b926a2aea8d863a6d25f1ed3b5ad8e8705
|
||||||
RxSwift: 4e28be97cbcfeee614af26d83415febbf2bf6f45
|
RxSwift: 4e28be97cbcfeee614af26d83415febbf2bf6f45
|
||||||
RxSwiftExt: 43aaacb6a4d3c69c55e9d1cf4f79920043d13583
|
RxSwiftExt: 43aaacb6a4d3c69c55e9d1cf4f79920043d13583
|
||||||
|
|
@ -328,6 +334,6 @@ SPEC CHECKSUMS:
|
||||||
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
|
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
|
||||||
ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117
|
ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117
|
||||||
|
|
||||||
PODFILE CHECKSUM: 0b13abaab81fbf89876a935ff6457fbe0baf31d2
|
PODFILE CHECKSUM: 4d254b7f0c48f2a2100703f9ac600d5d826b586a
|
||||||
|
|
||||||
COCOAPODS: 1.16.2
|
COCOAPODS: 1.16.2
|
||||||
|
|
|
||||||
58
Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/RxGesture.xcscheme
generated
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1600"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "D77CA6E20D3F659D26E05339EBA33B59"
|
||||||
|
BuildableName = "RxGesture.framework"
|
||||||
|
BlueprintName = "RxGesture"
|
||||||
|
ReferencedContainer = "container:Pods.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
|
|
@ -264,6 +264,11 @@
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<key>RxGesture.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>isShown</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
<key>RxRelay-RxRelay_Privacy.xcscheme</key>
|
<key>RxRelay-RxRelay_Privacy.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
@ -0,0 +1,173 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
import UIKit
|
||||||
|
#elseif os(OSX)
|
||||||
|
import AppKit
|
||||||
|
#endif
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public struct GestureRecognizerDelegatePolicy<PolicyInput> {
|
||||||
|
public typealias PolicyBody = (PolicyInput) -> Bool
|
||||||
|
|
||||||
|
private let policy: PolicyBody
|
||||||
|
|
||||||
|
private init(policy: @escaping PolicyBody) {
|
||||||
|
self.policy = policy
|
||||||
|
}
|
||||||
|
|
||||||
|
public static func custom(_ policy: @escaping PolicyBody)
|
||||||
|
-> GestureRecognizerDelegatePolicy<PolicyInput> {
|
||||||
|
.init(policy: policy)
|
||||||
|
}
|
||||||
|
|
||||||
|
public static var always: GestureRecognizerDelegatePolicy<PolicyInput> {
|
||||||
|
.init { _ in true }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static var never: GestureRecognizerDelegatePolicy<PolicyInput> {
|
||||||
|
.init { _ in false }
|
||||||
|
}
|
||||||
|
|
||||||
|
public func isPolicyPassing(with args: PolicyInput) -> Bool {
|
||||||
|
policy(args)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func || <PolicyInput>(lhs: GestureRecognizerDelegatePolicy<PolicyInput>, rhs: GestureRecognizerDelegatePolicy<PolicyInput>) -> GestureRecognizerDelegatePolicy<PolicyInput> {
|
||||||
|
.custom { input in
|
||||||
|
lhs.isPolicyPassing(with: input) || rhs.isPolicyPassing(with: input)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func && <PolicyInput>(lhs: GestureRecognizerDelegatePolicy<PolicyInput>, rhs: GestureRecognizerDelegatePolicy<PolicyInput>) -> GestureRecognizerDelegatePolicy<PolicyInput> {
|
||||||
|
.custom { input in
|
||||||
|
lhs.isPolicyPassing(with: input) && rhs.isPolicyPassing(with: input)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class GenericRxGestureRecognizerDelegate<Gesture: RxGestureRecognizer>: NSObject, RxGestureRecognizerDelegate {
|
||||||
|
|
||||||
|
/// Corresponding delegate method: gestureRecognizerShouldBegin(:_)
|
||||||
|
public var beginPolicy: GestureRecognizerDelegatePolicy<Gesture> = .always
|
||||||
|
|
||||||
|
/// Corresponding delegate method: gestureRecognizer(_:shouldReceive:)
|
||||||
|
public var touchReceptionPolicy: GestureRecognizerDelegatePolicy<(Gesture, RxGestureTouch)> = .always
|
||||||
|
|
||||||
|
/// Corresponding delegate method: gestureRecognizer(_:shouldBeRequiredToFailBy:)
|
||||||
|
public var selfFailureRequirementPolicy: GestureRecognizerDelegatePolicy<(Gesture, RxGestureRecognizer)> = .never
|
||||||
|
|
||||||
|
/// Corresponding delegate method: gestureRecognizer(_:shouldRequireFailureOf:)
|
||||||
|
public var otherFailureRequirementPolicy: GestureRecognizerDelegatePolicy<(Gesture, RxGestureRecognizer)> = .never
|
||||||
|
|
||||||
|
/// Corresponding delegate method: gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
|
||||||
|
public var simultaneousRecognitionPolicy: GestureRecognizerDelegatePolicy<(Gesture, RxGestureRecognizer)> = .always
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
// Workaround because we can't have stored properties with @available annotation
|
||||||
|
private var _pressReceptionPolicy: Any?
|
||||||
|
|
||||||
|
/// Corresponding delegate method: gestureRecognizer(_:shouldReceive:)
|
||||||
|
public var pressReceptionPolicy: GestureRecognizerDelegatePolicy<(Gesture, UIPress)> {
|
||||||
|
get {
|
||||||
|
_pressReceptionPolicy as? GestureRecognizerDelegatePolicy<(Gesture, UIPress)> ?? .always
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
_pressReceptionPolicy = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if os(OSX)
|
||||||
|
/// Corresponding delegate method: gestureRecognizer(_:shouldAttemptToRecognizeWith:)
|
||||||
|
public var eventRecognitionAttemptPolicy: GestureRecognizerDelegatePolicy<(Gesture, NSEvent)> = .always
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public func gestureRecognizerShouldBegin(
|
||||||
|
_ gestureRecognizer: RxGestureRecognizer
|
||||||
|
) -> Bool {
|
||||||
|
beginPolicy.isPolicyPassing(with: gestureRecognizer as! Gesture)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func gestureRecognizer(
|
||||||
|
_ gestureRecognizer: RxGestureRecognizer,
|
||||||
|
shouldReceive touch: RxGestureTouch
|
||||||
|
) -> Bool {
|
||||||
|
touchReceptionPolicy.isPolicyPassing(
|
||||||
|
with: (gestureRecognizer as! Gesture, touch)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func gestureRecognizer(
|
||||||
|
_ gestureRecognizer: RxGestureRecognizer,
|
||||||
|
shouldRequireFailureOf otherGestureRecognizer: RxGestureRecognizer
|
||||||
|
) -> Bool {
|
||||||
|
otherFailureRequirementPolicy.isPolicyPassing(
|
||||||
|
with: (gestureRecognizer as! Gesture, otherGestureRecognizer)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func gestureRecognizer(
|
||||||
|
_ gestureRecognizer: RxGestureRecognizer,
|
||||||
|
shouldBeRequiredToFailBy otherGestureRecognizer: RxGestureRecognizer
|
||||||
|
) -> Bool {
|
||||||
|
selfFailureRequirementPolicy.isPolicyPassing(
|
||||||
|
with: (gestureRecognizer as! Gesture, otherGestureRecognizer)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func gestureRecognizer(
|
||||||
|
_ gestureRecognizer: RxGestureRecognizer,
|
||||||
|
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: RxGestureRecognizer
|
||||||
|
) -> Bool {
|
||||||
|
simultaneousRecognitionPolicy.isPolicyPassing(
|
||||||
|
with: (gestureRecognizer as! Gesture, otherGestureRecognizer)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
|
||||||
|
public func gestureRecognizer(
|
||||||
|
_ gestureRecognizer: RxGestureRecognizer,
|
||||||
|
shouldReceive press: UIPress
|
||||||
|
) -> Bool {
|
||||||
|
pressReceptionPolicy.isPolicyPassing(
|
||||||
|
with: (gestureRecognizer as! Gesture, press)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if os(OSX)
|
||||||
|
|
||||||
|
public func gestureRecognizer(
|
||||||
|
_ gestureRecognizer: RxGestureRecognizer,
|
||||||
|
shouldAttemptToRecognizeWith event: NSEvent
|
||||||
|
) -> Bool {
|
||||||
|
eventRecognitionAttemptPolicy.isPolicyPassing(
|
||||||
|
with: (gestureRecognizer as! Gesture, event)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
#if canImport(ObjectiveC)
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
import ObjectiveC
|
||||||
|
|
||||||
|
public typealias Configuration<Gesture: RxGestureRecognizer> = (Gesture, GenericRxGestureRecognizerDelegate<Gesture>) -> Void
|
||||||
|
|
||||||
|
public struct Factory<Gesture: RxGestureRecognizer> {
|
||||||
|
public let gesture: Gesture
|
||||||
|
public init(_ configuration: Configuration<Gesture>?) {
|
||||||
|
let gesture = Gesture()
|
||||||
|
let delegate = GenericRxGestureRecognizerDelegate<Gesture>()
|
||||||
|
objc_setAssociatedObject(
|
||||||
|
gesture,
|
||||||
|
&gestureRecognizerStrongDelegateKey,
|
||||||
|
delegate,
|
||||||
|
.OBJC_ASSOCIATION_RETAIN_NONATOMIC
|
||||||
|
)
|
||||||
|
gesture.delegate = delegate
|
||||||
|
configuration?(gesture, delegate)
|
||||||
|
self.gesture = gesture
|
||||||
|
}
|
||||||
|
|
||||||
|
internal func abstracted() -> AnyFactory {
|
||||||
|
AnyFactory(self.gesture)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal func make<G>(configuration: Configuration<G>? = nil) -> Factory<G> {
|
||||||
|
Factory<G>(configuration)
|
||||||
|
}
|
||||||
|
|
||||||
|
public typealias AnyFactory = Factory<RxGestureRecognizer>
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
private init<G: RxGestureRecognizer>(_ gesture: G) {
|
||||||
|
self.gesture = gesture
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var gestureRecognizerStrongDelegateKey: UInt8 = 0
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
import struct CoreGraphics.CGPoint
|
||||||
|
|
||||||
|
public typealias LocationInView = (RxGestureView) -> CGPoint
|
||||||
|
|
||||||
|
extension ObservableType where Element: RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Filters the observable `GestureRecognizer` events sequence based on the `GestureRecognizer` state.
|
||||||
|
|
||||||
|
- parameter state: An `GestureRecognizerState` that is used to filter the `GestureRecognizer` events sequence.
|
||||||
|
- returns: An observable `GestureRecognizer` events sequence that only contains events emitted while the `GestureRecognizer`'s state match the given `state`.
|
||||||
|
*/
|
||||||
|
public func when(_ states: RxGestureRecognizerState...) -> Observable<Element> {
|
||||||
|
filter { gesture in
|
||||||
|
states.contains(gesture.state)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Filters the observable `GestureRecognizer` events sequence based on the `GestureRecognizer` state.
|
||||||
|
|
||||||
|
- parameter state: An `GestureRecognizerState` that is used to filter the `GestureRecognizer` events sequence.
|
||||||
|
- returns: An observable `GestureRecognizer` events sequence that only contains events emitted while the `GestureRecognizer`'s state match the given `state`.
|
||||||
|
*/
|
||||||
|
internal func when(_ states: [RxGestureRecognizerState]) -> Observable<Element> {
|
||||||
|
filter { gesture in
|
||||||
|
states.contains(gesture.state)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Maps the observable `GestureRecognizer` events sequence to an observable sequence of points computed as the location in the given `view` of the gesture.
|
||||||
|
|
||||||
|
- parameter view: A `TargetView` value on which the gesture took place.
|
||||||
|
*/
|
||||||
|
public func asLocation(in view: TargetView = .view) -> Observable<RxGesturePoint> {
|
||||||
|
map { gesture in
|
||||||
|
gesture.location(in: view.targetView(for: gesture))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func asLocationInView() -> Observable<LocationInView> {
|
||||||
|
map { gesture in
|
||||||
|
let targetView = gesture.view!
|
||||||
|
let location = gesture.location(in: targetView)
|
||||||
|
return { view in
|
||||||
|
targetView.convert(location, to: view)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,70 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
import UIKit
|
||||||
|
public typealias RxGestureTouch = UITouch
|
||||||
|
public typealias RxGestureRecognizer = UIGestureRecognizer
|
||||||
|
public typealias RxGestureRecognizerState = UIGestureRecognizer.State
|
||||||
|
public typealias RxGestureRecognizerDelegate = UIGestureRecognizerDelegate
|
||||||
|
public typealias RxGestureView = UIView
|
||||||
|
public typealias RxGesturePoint = CGPoint
|
||||||
|
#elseif os(OSX)
|
||||||
|
import AppKit
|
||||||
|
public typealias RxGestureTouch = NSTouch
|
||||||
|
public typealias RxGestureRecognizer = NSGestureRecognizer
|
||||||
|
public typealias RxGestureRecognizerState = NSGestureRecognizer.State
|
||||||
|
public typealias RxGestureRecognizerDelegate = NSGestureRecognizerDelegate
|
||||||
|
public typealias RxGestureView = NSView
|
||||||
|
public typealias RxGesturePoint = NSPoint
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public enum TargetView {
|
||||||
|
/// The target view will be the gestureRecognizer's view
|
||||||
|
case view
|
||||||
|
|
||||||
|
/// The target view will be the gestureRecognizer's view's superview
|
||||||
|
case superview
|
||||||
|
|
||||||
|
/// The target view will be the gestureRecognizer's view's window
|
||||||
|
case window
|
||||||
|
|
||||||
|
/// The target view will be the given view
|
||||||
|
case this(RxGestureView)
|
||||||
|
|
||||||
|
public func targetView(for gestureRecognizer: RxGestureRecognizer) -> RxGestureView? {
|
||||||
|
switch self {
|
||||||
|
case .view:
|
||||||
|
return gestureRecognizer.view
|
||||||
|
case .superview:
|
||||||
|
return gestureRecognizer.view?.superview
|
||||||
|
case .window:
|
||||||
|
#if os(iOS)
|
||||||
|
return gestureRecognizer.view?.window
|
||||||
|
#elseif os(OSX)
|
||||||
|
return gestureRecognizer.view?.window?.contentView
|
||||||
|
#endif
|
||||||
|
case let .this(view):
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,112 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
import Dispatch
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reactive wrapper for multiple view gesture recognizers.
|
||||||
|
It automatically attaches the gesture recognizers to the receiver view.
|
||||||
|
The value the `Observable` emits is the gesture recognizer itself.
|
||||||
|
|
||||||
|
rx.anyGesture can't error and is subscribed/observed on main scheduler.
|
||||||
|
- parameter factories: a `(Factory + state)` collection you want to use to create the `GestureRecognizers` to add and observe
|
||||||
|
- returns: a `ControlEvent<G>` that re-emit the gesture recognizer itself
|
||||||
|
*/
|
||||||
|
public func anyGesture(_ factories: (AnyFactory, when: RxGestureRecognizerState)...) -> ControlEvent<RxGestureRecognizer> {
|
||||||
|
let observables = factories.map { gesture, state in
|
||||||
|
self.gesture(gesture).when(state).asObservable() as Observable<RxGestureRecognizer>
|
||||||
|
}
|
||||||
|
let source = Observable.from(observables).merge()
|
||||||
|
return ControlEvent(events: source)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reactive wrapper for multiple view gesture recognizers.
|
||||||
|
It automatically attaches the gesture recognizers to the receiver view.
|
||||||
|
The value the `Observable` emits is the gesture recognizer itself.
|
||||||
|
|
||||||
|
rx.anyGesture can't error and is subscribed/observed on main scheduler.
|
||||||
|
- parameter factories: a `Factory` collection you want to use to create the `GestureRecognizers` to add and observe
|
||||||
|
- returns: a `ControlEvent<G>` that re-emit the gesture recognizer itself
|
||||||
|
*/
|
||||||
|
public func anyGesture(_ factories: AnyFactory...) -> ControlEvent<RxGestureRecognizer> {
|
||||||
|
let observables = factories.map { factory in
|
||||||
|
self.gesture(factory).asObservable() as Observable<RxGestureRecognizer>
|
||||||
|
}
|
||||||
|
let source = Observable.from(observables).merge()
|
||||||
|
return ControlEvent(events: source)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reactive wrapper for a single view gesture recognizer.
|
||||||
|
It automatically attaches the gesture recognizer to the receiver view.
|
||||||
|
The value the `Observable` emits is the gesture recognizer itself.
|
||||||
|
|
||||||
|
rx.gesture can't error and is subscribed/observed on main scheduler.
|
||||||
|
- parameter factory: a `Factory` you want to use to create the `GestureRecognizer` to add and observe
|
||||||
|
- returns: a `ControlEvent<G>` that re-emit the gesture recognizer itself
|
||||||
|
*/
|
||||||
|
public func gesture<G>(_ factory: Factory<G>) -> ControlEvent<G> {
|
||||||
|
self.gesture(factory.gesture)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reactive wrapper for a single view gesture recognizer.
|
||||||
|
It automatically attaches the gesture recognizer to the receiver view.
|
||||||
|
The value the `Observable` emits is the gesture recognizer itself.
|
||||||
|
|
||||||
|
rx.gesture can't error and is subscribed/observed on main scheduler.
|
||||||
|
- parameter gesture: a `GestureRecognizer` you want to add and observe
|
||||||
|
- returns: a `ControlEvent<G>` that re-emit the gesture recognizer itself
|
||||||
|
*/
|
||||||
|
public func gesture<G: RxGestureRecognizer>(_ gesture: G) -> ControlEvent<G> {
|
||||||
|
|
||||||
|
let source = Observable.deferred { [weak control = self.base] () -> Observable<G> in
|
||||||
|
MainScheduler.ensureExecutingOnScheduler()
|
||||||
|
|
||||||
|
guard let control = control else { return .empty() }
|
||||||
|
|
||||||
|
let genericGesture = gesture as RxGestureRecognizer
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
control.isUserInteractionEnabled = true
|
||||||
|
#endif
|
||||||
|
|
||||||
|
control.addGestureRecognizer(gesture)
|
||||||
|
|
||||||
|
return genericGesture.rx.event
|
||||||
|
.compactMap { $0 as? G }
|
||||||
|
.startWith(gesture)
|
||||||
|
.do(onDispose: { [weak control, weak gesture] () in
|
||||||
|
guard let gesture = gesture else { return }
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
control?.removeGestureRecognizer(gesture)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.take(until: control.rx.deallocated)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ControlEvent(events: source)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,129 @@
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit.UIGestureRecognizerSubclass
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public class ForceTouchGestureRecognizer: UIGestureRecognizer {
|
||||||
|
|
||||||
|
private var touch: UITouch?
|
||||||
|
public var force: CGFloat {
|
||||||
|
touch?.force ?? 0
|
||||||
|
}
|
||||||
|
|
||||||
|
public var maximumPossibleForce: CGFloat {
|
||||||
|
touch?.maximumPossibleForce ?? 0
|
||||||
|
}
|
||||||
|
|
||||||
|
public var absoluteFractionCompleted: CGFloat {
|
||||||
|
guard maximumPossibleForce > 0 else {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return force / maximumPossibleForce
|
||||||
|
}
|
||||||
|
|
||||||
|
public var minimumFractionCompletedRequired: CGFloat = 0
|
||||||
|
public var maximumFractionCompletedRequired: CGFloat = 1
|
||||||
|
|
||||||
|
public var fractionCompleted: CGFloat {
|
||||||
|
lerp(
|
||||||
|
mapMin: minimumFractionCompletedRequired, to: 0,
|
||||||
|
mapMax: maximumFractionCompletedRequired, to: 1,
|
||||||
|
value: absoluteFractionCompleted
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
|
||||||
|
super.touchesBegan(touches, with: event)
|
||||||
|
|
||||||
|
guard state == .possible else { return }
|
||||||
|
guard touch == nil else { return }
|
||||||
|
guard let first = touches.first(where: { $0.phase == .began }) else { return }
|
||||||
|
touch = first
|
||||||
|
state = .began
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent) {
|
||||||
|
super.touchesMoved(touches, with: event)
|
||||||
|
guard let touch = touch, touches.contains(touch), touch.phase == .moved else { return }
|
||||||
|
state = .changed
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {
|
||||||
|
super.touchesEnded(touches, with: event)
|
||||||
|
guard let touch = touch, touches.contains(touch), touch.phase == .ended else { return }
|
||||||
|
self.touch = nil
|
||||||
|
state = .ended
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent) {
|
||||||
|
super.touchesCancelled(touches, with: event)
|
||||||
|
guard let touch = touch, touches.contains(touch), touch.phase == .cancelled else { return }
|
||||||
|
self.touch = nil
|
||||||
|
state = .cancelled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public typealias ForceTouchConfiguration = Configuration<ForceTouchGestureRecognizer>
|
||||||
|
public typealias ForceTouchControlEvent = ControlEvent<ForceTouchGestureRecognizer>
|
||||||
|
public typealias ForceTouchObservable = Observable<ForceTouchGestureRecognizer>
|
||||||
|
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `ForceTouchGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func forceTouch(configuration: ForceTouchConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `ForceTouchGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func forceTouchGesture(configuration: ForceTouchConfiguration? = nil) -> ForceTouchControlEvent {
|
||||||
|
gesture(make(configuration: configuration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension ObservableType where Element: ForceTouchGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Maps the observable `GestureRecognizer` events sequence to an observable sequence of force values.
|
||||||
|
*/
|
||||||
|
public func asForce() -> Observable<CGFloat> {
|
||||||
|
self.map { $0.force }
|
||||||
|
}
|
||||||
|
|
||||||
|
public func when(fractionCompletedExceeds threshold: CGFloat) -> Observable<Element> {
|
||||||
|
let source = asObservable()
|
||||||
|
return source
|
||||||
|
.when(.began)
|
||||||
|
.flatMapLatest { [unowned source] _ in
|
||||||
|
source
|
||||||
|
.when(.changed)
|
||||||
|
.filter {
|
||||||
|
if threshold == 0 {
|
||||||
|
return $0.fractionCompleted > threshold
|
||||||
|
} else {
|
||||||
|
return $0.fractionCompleted >= threshold
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.take(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func lerp<T : FloatingPoint>(_ v0: T, _ v1: T, _ t: T) -> T {
|
||||||
|
v0 + (v1 - v0) * t
|
||||||
|
}
|
||||||
|
|
||||||
|
private func lerp<T : FloatingPoint>(mapMin: T, to min: T, mapMax: T, to max: T, value: T) -> T {
|
||||||
|
lerp(min, max, (value - mapMin) / (mapMax - mapMin))
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,136 @@
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit.UIGestureRecognizerSubclass
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public class TouchDownGestureRecognizer: UIGestureRecognizer {
|
||||||
|
|
||||||
|
public override init(target: Any?, action: Selector?) {
|
||||||
|
super.init(target: target, action: action)
|
||||||
|
|
||||||
|
trigger
|
||||||
|
.flatMapFirst { [unowned self] _ -> Observable<Void> in
|
||||||
|
let trigger = Observable.just(())
|
||||||
|
guard self.state == .possible else {
|
||||||
|
return trigger
|
||||||
|
}
|
||||||
|
return trigger.delay(
|
||||||
|
.milliseconds(Int(self.minimumTouchDuration * 1000)),
|
||||||
|
scheduler: MainScheduler.instance
|
||||||
|
)
|
||||||
|
}
|
||||||
|
.subscribe(onNext: { [unowned self] _ in
|
||||||
|
self.touches = self._touches
|
||||||
|
})
|
||||||
|
.disposed(by: triggerDisposeBag)
|
||||||
|
}
|
||||||
|
|
||||||
|
public var minimumTouchDuration: TimeInterval = 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
When set to `false`, it allows to bypass the touch ignoring mechanism in order to get absolutely all touch down events.
|
||||||
|
Defaults to `true`.
|
||||||
|
- note: See [ignore(_ touch: UITouch, for event: UIEvent)](https://developer.apple.com/documentation/uikit/uigesturerecognizer/1620010-ignore)
|
||||||
|
*/
|
||||||
|
public var isTouchIgnoringEnabled: Bool = true
|
||||||
|
|
||||||
|
@nonobjc public var touches: Set<UITouch> = [] {
|
||||||
|
didSet {
|
||||||
|
if touches.isEmpty {
|
||||||
|
if state == .possible {
|
||||||
|
state = .cancelled
|
||||||
|
} else {
|
||||||
|
state = .ended
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if state == .possible {
|
||||||
|
state = .began
|
||||||
|
} else {
|
||||||
|
state = .changed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
|
||||||
|
super.touchesBegan(touches, with: event)
|
||||||
|
setTouches(from: event)
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent) {
|
||||||
|
super.touchesMoved(touches, with: event)
|
||||||
|
setTouches(from: event)
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {
|
||||||
|
super.touchesEnded(touches, with: event)
|
||||||
|
setTouches(from: event)
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent) {
|
||||||
|
super.touchesCancelled(touches, with: event)
|
||||||
|
setTouches(from: event)
|
||||||
|
}
|
||||||
|
|
||||||
|
private let triggerDisposeBag = DisposeBag()
|
||||||
|
private let trigger = PublishSubject<Void>()
|
||||||
|
private var _touches: Set<UITouch> = []
|
||||||
|
private func setTouches(from event: UIEvent) {
|
||||||
|
_touches = (event.allTouches ?? []).filter { touch in
|
||||||
|
[.began, .stationary, .moved].contains(touch.phase)
|
||||||
|
}
|
||||||
|
trigger.onNext(())
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func reset() {
|
||||||
|
super.reset()
|
||||||
|
touches = []
|
||||||
|
}
|
||||||
|
|
||||||
|
public override func ignore(_ touch: UITouch, for event: UIEvent) {
|
||||||
|
guard isTouchIgnoringEnabled else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
super.ignore(touch, for: event)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public typealias TouchDownConfiguration = Configuration<TouchDownGestureRecognizer>
|
||||||
|
public typealias TouchDownControlEvent = ControlEvent<TouchDownGestureRecognizer>
|
||||||
|
public typealias TouchDownObservable = Observable<TouchDownGestureRecognizer>
|
||||||
|
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `TouchDownGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func touchDown(configuration: TouchDownConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `TouchDownGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func touchDownGesture(configuration: TouchDownConfiguration? = nil) -> TouchDownControlEvent {
|
||||||
|
gesture(make(configuration: configuration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension ObservableType where Element: TouchDownGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Maps the observable `GestureRecognizer` events sequence to an observable sequence of force values.
|
||||||
|
*/
|
||||||
|
public func asTouches() -> Observable<Set<UITouch>> {
|
||||||
|
self.map { $0.touches }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public struct TransformGestureRecognizers {
|
||||||
|
public let panGesture: UIPanGestureRecognizer
|
||||||
|
public let rotationGesture: UIRotationGestureRecognizer
|
||||||
|
public let pinchGesture: UIPinchGestureRecognizer
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct TransformVelocity {
|
||||||
|
let translation: CGPoint
|
||||||
|
let rotation: CGFloat
|
||||||
|
let scale: CGFloat
|
||||||
|
}
|
||||||
|
|
||||||
|
public typealias TransformControlEvent = ControlEvent<TransformGestureRecognizers>
|
||||||
|
public typealias TransformObservable = Observable<TransformGestureRecognizers>
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
public func transformGestures() -> TransformControlEvent {
|
||||||
|
let source = Observable.combineLatest(panGesture(), rotationGesture(), pinchGesture()) {
|
||||||
|
TransformGestureRecognizers(
|
||||||
|
panGesture: $0,
|
||||||
|
rotationGesture: $1,
|
||||||
|
pinchGesture: $2
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return ControlEvent(events: source)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension ObservableType where Element == TransformGestureRecognizers {
|
||||||
|
|
||||||
|
public func when(_ states: RxGestureRecognizerState...) -> Observable<Element> {
|
||||||
|
filter { gestures in
|
||||||
|
states.contains(gestures.panGesture.state)
|
||||||
|
|| states.contains(gestures.rotationGesture.state)
|
||||||
|
|| states.contains(gestures.pinchGesture.state)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func asTransform(in view: TargetView = .view) -> Observable<(transform: CGAffineTransform, velocity: TransformVelocity)> {
|
||||||
|
map { gestures in
|
||||||
|
let translationView = view.targetView(for: gestures.panGesture)
|
||||||
|
let translation = gestures.panGesture.translation(in: translationView)
|
||||||
|
|
||||||
|
let transform = CGAffineTransform.identity
|
||||||
|
.rotated(by: gestures.rotationGesture.rotation)
|
||||||
|
.scaledBy(x: gestures.pinchGesture.scale, y: gestures.pinchGesture.scale)
|
||||||
|
.translatedBy(x: translation.x, y: translation.y)
|
||||||
|
|
||||||
|
let velocity = TransformVelocity(
|
||||||
|
translation: gestures.panGesture.velocity(in: translationView),
|
||||||
|
rotation: gestures.rotationGesture.velocity,
|
||||||
|
scale: gestures.pinchGesture.velocity
|
||||||
|
)
|
||||||
|
|
||||||
|
return (transform, velocity)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
|
||||||
|
@available(iOS 13.0, *)
|
||||||
|
public typealias HoverConfiguration = Configuration<UIHoverGestureRecognizer>
|
||||||
|
@available(iOS 13.0, *)
|
||||||
|
public typealias HoverControlEvent = ControlEvent<UIHoverGestureRecognizer>
|
||||||
|
@available(iOS 13.0, *)
|
||||||
|
public typealias HoverObservable = Observable<UIHoverGestureRecognizer>
|
||||||
|
|
||||||
|
|
||||||
|
@available(iOS 13.0, *)
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `UIHoverGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func hover(configuration: HoverConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(iOS 13.0, *)
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UIHoverGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func hoverGesture(configuration: HoverConfiguration? = nil) -> HoverControlEvent {
|
||||||
|
gesture(make(configuration: configuration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
53
Pods/RxGesture/Pod/Classes/iOS/UILongPressGestureRecognizer+RxGesture.swift
generated
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public typealias LongPressConfiguration = Configuration<UILongPressGestureRecognizer>
|
||||||
|
public typealias LongPressControlEvent = ControlEvent<UILongPressGestureRecognizer>
|
||||||
|
public typealias LongPressObservable = Observable<UILongPressGestureRecognizer>
|
||||||
|
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `UILongPressGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func longPress(configuration: LongPressConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UILongPressGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func longPressGesture(configuration: LongPressConfiguration? = nil) -> LongPressControlEvent {
|
||||||
|
gesture(make(configuration: configuration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public typealias PanConfiguration = Configuration<UIPanGestureRecognizer>
|
||||||
|
public typealias PanControlEvent = ControlEvent<UIPanGestureRecognizer>
|
||||||
|
public typealias PanObservable = Observable<UIPanGestureRecognizer>
|
||||||
|
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `UIPanGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func pan(configuration: PanConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UIPanGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func panGesture(configuration: PanConfiguration? = nil) -> PanControlEvent {
|
||||||
|
gesture(make(configuration: configuration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension ObservableType where Element: UIPanGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Maps the observable `GestureRecognizer` events sequence to an observable sequence of translation values of the pan gesture in the coordinate system of the specified `view` alongside the gesture velocity.
|
||||||
|
|
||||||
|
- parameter view: A `TargetView` value on which the gesture took place.
|
||||||
|
*/
|
||||||
|
public func asTranslation(in view: TargetView = .view) -> Observable<(translation: CGPoint, velocity: CGPoint)> {
|
||||||
|
self.map { gesture in
|
||||||
|
let view = view.targetView(for: gesture)
|
||||||
|
return (
|
||||||
|
gesture.translation(in: view),
|
||||||
|
gesture.velocity(in: view)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public typealias PinchConfiguration = Configuration<UIPinchGestureRecognizer>
|
||||||
|
public typealias PinchControlEvent = ControlEvent<UIPinchGestureRecognizer>
|
||||||
|
public typealias PinchObservable = Observable<UIPinchGestureRecognizer>
|
||||||
|
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `UIPinchGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func pinch(configuration: PinchConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UIPinchGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func pinchGesture(configuration: PinchConfiguration? = nil) -> PinchControlEvent {
|
||||||
|
gesture(make(configuration: configuration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension ObservableType where Element: UIPinchGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Maps the observable `GestureRecognizer` events sequence to an observable sequence of scale factors relative to the points of the two touches in screen coordinates alongside the gesture velocity.
|
||||||
|
*/
|
||||||
|
public func asScale() -> Observable<(scale: CGFloat, velocity: CGFloat)> {
|
||||||
|
self.map { gesture in
|
||||||
|
(gesture.scale, gesture.velocity)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public typealias RotationConfiguration = Configuration<UIRotationGestureRecognizer>
|
||||||
|
public typealias RotationControlEvent = ControlEvent<UIRotationGestureRecognizer>
|
||||||
|
public typealias RotationObservable = Observable<UIRotationGestureRecognizer>
|
||||||
|
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `UIRotationGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func rotation(configuration: RotationConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UIRotationGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func rotationGesture(configuration: RotationConfiguration? = nil) -> RotationControlEvent {
|
||||||
|
gesture(make(configuration: configuration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension ObservableType where Element: UIRotationGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Maps the observable `GestureRecognizer` events sequence to an observable sequence of rotation values of the gesture in radians alongside the gesture velocity.
|
||||||
|
*/
|
||||||
|
public func asRotation() -> Observable<(rotation: CGFloat, velocity: CGFloat)> {
|
||||||
|
self.map { gesture in
|
||||||
|
(gesture.rotation, gesture.velocity)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
53
Pods/RxGesture/Pod/Classes/iOS/UIScreenEdgePanGestureRecognizer+RxGesture.swift
generated
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public typealias ScreenEdgePanConfiguration = Configuration<UIScreenEdgePanGestureRecognizer>
|
||||||
|
public typealias ScreenEdgePanControlEvent = ControlEvent<UIScreenEdgePanGestureRecognizer>
|
||||||
|
public typealias ScreenEdgePanObservable = Observable<UIScreenEdgePanGestureRecognizer>
|
||||||
|
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `UIScreenEdgePanGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func screenEdgePan(configuration: ScreenEdgePanConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UIScreenEdgePanGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func screenEdgePanGesture(configuration: ScreenEdgePanConfiguration? = nil) -> ScreenEdgePanControlEvent {
|
||||||
|
gesture(make(configuration: configuration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public enum SwipeDirection {
|
||||||
|
case right, left, up, down
|
||||||
|
|
||||||
|
fileprivate typealias SwipeGestureRecognizerDirection = UISwipeGestureRecognizer.Direction
|
||||||
|
|
||||||
|
fileprivate var direction: SwipeGestureRecognizerDirection {
|
||||||
|
switch self {
|
||||||
|
case .right: return .right
|
||||||
|
case .left: return .left
|
||||||
|
case .up: return .up
|
||||||
|
case .down: return .down
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func make(direction: SwipeDirection, configuration: Configuration<UISwipeGestureRecognizer>?) -> Factory<UISwipeGestureRecognizer> {
|
||||||
|
make {
|
||||||
|
$0.direction = direction.direction
|
||||||
|
configuration?($0, $1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public typealias SwipeConfiguration = Configuration<UISwipeGestureRecognizer>
|
||||||
|
public typealias SwipeControlEvent = ControlEvent<UISwipeGestureRecognizer>
|
||||||
|
public typealias SwipeObservable = Observable<UISwipeGestureRecognizer>
|
||||||
|
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `UISwipeGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func swipe(direction: SwipeDirection, configuration: SwipeConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(direction: direction, configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UISwipeGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
private func swipeGesture(direction: SwipeDirection,configuration: SwipeConfiguration? = nil) -> SwipeControlEvent {
|
||||||
|
gesture(make(direction: direction, configuration: configuration))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UISwipeGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func swipeGesture(_ directions: Set<SwipeDirection>,configuration: SwipeConfiguration? = nil) -> SwipeControlEvent {
|
||||||
|
let source = Observable.merge(directions.map {
|
||||||
|
swipeGesture(direction: $0, configuration: configuration).asObservable()
|
||||||
|
})
|
||||||
|
return ControlEvent(events: source)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UISwipeGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func swipeGesture(_ directions: SwipeDirection...,configuration: SwipeConfiguration? = nil) -> SwipeControlEvent {
|
||||||
|
swipeGesture(Set(directions), configuration: configuration)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
// Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#if canImport(UIKit)
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import RxSwift
|
||||||
|
import RxCocoa
|
||||||
|
|
||||||
|
public typealias TapConfiguration = Configuration<UITapGestureRecognizer>
|
||||||
|
public typealias TapControlEvent = ControlEvent<UITapGestureRecognizer>
|
||||||
|
public typealias TapObservable = Observable<UITapGestureRecognizer>
|
||||||
|
|
||||||
|
extension Factory where Gesture == RxGestureRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an `AnyFactory` for `UITapGestureRecognizer`
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public static func tap(configuration: TapConfiguration? = nil) -> AnyFactory {
|
||||||
|
make(configuration: configuration).abstracted()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Reactive where Base: RxGestureView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an observable `UITapGestureRecognizer` events sequence
|
||||||
|
- parameter configuration: A closure that allows to fully configure the gesture recognizer
|
||||||
|
*/
|
||||||
|
public func tapGesture(configuration: TapConfiguration? = nil) -> TapControlEvent {
|
||||||
|
gesture(make(configuration: configuration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,216 @@
|
||||||
|
# RxGesture
|
||||||
|
|
||||||
|
[](http://cocoapods.org/pods/RxGesture)
|
||||||
|
[](http://cocoapods.org/pods/RxGesture)
|
||||||
|
[](http://cocoapods.org/pods/RxGesture)
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
To run the example project, clone the repo, in the __Example__ folder open `RxGesture.xcworkspace`.
|
||||||
|
|
||||||
|
You _might_ need to run `pod install` from the Example directory first.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
__RxGesture__ allows you to easily turn any view into a tappable or swipeable control like so:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
view.rx
|
||||||
|
.tapGesture()
|
||||||
|
.when(.recognized)
|
||||||
|
.subscribe(onNext: { _ in
|
||||||
|
//react to taps
|
||||||
|
})
|
||||||
|
.disposed(by: stepBag)
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also react to more than one gesture. For example to dismiss a photo preview you might want to do that when the user taps it, or swipes up or down:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
view.rx
|
||||||
|
.anyGesture(.tap(), .swipe([.up, .down]))
|
||||||
|
.when(.recognized)
|
||||||
|
.subscribe(onNext: { _ in
|
||||||
|
//dismiss presented photo
|
||||||
|
})
|
||||||
|
.disposed(by: stepBag)
|
||||||
|
```
|
||||||
|
|
||||||
|
`rx.gesture` is defined as `Observable<G>` where `G` is the actual type of the gesture recognizer so what it emits is the gesture recognizer itself (handy if want to call methods like `asLocation(in view:)` or `asTranslation(in view:)`)
|
||||||
|
|
||||||
|
|
||||||
|
#### On iOS, RxGesture supports:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
view.rx.tapGesture() -> ControlEvent<UITapGestureRecognizer>
|
||||||
|
view.rx.pinchGesture() -> ControlEvent<UIPinchGestureRecognizer>
|
||||||
|
view.rx.swipeGesture(.left) -> ControlEvent<UISwipeGestureRecognizer>
|
||||||
|
view.rx.panGesture() -> ControlEvent<UIPanGestureRecognizer>
|
||||||
|
view.rx.longPressGesture() -> ControlEvent<UILongPressGestureRecognizer>
|
||||||
|
view.rx.rotationGesture() -> ControlEvent<UIRotationGestureRecognizer>
|
||||||
|
view.rx.screenEdgePanGesture() -> ControlEvent<UIScreenEdgePanGestureRecognizer>
|
||||||
|
view.rx.hoverGesture() -> ControlEvent<UIHoverGestureRecognizer>
|
||||||
|
|
||||||
|
view.rx.anyGesture(.tap(), ...) -> ControlEvent<UIGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.pinch(), ...) -> ControlEvent<UIGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.swipe(.left), ...) -> ControlEvent<UIGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.pan(), ...) -> ControlEvent<UIGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.longPress(), ...) -> ControlEvent<UIGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.rotation(), ...) -> ControlEvent<UIGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.screenEdgePan(), ...) -> ControlEvent<UIGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.hover(), ...) -> ControlEvent<UIGestureRecognizer>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### On macOS, RxGesture supports:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
view.rx.clickGesture() -> ControlEvent<NSClickGestureRecognizer>
|
||||||
|
view.rx.rightClickGesture() -> ControlEvent<NSClickGestureRecognizer>
|
||||||
|
view.rx.panGesture() -> ControlEvent<NSPanGestureRecognizer>
|
||||||
|
view.rx.pressGesture() -> ControlEvent<NSPressGestureRecognizer>
|
||||||
|
view.rx.rotationGesture() -> ControlEvent<NSRotationGestureRecognizer>
|
||||||
|
view.rx.magnificationGesture() -> ControlEvent<NSMagnificationGestureRecognizer>
|
||||||
|
|
||||||
|
view.rx.anyGesture(.click(), ...) -> ControlEvent<NSGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.rightClick(), ...) -> ControlEvent<NSGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.pan(), ...) -> ControlEvent<NSGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.press(), ...) -> ControlEvent<NSGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.rotation(), ...) -> ControlEvent<NSGestureRecognizer>
|
||||||
|
view.rx.anyGesture(.magnification(), ...) -> ControlEvent<NSGestureRecognizer>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
ℹ️ If you use a gesture recognizer alone, prefer the `view.rx.fooGesture()` syntax over `view.rx.anyGesture(.foo())` because it returns the concrete `UIGestureRecognizer` subclass and avoid you to cast it in `subscribe()`.
|
||||||
|
|
||||||
|
|
||||||
|
## Filtering State
|
||||||
|
|
||||||
|
By default, there is no filter on the state of the gesture recognizer. That means that you will always receive a first event with the initial state of the gesture recognizer (almost always `.possible`).
|
||||||
|
|
||||||
|
Here are the preferred states that can be used for each kind of gestures (__iOS__ and __macOS__):
|
||||||
|
|
||||||
|
Kind | States
|
||||||
|
---|---
|
||||||
|
`.tap()` `.click()` `.rightClick()` `.swipe()`| `.recognized`
|
||||||
|
`.longPress()` `.press()` | `.began`
|
||||||
|
`.pan()` `.pinch()` `.rotation()` `.magnification()` `.screenEdgePan()` | `.began` `.changed` `.ended`
|
||||||
|
|
||||||
|
You usually filter the state using the `.when()` operator:
|
||||||
|
```swift
|
||||||
|
view.rx.tapGesture().when(.recognized)
|
||||||
|
view.rx.panGesture().when(.began, .changed, .ended)
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are observing multiple gestures at once, you can use the `.when()` operator if you want to filter against the same state for __all__ gesture recognizers, or use the tuple syntax for individual filtering:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
view.rx
|
||||||
|
.anyGesture(.tap(), .swipe([.up, .down]))
|
||||||
|
.when(.recognized)
|
||||||
|
.subscribe(onNext: { gesture in
|
||||||
|
// Called whenever a tap, a swipe-up or a swipe-down is recognized (state == .recognized)
|
||||||
|
})
|
||||||
|
.disposed(by: bag)
|
||||||
|
|
||||||
|
view.rx
|
||||||
|
.anyGesture(
|
||||||
|
(.tap(), when: .recognized),
|
||||||
|
(.pan(), when: .ended)
|
||||||
|
)
|
||||||
|
.subscribe(onNext: { gesture in
|
||||||
|
// Called whenever:
|
||||||
|
// - a tap is recognized (state == .recognized)
|
||||||
|
// - or a pan is ended (state == .ended)
|
||||||
|
})
|
||||||
|
.disposed(by: bag)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
__The demo app includes examples for all recognizers ➡️ [iOS](Example/RxGesture/ViewController.swift), [macOS](Example/RxGesture-OSX/ViewController.swift)__.
|
||||||
|
|
||||||
|
## Delegate customization
|
||||||
|
### Lightweight customization
|
||||||
|
Each gesture recognizer has a default `RxGestureRecognizerDelegate`. It allows you to customize every delegate method using a policy:
|
||||||
|
- `.always` will return `true` to the corresponding delegate method
|
||||||
|
- `.never` will return `false` to the corresponding delegate method
|
||||||
|
- `.custom` takes an associated closure that will be executed to return a value to the corresponding delegate method
|
||||||
|
|
||||||
|
Here are the available policies with their corresponding delegate method:
|
||||||
|
```swift
|
||||||
|
beginPolicy -> gestureRecognizerShouldBegin(:_)
|
||||||
|
touchReceptionPolicy -> gestureRecognizer(_:shouldReceive:)
|
||||||
|
selfFailureRequirementPolicy -> gestureRecognizer(_:shouldBeRequiredToFailBy:)
|
||||||
|
otherFailureRequirementPolicy -> gestureRecognizer(_:shouldRequireFailureOf:)
|
||||||
|
simultaneousRecognitionPolicy -> gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
|
||||||
|
eventRecognitionAttemptPolicy -> gestureRecognizer(_:shouldAttemptToRecognizeWith:) // macOS only
|
||||||
|
pressReceptionPolicy -> gestureRecognizer(_:shouldReceive:) // iOS only
|
||||||
|
```
|
||||||
|
|
||||||
|
This delegate can be customized in the configuration closure:
|
||||||
|
```swift
|
||||||
|
view.rx.tapGesture(configuration: { gestureRecognizer, delegate in
|
||||||
|
delegate.simultaneousRecognitionPolicy = .always // (default value)
|
||||||
|
// or
|
||||||
|
delegate.simultaneousRecognitionPolicy = .never
|
||||||
|
// or
|
||||||
|
delegate.simultaneousRecognitionPolicy = .custom { gestureRecognizer, otherGestureRecognizer in
|
||||||
|
return otherGestureRecognizer is UIPanGestureRecognizer
|
||||||
|
}
|
||||||
|
delegate.otherFailureRequirementPolicy = .custom { gestureRecognizer, otherGestureRecognizer in
|
||||||
|
return otherGestureRecognizer is UILongPressGestureRecognizer
|
||||||
|
}
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
Default values can be found in [`RxGestureRecognizerDelegate.swift`](Pod/Classes/RxGestureRecognizerDelegate.swift#L56).
|
||||||
|
|
||||||
|
### Full customization
|
||||||
|
You can also replace the default delegate by your own, or remove it.
|
||||||
|
```swift
|
||||||
|
view.rx.tapGesture { [unowned self] gestureRecognizer, delegate in
|
||||||
|
gestureRecognizer.delegate = nil
|
||||||
|
// or
|
||||||
|
gestureRecognizer.delegate = self
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
This library depends on both __RxSwift__ and __RxCocoa__.
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html)
|
||||||
|
|
||||||
|
Add this to `Podfile`
|
||||||
|
|
||||||
|
```swift
|
||||||
|
pod "RxGesture"
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ pod install
|
||||||
|
```
|
||||||
|
|
||||||
|
### [Carthage](https://github.com/Carthage/Carthage)
|
||||||
|
|
||||||
|
Add this to `Cartfile`
|
||||||
|
|
||||||
|
```
|
||||||
|
github "RxSwiftCommunity/RxGesture" ~> 3.0
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ carthage update
|
||||||
|
```
|
||||||
|
|
||||||
|
## Thanks
|
||||||
|
|
||||||
|
Everyone in the RxSwift Slack channel 💯
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
RxGesture is available under the MIT license. See the LICENSE file for more info.
|
||||||
|
|
@ -1659,6 +1659,29 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
## RxGesture
|
||||||
|
|
||||||
|
Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
## RxRelay
|
## RxRelay
|
||||||
|
|
||||||
**The MIT License**
|
**The MIT License**
|
||||||
|
|
|
||||||
|
|
@ -1874,6 +1874,35 @@ SOFTWARE.
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>PSGroupSpecifier</string>
|
<string>PSGroupSpecifier</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>Copyright (c) RxSwiftCommunity
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
</string>
|
||||||
|
<key>License</key>
|
||||||
|
<string>MIT</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>RxGesture</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>FooterText</key>
|
<key>FooterText</key>
|
||||||
<string>**The MIT License**
|
<string>**The MIT License**
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ ${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework
|
||||||
${BUILT_PRODUCTS_DIR}/Popover/Popover.framework
|
${BUILT_PRODUCTS_DIR}/Popover/Popover.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework
|
${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework
|
${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/RxGesture/RxGesture.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework
|
${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework
|
${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxSwiftExt/RxSwiftExt.framework
|
${BUILT_PRODUCTS_DIR}/RxSwiftExt/RxSwiftExt.framework
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Popover.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Popover.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxCocoa.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxCocoa.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxDataSources.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxDataSources.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxGesture.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxRelay.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxRelay.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwiftExt.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwiftExt.framework
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ ${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework
|
||||||
${BUILT_PRODUCTS_DIR}/Popover/Popover.framework
|
${BUILT_PRODUCTS_DIR}/Popover/Popover.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework
|
${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework
|
${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/RxGesture/RxGesture.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework
|
${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework
|
${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework
|
||||||
${BUILT_PRODUCTS_DIR}/RxSwiftExt/RxSwiftExt.framework
|
${BUILT_PRODUCTS_DIR}/RxSwiftExt/RxSwiftExt.framework
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Popover.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Popover.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxCocoa.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxCocoa.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxDataSources.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxDataSources.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxGesture.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxRelay.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxRelay.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework
|
||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwiftExt.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwiftExt.framework
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/Popover/Popover.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/Popover/Popover.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/RxGesture/RxGesture.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxSwiftExt/RxSwiftExt.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxSwiftExt/RxSwiftExt.framework"
|
||||||
|
|
@ -247,6 +248,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/Popover/Popover.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/Popover/Popover.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/RxGesture/RxGesture.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework"
|
||||||
install_framework "${BUILT_PRODUCTS_DIR}/RxSwiftExt/RxSwiftExt.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/RxSwiftExt/RxSwiftExt.framework"
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||||
ARCHS = $(ARCHS_STANDARD)
|
ARCHS = $(ARCHS_STANDARD)
|
||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = NO
|
ENABLE_USER_SCRIPT_SANDBOXING = NO
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture/RxGesture.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
|
||||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
|
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "AudioToolbox" -framework "CFNetwork" -framework "CallKit" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "AudioToolbox" -framework "CFNetwork" -framework "CallKit" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxGesture" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI"
|
||||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapNavi-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
|
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapNavi-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
|
||||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||||
ARCHS = $(ARCHS_STANDARD)
|
ARCHS = $(ARCHS_STANDARD)
|
||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = NO
|
ENABLE_USER_SCRIPT_SANDBOXING = NO
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture/RxGesture.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
|
||||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
|
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "AudioToolbox" -framework "CFNetwork" -framework "CallKit" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "AudioToolbox" -framework "CFNetwork" -framework "CallKit" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxGesture" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI"
|
||||||
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapNavi-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
|
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapNavi-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
|
||||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>${PODS_DEVELOPMENT_LANGUAGE}</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>${PRODUCT_NAME}</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>4.0.4</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>${CURRENT_PROJECT_VERSION}</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string></string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
@interface PodsDummy_RxGesture : NSObject
|
||||||
|
@end
|
||||||
|
@implementation PodsDummy_RxGesture
|
||||||
|
@end
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
FOUNDATION_EXPORT double RxGestureVersionNumber;
|
||||||
|
FOUNDATION_EXPORT const unsigned char RxGestureVersionString[];
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
|
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RxGesture
|
||||||
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift"
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||||
|
OTHER_LDFLAGS = $(inherited) -framework "RxCocoa" -framework "RxSwift"
|
||||||
|
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}/RxGesture
|
||||||
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
framework module RxGesture {
|
||||||
|
umbrella header "RxGesture-umbrella.h"
|
||||||
|
|
||||||
|
export *
|
||||||
|
module * { export * }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
|
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RxGesture
|
||||||
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift"
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||||
|
OTHER_LDFLAGS = $(inherited) -framework "RxCocoa" -framework "RxSwift"
|
||||||
|
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}/RxGesture
|
||||||
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||||
|
|
@ -192,6 +192,9 @@
|
||||||
30CCDE512FE2785D00F5214A /* SignInVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCDE502FE2785D00F5214A /* SignInVC.swift */; };
|
30CCDE512FE2785D00F5214A /* SignInVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCDE502FE2785D00F5214A /* SignInVC.swift */; };
|
||||||
30CCDE532FE2786600F5214A /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCDE522FE2786600F5214A /* SignInView.swift */; };
|
30CCDE532FE2786600F5214A /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCDE522FE2786600F5214A /* SignInView.swift */; };
|
||||||
30CCDE552FE2903100F5214A /* SignInModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCDE542FE2903100F5214A /* SignInModel.swift */; };
|
30CCDE552FE2903100F5214A /* SignInModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCDE542FE2903100F5214A /* SignInModel.swift */; };
|
||||||
|
30CCDE582FE39F8C00F5214A /* SOSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCDE572FE39F8C00F5214A /* SOSView.swift */; };
|
||||||
|
30CCDE5A2FE39F9D00F5214A /* SOSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCDE592FE39F9D00F5214A /* SOSViewController.swift */; };
|
||||||
|
30CCDE5C2FE3A1A800F5214A /* SOSPracticeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCDE5B2FE3A1A800F5214A /* SOSPracticeView.swift */; };
|
||||||
30D87CDB2FDFA9EE00E958FD /* MQTTService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */; };
|
30D87CDB2FDFA9EE00E958FD /* MQTTService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */; };
|
||||||
30D87CDD2FDFF07500E958FD /* InteractionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDC2FDFF07500E958FD /* InteractionView.swift */; };
|
30D87CDD2FDFF07500E958FD /* InteractionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDC2FDFF07500E958FD /* InteractionView.swift */; };
|
||||||
30D87CDF2FDFF1A100E958FD /* QuickMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */; };
|
30D87CDF2FDFF1A100E958FD /* QuickMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */; };
|
||||||
|
|
@ -435,6 +438,9 @@
|
||||||
30CCDE502FE2785D00F5214A /* SignInVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInVC.swift; sourceTree = "<group>"; };
|
30CCDE502FE2785D00F5214A /* SignInVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInVC.swift; sourceTree = "<group>"; };
|
||||||
30CCDE522FE2786600F5214A /* SignInView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInView.swift; sourceTree = "<group>"; };
|
30CCDE522FE2786600F5214A /* SignInView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInView.swift; sourceTree = "<group>"; };
|
||||||
30CCDE542FE2903100F5214A /* SignInModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInModel.swift; sourceTree = "<group>"; };
|
30CCDE542FE2903100F5214A /* SignInModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInModel.swift; sourceTree = "<group>"; };
|
||||||
|
30CCDE572FE39F8C00F5214A /* SOSView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SOSView.swift; sourceTree = "<group>"; };
|
||||||
|
30CCDE592FE39F9D00F5214A /* SOSViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SOSViewController.swift; sourceTree = "<group>"; };
|
||||||
|
30CCDE5B2FE3A1A800F5214A /* SOSPracticeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SOSPracticeView.swift; sourceTree = "<group>"; };
|
||||||
30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MQTTService.swift; sourceTree = "<group>"; };
|
30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MQTTService.swift; sourceTree = "<group>"; };
|
||||||
30D87CDC2FDFF07500E958FD /* InteractionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractionView.swift; sourceTree = "<group>"; };
|
30D87CDC2FDFF07500E958FD /* InteractionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractionView.swift; sourceTree = "<group>"; };
|
||||||
30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickMessageView.swift; sourceTree = "<group>"; };
|
30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickMessageView.swift; sourceTree = "<group>"; };
|
||||||
|
|
@ -489,7 +495,17 @@
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFileSystemSynchronizedRootGroup section */
|
/* Begin PBXFileSystemSynchronizedRootGroup section */
|
||||||
3070777D2FD2A214004C37CC /* lotties */ = {
|
30CCDF8E2FE3E63B00F5214A /* sound */ = {
|
||||||
|
isa = PBXFileSystemSynchronizedRootGroup;
|
||||||
|
path = sound;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
30CCDF902FE3E63B00F5214A /* video */ = {
|
||||||
|
isa = PBXFileSystemSynchronizedRootGroup;
|
||||||
|
path = video;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
30CCE01E2FE3E64700F5214A /* lotties */ = {
|
||||||
isa = PBXFileSystemSynchronizedRootGroup;
|
isa = PBXFileSystemSynchronizedRootGroup;
|
||||||
path = lotties;
|
path = lotties;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
@ -812,7 +828,6 @@
|
||||||
305A75392FCA8C7000227D26 /* Font */ = {
|
305A75392FCA8C7000227D26 /* Font */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
3070777D2FD2A214004C37CC /* lotties */,
|
|
||||||
305A75342FCA8C7000227D26 /* D-DIN-PRO-500-Medium.otf */,
|
305A75342FCA8C7000227D26 /* D-DIN-PRO-500-Medium.otf */,
|
||||||
305A75352FCA8C7000227D26 /* douyu.otf */,
|
305A75352FCA8C7000227D26 /* douyu.otf */,
|
||||||
305A75362FCA8C7000227D26 /* pmzd.ttf */,
|
305A75362FCA8C7000227D26 /* pmzd.ttf */,
|
||||||
|
|
@ -825,6 +840,9 @@
|
||||||
305A76192FCA8C7000227D26 /* Resource */ = {
|
305A76192FCA8C7000227D26 /* Resource */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
30CCE01E2FE3E64700F5214A /* lotties */,
|
||||||
|
30CCDF8E2FE3E63B00F5214A /* sound */,
|
||||||
|
30CCDF902FE3E63B00F5214A /* video */,
|
||||||
305A75392FCA8C7000227D26 /* Font */,
|
305A75392FCA8C7000227D26 /* Font */,
|
||||||
);
|
);
|
||||||
path = Resource;
|
path = Resource;
|
||||||
|
|
@ -876,6 +894,7 @@
|
||||||
30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */,
|
30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */,
|
||||||
30D87CDC2FDFF07500E958FD /* InteractionView.swift */,
|
30D87CDC2FDFF07500E958FD /* InteractionView.swift */,
|
||||||
30CCDE4F2FE2782700F5214A /* SignIn */,
|
30CCDE4F2FE2782700F5214A /* SignIn */,
|
||||||
|
30CCDE562FE39F6B00F5214A /* SOS */,
|
||||||
);
|
);
|
||||||
path = Home;
|
path = Home;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
@ -1212,6 +1231,16 @@
|
||||||
path = SignIn;
|
path = SignIn;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
30CCDE562FE39F6B00F5214A /* SOS */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
30CCDE592FE39F9D00F5214A /* SOSViewController.swift */,
|
||||||
|
30CCDE572FE39F8C00F5214A /* SOSView.swift */,
|
||||||
|
30CCDE5B2FE3A1A800F5214A /* SOSPracticeView.swift */,
|
||||||
|
);
|
||||||
|
path = SOS;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
30D87CD52FDF9F1900E958FD /* MQTT */ = {
|
30D87CD52FDF9F1900E958FD /* MQTT */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
|
@ -1375,7 +1404,9 @@
|
||||||
dependencies = (
|
dependencies = (
|
||||||
);
|
);
|
||||||
fileSystemSynchronizedGroups = (
|
fileSystemSynchronizedGroups = (
|
||||||
3070777D2FD2A214004C37CC /* lotties */,
|
30CCDF8E2FE3E63B00F5214A /* sound */,
|
||||||
|
30CCDF902FE3E63B00F5214A /* video */,
|
||||||
|
30CCE01E2FE3E64700F5214A /* lotties */,
|
||||||
30D87CEF2FDFF52100E958FD /* TTGTagCollectionView */,
|
30D87CEF2FDFF52100E958FD /* TTGTagCollectionView */,
|
||||||
);
|
);
|
||||||
name = QuickLocation;
|
name = QuickLocation;
|
||||||
|
|
@ -1576,6 +1607,7 @@
|
||||||
305A76B32FCA8C7000227D26 /* UILabel+Extension.swift in Sources */,
|
305A76B32FCA8C7000227D26 /* UILabel+Extension.swift in Sources */,
|
||||||
305A76B42FCA8C7000227D26 /* UINavigationController+FDFullscreenPopGesture.m in Sources */,
|
305A76B42FCA8C7000227D26 /* UINavigationController+FDFullscreenPopGesture.m in Sources */,
|
||||||
305A76B52FCA8C7000227D26 /* UITableView+Extension.swift in Sources */,
|
305A76B52FCA8C7000227D26 /* UITableView+Extension.swift in Sources */,
|
||||||
|
30CCDE582FE39F8C00F5214A /* SOSView.swift in Sources */,
|
||||||
30EFF3E02FDA9CE300EB35D4 /* EmergencyContactModel.swift in Sources */,
|
30EFF3E02FDA9CE300EB35D4 /* EmergencyContactModel.swift in Sources */,
|
||||||
305A76B62FCA8C7000227D26 /* UITextField+Extensions.swift in Sources */,
|
305A76B62FCA8C7000227D26 /* UITextField+Extensions.swift in Sources */,
|
||||||
30EFF3A82FD7C6A400EB35D4 /* GroupSettingViewModel.swift in Sources */,
|
30EFF3A82FD7C6A400EB35D4 /* GroupSettingViewModel.swift in Sources */,
|
||||||
|
|
@ -1643,6 +1675,7 @@
|
||||||
30EFF3B52FD8F1D000EB35D4 /* ReviewMemberListVC.swift in Sources */,
|
30EFF3B52FD8F1D000EB35D4 /* ReviewMemberListVC.swift in Sources */,
|
||||||
30BAB84D2FCD2FDE00C33B5C /* InviteJoinView.swift in Sources */,
|
30BAB84D2FCD2FDE00C33B5C /* InviteJoinView.swift in Sources */,
|
||||||
30EFF3CF2FDA669800EB35D4 /* MyProfileVC.swift in Sources */,
|
30EFF3CF2FDA669800EB35D4 /* MyProfileVC.swift in Sources */,
|
||||||
|
30CCDE5C2FE3A1A800F5214A /* SOSPracticeView.swift in Sources */,
|
||||||
30EFF3E52FDAA93400EB35D4 /* PrivacyPolicyVC.swift in Sources */,
|
30EFF3E52FDAA93400EB35D4 /* PrivacyPolicyVC.swift in Sources */,
|
||||||
305A76E22FCA8C7000227D26 /* GroupViewModel.swift in Sources */,
|
305A76E22FCA8C7000227D26 /* GroupViewModel.swift in Sources */,
|
||||||
30CCDE4E2FE26CEA00F5214A /* PayResultPopVC.swift in Sources */,
|
30CCDE4E2FE26CEA00F5214A /* PayResultPopVC.swift in Sources */,
|
||||||
|
|
@ -1663,6 +1696,7 @@
|
||||||
30EFF2992FD65FB000EB35D4 /* VoicePlayerManager.swift in Sources */,
|
30EFF2992FD65FB000EB35D4 /* VoicePlayerManager.swift in Sources */,
|
||||||
305A76EA2FCA8C7000227D26 /* OneTapLoginView.swift in Sources */,
|
305A76EA2FCA8C7000227D26 /* OneTapLoginView.swift in Sources */,
|
||||||
305A76EB2FCA8C7000227D26 /* CircleMember.swift in Sources */,
|
305A76EB2FCA8C7000227D26 /* CircleMember.swift in Sources */,
|
||||||
|
30CCDE5A2FE39F9D00F5214A /* SOSViewController.swift in Sources */,
|
||||||
305A76EC2FCA8C7000227D26 /* MemberAnnotation.swift in Sources */,
|
305A76EC2FCA8C7000227D26 /* MemberAnnotation.swift in Sources */,
|
||||||
305A76ED2FCA8C7000227D26 /* MemberAnnotationView.swift in Sources */,
|
305A76ED2FCA8C7000227D26 /* MemberAnnotationView.swift in Sources */,
|
||||||
30BAB8532FCD337C00C33B5C /* GroupService.swift in Sources */,
|
30BAB8532FCD337C00C33B5C /* GroupService.swift in Sources */,
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,13 @@ enum UserAPI {
|
||||||
|
|
||||||
/// 退出登录
|
/// 退出登录
|
||||||
case logout
|
case logout
|
||||||
|
|
||||||
|
/// 发送快捷消息、表情
|
||||||
|
/// - Parameters:
|
||||||
|
/// - target_uid: 对方的user_id
|
||||||
|
/// - group_key:频道的key
|
||||||
|
/// - emote_idx:表情符号的下标
|
||||||
|
case sendEmote(emoteIdx: Int, groupKey: String, targetUid: String)
|
||||||
}
|
}
|
||||||
|
|
||||||
extension UserAPI: MultiTargetProtocol {
|
extension UserAPI: MultiTargetProtocol {
|
||||||
|
|
@ -81,6 +88,8 @@ extension UserAPI: MultiTargetProtocol {
|
||||||
return "mapi/user/account"
|
return "mapi/user/account"
|
||||||
case .logout:
|
case .logout:
|
||||||
return "api/user/logout"
|
return "api/user/logout"
|
||||||
|
case .sendEmote:
|
||||||
|
return "mapi/user/sendemote"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -151,6 +160,13 @@ extension UserAPI: MultiTargetProtocol {
|
||||||
|
|
||||||
case .logout:
|
case .logout:
|
||||||
return .requestParameters(parameters: Parameters(), encoding: JSONEncoding())
|
return .requestParameters(parameters: Parameters(), encoding: JSONEncoding())
|
||||||
|
|
||||||
|
case let .sendEmote(emoteIdx, groupKey, targetUid):
|
||||||
|
var params = Parameters()
|
||||||
|
params["emote_idx"] = emoteIdx
|
||||||
|
params["group_key"] = groupKey
|
||||||
|
params["target_uid"] = targetUid
|
||||||
|
return .requestParameters(parameters: params, encoding: JSONEncoding())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "SOS-1@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "SOS-1@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 172 KiB |
|
After Width: | Height: | Size: 311 KiB |
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "SOS-2@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "SOS-2@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 238 KiB |
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "SOS-3@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "SOS-3@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 279 KiB |
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
},
|
||||||
|
"properties" : {
|
||||||
|
"provides-namespace" : true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "add@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "add@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "sos@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "sos@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 185 KiB |
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Group_1524@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Group_1524@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
|
@ -12,6 +12,7 @@ import ObjectMapper
|
||||||
extension DefaultsKeys {
|
extension DefaultsKeys {
|
||||||
var userConfig: DefaultsKey<Data?> { .init("UserConfig") }
|
var userConfig: DefaultsKey<Data?> { .init("UserConfig") }
|
||||||
var loginToken: DefaultsKey<String?> { .init("LoginToken") }
|
var loginToken: DefaultsKey<String?> { .init("LoginToken") }
|
||||||
|
var sosIsPracticeList: DefaultsKey<[String]> { .init("sosIsPractice", defaultValue: []) }
|
||||||
var searchHistory: DefaultsKey<[String: [String]]?> { .init("searchHistory") }
|
var searchHistory: DefaultsKey<[String: [String]]?> { .init("searchHistory") }
|
||||||
var locationHistory: DefaultsKey<[String: [[String: Any]]]?> { .init("locationHistory") }
|
var locationHistory: DefaultsKey<[String: [[String: Any]]]?> { .init("locationHistory") }
|
||||||
var searchShopHistory: DefaultsKey<[String]> { .init("searchShopHistory", defaultValue: []) }
|
var searchShopHistory: DefaultsKey<[String]> { .init("searchShopHistory", defaultValue: []) }
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,10 @@ class AppContextManager: NSObject {
|
||||||
var vip: Int {
|
var vip: Int {
|
||||||
account?.vip ?? 1
|
account?.vip ?? 1
|
||||||
}
|
}
|
||||||
|
/// 状态:0、无状态 1、SOS 2、气泡等
|
||||||
|
var status: Int {
|
||||||
|
account?.status ?? 0
|
||||||
|
}
|
||||||
|
|
||||||
@discardableResult
|
@discardableResult
|
||||||
public func saveAccount(_ account: UserConfigModel) -> Bool {
|
public func saveAccount(_ account: UserConfigModel) -> Bool {
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,10 @@ struct UserConfigModel: Mappable {
|
||||||
var vip_name: String = ""
|
var vip_name: String = ""
|
||||||
/// 会员过期时间
|
/// 会员过期时间
|
||||||
var vip_expire_time: String = ""
|
var vip_expire_time: String = ""
|
||||||
|
/// 状态:0、无状态 1、SOS 2、气泡等
|
||||||
|
var status: Int = 0
|
||||||
|
/// 心情:0、无状态 1、开心 2、愤怒
|
||||||
|
var mood: Int = 0
|
||||||
/// Config
|
/// Config
|
||||||
var config: SystemConfigModel?
|
var config: SystemConfigModel?
|
||||||
|
|
||||||
|
|
@ -54,6 +57,8 @@ struct UserConfigModel: Mappable {
|
||||||
vip <- map["vip"]
|
vip <- map["vip"]
|
||||||
vip_name <- map["vip_name"]
|
vip_name <- map["vip_name"]
|
||||||
vip_expire_time <- map["vip_expire_time"]
|
vip_expire_time <- map["vip_expire_time"]
|
||||||
|
status <- map["status"]
|
||||||
|
mood <- map["mood"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ enum MqttType: String, Codable {
|
||||||
case leave = "leave" // 离开群
|
case leave = "leave" // 离开群
|
||||||
case dismiss = "dismiss" // 解散群
|
case dismiss = "dismiss" // 解散群
|
||||||
case kick = "kick" // 踢人
|
case kick = "kick" // 踢人
|
||||||
case signIn = "signin" // 签到
|
case signIn = "signIn" // 签到
|
||||||
case sos = "sos" // 求助
|
case sos = "sos" // 求助
|
||||||
case needTrack = "needtrack" // 追踪上报
|
case needTrack = "needtrack" // 追踪上报
|
||||||
case emote = "emote" // 接收表情
|
case emote = "emote" // 接收表情
|
||||||
|
|
@ -65,6 +65,7 @@ struct MqttIncomingData: Decodable {
|
||||||
let battery: String?
|
let battery: String?
|
||||||
let index: Int?
|
let index: Int?
|
||||||
let group_key: String?
|
let group_key: String?
|
||||||
|
let user_id: String?
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - MQTTService
|
// MARK: - MQTTService
|
||||||
|
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"v":"5.12.1","fr":25,"ip":0,"op":110,"w":375,"h":375,"nm":"合成 1","ddd":0,"assets":[{"id":"image_0","w":480,"h":480,"u":"images/","p":"dialog_buy_vip3_img_0.png","e":0},{"id":"image_1","w":192,"h":160,"u":"images/","p":"dialog_buy_vip3_img_1.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"image 112.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[306,117.5,0],"to":[0,0,0],"ti":[117,4,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.462,"s":[226,248,0],"to":[-117,-4,0],"ti":[-39.5,36,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36.923,"s":[125,136,0],"to":[6.063,-5.526,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55.385,"s":[232.5,144,0],"to":[0,0,0],"ti":[140.5,-22,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73.846,"s":[167.5,284,0],"to":[-140.5,22,0],"ti":[-39.436,13.632,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92.308,"s":[73.5,227,0],"to":[40.5,-14,0],"ti":[-22,-19,0]},{"t":110.76953125,"s":[212.5,285.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[243.995,243.45,0],"ix":1,"l":2},"s":{"a":0,"k":[11.792,11.792,100],"ix":6,"l":2}},"ao":1,"ip":0,"op":126,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"图层 30 1.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[195,210.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.445,"s":[195,181.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[195,197.089,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36.892,"s":[195,210.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55.337,"s":[195,181.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73.783,"s":[195,210.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92.229,"s":[195,181.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":110.673828125,"s":[195,210.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[96,80,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":126,"st":0,"bm":0}],"markers":[],"props":{}}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"v":"5.12.1","fr":25,"ip":0,"op":37,"w":375,"h":200,"nm":"合成 1","ddd":0,"assets":[{"id":"image_0","w":69,"h":65,"u":"images/","p":"register_tip1_img_0.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"飞机/注册正式账号_1.psd","cl":"psd","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-15,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.565,"y":0.565},"o":{"x":0.167,"y":0.167},"t":0,"s":[429.5,149,0],"to":[0,0,0],"ti":[88.067,15.427,0]},{"i":{"x":0.681,"y":0.681},"o":{"x":0.328,"y":0.328},"t":12.771,"s":[270.7,73.817,0],"to":[-85.438,-5.2,0],"ti":[41.982,-11.584,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.432,"y":0.432},"t":25.537,"s":[94.263,80.701,0],"to":[-64.13,16.953,0],"ti":[-18.078,5.815,0]},{"t":37.048828125,"s":[-54,127.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[34.5,32.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,-100,100],"ix":6,"l":2}},"ao":1,"ip":0,"op":37,"st":-232,"bm":0}],"markers":[],"props":{}}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"v":"5.12.1","fr":25,"ip":0,"op":38,"w":375,"h":200,"nm":"合成 1","ddd":0,"assets":[{"id":"image_0","w":69,"h":65,"u":"images/","p":"register_tip1_img_0.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"飞机/注册正式账号_1.psd","cl":"psd","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-15,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.562,"y":0.562},"o":{"x":0.167,"y":0.167},"t":0,"s":[-44.5,30,0],"to":[0,0,0],"ti":[-76.433,-21.573,0]},{"i":{"x":0.658,"y":0.658},"o":{"x":0.315,"y":0.315},"t":10.014,"s":[71.45,105.317,0],"to":[32.062,9.05,0],"ti":[-46.518,-1.084,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.415,"y":0.415},"t":18.995,"s":[195.513,124.951,0],"to":[102.87,2.453,0],"ti":[-18.078,5.815,0]},{"t":37.048828125,"s":[448,112.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[34.5,32.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":1,"ip":0,"op":38,"st":-232,"bm":0}],"markers":[],"props":{}}
|
|
||||||
|
Before Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 56 KiB |