@momo-kits/native-kits 0.0.1-beta.3 → 0.0.1-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/example/ios/Example/ComponentModel.swift +9 -2
- package/example/ios/Example/ContentView.swift +0 -14
- package/example/ios/Example/Foundation/ImageDemo.swift +43 -0
- package/example/ios/Example/Foundation/Popup/Popups.swift +2 -52
- package/example/ios/Example/Foundation/PopupDemo.swift +44 -21
- package/example/ios/Example/Foundation/TextInputDemo.swift +36 -0
- package/example/ios/Example/Library/CheckboxDemo.swift +19 -0
- package/example/ios/Example/Library/SwitchDemo.swift +19 -0
- package/example/ios/Example/Main.swift +17 -1
- package/example/ios/Example/Resource/foundation.json +2 -2
- package/example/ios/Example/Resource/library.json +10 -0
- package/example/ios/Example.xcodeproj/project.pbxproj +16 -0
- package/example/ios/Example.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +1 -1
- package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/example/ios/Podfile +2 -1
- package/example/ios/Podfile.lock +22 -3
- package/example/ios/Pods/Local Podspecs/MoMoUIKits.podspec.json +9 -1
- package/example/ios/Pods/Manifest.lock +22 -3
- package/example/ios/Pods/Pods.xcodeproj/project.pbxproj +1547 -161
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImage.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SkeletonUI.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +21 -0
- package/example/ios/Pods/SDWebImage/LICENSE +20 -0
- package/example/ios/Pods/SDWebImage/README.md +352 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.h +340 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.m +172 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h +63 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m +165 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.h +67 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m +120 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h +114 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m +392 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.h +112 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.m +420 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h +23 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m +133 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.h +168 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.m +79 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.h +110 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m +540 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.h +145 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m +326 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.h +73 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.m +256 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h +19 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m +58 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.h +23 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.m +98 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h +450 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m +1030 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h +153 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.m +68 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h +156 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m +138 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.h +81 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.m +556 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.h +297 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.m +26 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h +153 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m +822 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.h +58 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.m +130 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.h +36 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.m +28 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.h +22 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m +58 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.h +28 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.m +127 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.h +25 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.m +101 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h +58 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m +807 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.h +30 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m +420 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.h +146 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m +170 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.h +40 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.m +123 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.h +241 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.m +331 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.h +78 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.m +158 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h +32 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.m +39 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h +36 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.m +39 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.h +95 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.m +17 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h +352 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m +149 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h +314 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m +658 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h +113 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m +60 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.h +49 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.m +55 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h +191 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m +722 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h +69 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m +71 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h +69 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.m +73 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h +32 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m +16 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.h +115 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.m +275 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.h +290 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m +775 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h +27 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.m +14 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h +72 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.m +59 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h +143 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.m +303 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.h +131 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.m +194 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.h +387 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.m +234 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.h +24 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.m +23 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h +46 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m +60 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.h +26 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.m +22 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h +27 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m +47 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h +89 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m +221 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h +80 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.m +47 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.h +146 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m +824 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h +129 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.m +76 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.h +194 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.m +67 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h +110 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m +446 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h +48 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m +82 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h +24 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.m +42 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.h +14 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m +29 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h +21 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.m +92 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.h +18 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.m +32 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.h +29 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.m +227 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.h +19 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.m +127 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.h +23 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.m +164 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h +21 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.m +83 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h +39 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.h +122 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.m +13 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.h +20 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.m +79 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWebImageTransitionInternal.h +19 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDmetamacros.h +667 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.h +18 -0
- package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.m +42 -0
- package/example/ios/Pods/SDWebImage/WebImage/SDWebImage.h +89 -0
- package/example/ios/Pods/SDWebImageSwiftUI/LICENSE +19 -0
- package/example/ios/Pods/SDWebImageSwiftUI/README.md +690 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/AnimatedImage.swift +870 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Backport.swift +59 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/OnChange.swift +52 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Overlay.swift +124 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/StateObject.swift +151 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Image.swift +78 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageManager.swift +132 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImagePlayer.swift +122 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift +133 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ActivityIndicator.swift +82 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift +97 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ProgressIndicator.swift +114 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SDWebImageSwiftUI.swift +64 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SwiftUICompatibility.swift +92 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Transition/Transition.swift +93 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/WebImage.swift +509 -0
- package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Module/SDWebImageSwiftUI.h +15 -0
- package/example/ios/Pods/SkeletonUI/LICENSE +21 -0
- package/example/ios/Pods/SkeletonUI/README.md +137 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AngleInteractor.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AnglePresenter.swift +7 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Animation/AnimationInteractor.swift +56 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearanceInteractor.swift +58 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearancePresenter.swift +5 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ClosedRange+Normalize.swift +16 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Image+OptionalType.swift +102 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ModifiedContent+SkeletonModifier.swift +26 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Optional+OptionalType.swift +5 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/SecureField+OptionalType.swift +19 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Text+OptionalType.swift +27 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/TextField+OptionalType.swift +35 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Toggle+OptionalType.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/UnitPoint+Angle.swift +8 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/View+SkeletonModifier.swift +8 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Modifiers/SkeletonModifier.swift +52 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilineInteractor.swift +41 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilinePresenter.swift +9 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityInteractor.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityPresenter.swift +7 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionInteractor.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionPresenter.swift +7 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Protocols/OptionalType.swift +4 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusInteractor.swift +29 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusPresenter.swift +7 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapeInteractor.swift +33 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapePresenter.swift +5 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonForEach.swift +20 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonInteractor.swift +27 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonList.swift +20 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonPresenter.swift +15 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonShape.swift +64 -0
- package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonView.swift +25 -0
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.debug.xcconfig +4 -1
- package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.release.xcconfig +4 -1
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.markdown +72 -0
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.plist +90 -0
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.debug.xcconfig +6 -5
- package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.release.xcconfig +6 -5
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m +5 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch +12 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h +75 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig +14 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap +6 -0
- package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig +14 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-dummy.m +5 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-prefix.pch +12 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-umbrella.h +17 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.debug.xcconfig +17 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.modulemap +6 -0
- package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.release.xcconfig +17 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-dummy.m +5 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-prefix.pch +12 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-umbrella.h +16 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.debug.xcconfig +12 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.modulemap +6 -0
- package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.release.xcconfig +12 -0
- package/ios/Checkbox/Checkbox.swift +38 -0
- package/ios/{Colors+Spacing → Colors+Radius+Spacing}/Colors.swift +0 -0
- package/ios/Colors+Radius+Spacing/Radius.swift +22 -0
- package/ios/{Colors+Spacing → Colors+Radius+Spacing}/Spacing.swift +0 -0
- package/ios/Extensions/View++.swift +9 -0
- package/ios/Image/Image.swift +60 -0
- package/ios/Input/Input.swift +148 -0
- package/ios/OTPKeyboard/OTPKeyboard.swift +3 -3
- package/ios/Popup/PopupDisplay.swift +178 -0
- package/ios/PopupView/FullscreenPopup.swift +251 -0
- package/ios/{Popup → PopupView}/Modifiers.swift +6 -20
- package/ios/{Popup → PopupView}/PopupView.swift +38 -146
- package/ios/PopupView/Utils++.swift +281 -0
- package/ios/Swipeable/SwipeCell.swift +1 -1
- package/ios/Switch/Switch.swift +44 -0
- package/ios/native-kits.podspec +2 -0
- package/package.json +1 -1
- package/ios/Colors+Spacing/Radius.swift +0 -11
- package/ios/Popup/Utils.swift +0 -186
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the SDWebImage package.
|
|
3
|
+
* (c) Olivier Poitrey <rs@dailymotion.com>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#import "SDAnimatedImage.h"
|
|
10
|
+
#import "NSImage+Compatibility.h"
|
|
11
|
+
#import "SDImageCoder.h"
|
|
12
|
+
#import "SDImageCodersManager.h"
|
|
13
|
+
#import "SDImageFrame.h"
|
|
14
|
+
#import "UIImage+MemoryCacheCost.h"
|
|
15
|
+
#import "UIImage+Metadata.h"
|
|
16
|
+
#import "UIImage+MultiFormat.h"
|
|
17
|
+
#import "SDImageCoderHelper.h"
|
|
18
|
+
#import "SDImageAssetManager.h"
|
|
19
|
+
#import "objc/runtime.h"
|
|
20
|
+
|
|
21
|
+
static CGFloat SDImageScaleFromPath(NSString *string) {
|
|
22
|
+
if (string.length == 0 || [string hasSuffix:@"/"]) return 1;
|
|
23
|
+
NSString *name = string.stringByDeletingPathExtension;
|
|
24
|
+
__block CGFloat scale = 1;
|
|
25
|
+
|
|
26
|
+
NSRegularExpression *pattern = [NSRegularExpression regularExpressionWithPattern:@"@[0-9]+\\.?[0-9]*x$" options:NSRegularExpressionAnchorsMatchLines error:nil];
|
|
27
|
+
[pattern enumerateMatchesInString:name options:kNilOptions range:NSMakeRange(0, name.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
|
|
28
|
+
scale = [string substringWithRange:NSMakeRange(result.range.location + 1, result.range.length - 2)].doubleValue;
|
|
29
|
+
}];
|
|
30
|
+
|
|
31
|
+
return scale;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@interface SDAnimatedImage ()
|
|
35
|
+
|
|
36
|
+
@property (nonatomic, strong) id<SDAnimatedImageCoder> animatedCoder;
|
|
37
|
+
@property (nonatomic, assign, readwrite) SDImageFormat animatedImageFormat;
|
|
38
|
+
@property (atomic, copy) NSArray<SDImageFrame *> *loadedAnimatedImageFrames; // Mark as atomic to keep thread-safe
|
|
39
|
+
@property (nonatomic, assign, getter=isAllFramesLoaded) BOOL allFramesLoaded;
|
|
40
|
+
|
|
41
|
+
@end
|
|
42
|
+
|
|
43
|
+
@implementation SDAnimatedImage
|
|
44
|
+
@dynamic scale; // call super
|
|
45
|
+
|
|
46
|
+
#pragma mark - UIImage override method
|
|
47
|
+
+ (instancetype)imageNamed:(NSString *)name {
|
|
48
|
+
#if __has_include(<UIKit/UITraitCollection.h>)
|
|
49
|
+
return [self imageNamed:name inBundle:nil compatibleWithTraitCollection:nil];
|
|
50
|
+
#else
|
|
51
|
+
return [self imageNamed:name inBundle:nil];
|
|
52
|
+
#endif
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#if __has_include(<UIKit/UITraitCollection.h>)
|
|
56
|
+
+ (instancetype)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle compatibleWithTraitCollection:(UITraitCollection *)traitCollection {
|
|
57
|
+
if (!traitCollection) {
|
|
58
|
+
traitCollection = UIScreen.mainScreen.traitCollection;
|
|
59
|
+
}
|
|
60
|
+
CGFloat scale = traitCollection.displayScale;
|
|
61
|
+
return [self imageNamed:name inBundle:bundle scale:scale];
|
|
62
|
+
}
|
|
63
|
+
#else
|
|
64
|
+
+ (instancetype)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle {
|
|
65
|
+
return [self imageNamed:name inBundle:bundle scale:0];
|
|
66
|
+
}
|
|
67
|
+
#endif
|
|
68
|
+
|
|
69
|
+
// 0 scale means automatically check
|
|
70
|
+
+ (instancetype)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle scale:(CGFloat)scale {
|
|
71
|
+
if (!name) {
|
|
72
|
+
return nil;
|
|
73
|
+
}
|
|
74
|
+
if (!bundle) {
|
|
75
|
+
bundle = [NSBundle mainBundle];
|
|
76
|
+
}
|
|
77
|
+
SDImageAssetManager *assetManager = [SDImageAssetManager sharedAssetManager];
|
|
78
|
+
SDAnimatedImage *image = (SDAnimatedImage *)[assetManager imageForName:name];
|
|
79
|
+
if ([image isKindOfClass:[SDAnimatedImage class]]) {
|
|
80
|
+
return image;
|
|
81
|
+
}
|
|
82
|
+
NSString *path = [assetManager getPathForName:name bundle:bundle preferredScale:&scale];
|
|
83
|
+
if (!path) {
|
|
84
|
+
return image;
|
|
85
|
+
}
|
|
86
|
+
NSData *data = [NSData dataWithContentsOfFile:path];
|
|
87
|
+
if (!data) {
|
|
88
|
+
return image;
|
|
89
|
+
}
|
|
90
|
+
image = [[self alloc] initWithData:data scale:scale];
|
|
91
|
+
if (image) {
|
|
92
|
+
[assetManager storeImage:image forName:name];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return image;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
+ (instancetype)imageWithContentsOfFile:(NSString *)path {
|
|
99
|
+
return [[self alloc] initWithContentsOfFile:path];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
+ (instancetype)imageWithData:(NSData *)data {
|
|
103
|
+
return [[self alloc] initWithData:data];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
+ (instancetype)imageWithData:(NSData *)data scale:(CGFloat)scale {
|
|
107
|
+
return [[self alloc] initWithData:data scale:scale];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
- (instancetype)initWithContentsOfFile:(NSString *)path {
|
|
111
|
+
NSData *data = [NSData dataWithContentsOfFile:path];
|
|
112
|
+
return [self initWithData:data scale:SDImageScaleFromPath(path)];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
- (instancetype)initWithData:(NSData *)data {
|
|
116
|
+
return [self initWithData:data scale:1];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
- (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale {
|
|
120
|
+
return [self initWithData:data scale:scale options:nil];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
- (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale options:(SDImageCoderOptions *)options {
|
|
124
|
+
if (!data || data.length == 0) {
|
|
125
|
+
return nil;
|
|
126
|
+
}
|
|
127
|
+
data = [data copy]; // avoid mutable data
|
|
128
|
+
id<SDAnimatedImageCoder> animatedCoder = nil;
|
|
129
|
+
for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) {
|
|
130
|
+
if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) {
|
|
131
|
+
if ([coder canDecodeFromData:data]) {
|
|
132
|
+
if (!options) {
|
|
133
|
+
options = @{SDImageCoderDecodeScaleFactor : @(scale)};
|
|
134
|
+
}
|
|
135
|
+
animatedCoder = [[[coder class] alloc] initWithAnimatedImageData:data options:options];
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (!animatedCoder) {
|
|
141
|
+
return nil;
|
|
142
|
+
}
|
|
143
|
+
return [self initWithAnimatedCoder:animatedCoder scale:scale];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
- (instancetype)initWithAnimatedCoder:(id<SDAnimatedImageCoder>)animatedCoder scale:(CGFloat)scale {
|
|
147
|
+
if (!animatedCoder) {
|
|
148
|
+
return nil;
|
|
149
|
+
}
|
|
150
|
+
UIImage *image = [animatedCoder animatedImageFrameAtIndex:0];
|
|
151
|
+
if (!image) {
|
|
152
|
+
return nil;
|
|
153
|
+
}
|
|
154
|
+
#if SD_MAC
|
|
155
|
+
self = [super initWithCGImage:image.CGImage scale:MAX(scale, 1) orientation:kCGImagePropertyOrientationUp];
|
|
156
|
+
#else
|
|
157
|
+
self = [super initWithCGImage:image.CGImage scale:MAX(scale, 1) orientation:image.imageOrientation];
|
|
158
|
+
#endif
|
|
159
|
+
if (self) {
|
|
160
|
+
// Only keep the animated coder if frame count > 1, save RAM usage for non-animated image format (APNG/WebP)
|
|
161
|
+
if (animatedCoder.animatedImageFrameCount > 1) {
|
|
162
|
+
_animatedCoder = animatedCoder;
|
|
163
|
+
}
|
|
164
|
+
NSData *data = [animatedCoder animatedImageData];
|
|
165
|
+
SDImageFormat format = [NSData sd_imageFormatForImageData:data];
|
|
166
|
+
_animatedImageFormat = format;
|
|
167
|
+
}
|
|
168
|
+
return self;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
#pragma mark - Preload
|
|
172
|
+
- (void)preloadAllFrames {
|
|
173
|
+
if (!_animatedCoder) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (!self.isAllFramesLoaded) {
|
|
177
|
+
NSMutableArray<SDImageFrame *> *frames = [NSMutableArray arrayWithCapacity:self.animatedImageFrameCount];
|
|
178
|
+
for (size_t i = 0; i < self.animatedImageFrameCount; i++) {
|
|
179
|
+
UIImage *image = [self animatedImageFrameAtIndex:i];
|
|
180
|
+
NSTimeInterval duration = [self animatedImageDurationAtIndex:i];
|
|
181
|
+
SDImageFrame *frame = [SDImageFrame frameWithImage:image duration:duration]; // through the image should be nonnull, used as nullable for `animatedImageFrameAtIndex:`
|
|
182
|
+
[frames addObject:frame];
|
|
183
|
+
}
|
|
184
|
+
self.loadedAnimatedImageFrames = frames;
|
|
185
|
+
self.allFramesLoaded = YES;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
- (void)unloadAllFrames {
|
|
190
|
+
if (!_animatedCoder) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (self.isAllFramesLoaded) {
|
|
194
|
+
self.loadedAnimatedImageFrames = nil;
|
|
195
|
+
self.allFramesLoaded = NO;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
#pragma mark - NSSecureCoding
|
|
200
|
+
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
|
|
201
|
+
self = [super initWithCoder:aDecoder];
|
|
202
|
+
if (self) {
|
|
203
|
+
_animatedImageFormat = [aDecoder decodeIntegerForKey:NSStringFromSelector(@selector(animatedImageFormat))];
|
|
204
|
+
NSData *animatedImageData = [aDecoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(animatedImageData))];
|
|
205
|
+
if (!animatedImageData) {
|
|
206
|
+
return self;
|
|
207
|
+
}
|
|
208
|
+
CGFloat scale = self.scale;
|
|
209
|
+
id<SDAnimatedImageCoder> animatedCoder = nil;
|
|
210
|
+
for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) {
|
|
211
|
+
if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) {
|
|
212
|
+
if ([coder canDecodeFromData:animatedImageData]) {
|
|
213
|
+
animatedCoder = [[[coder class] alloc] initWithAnimatedImageData:animatedImageData options:@{SDImageCoderDecodeScaleFactor : @(scale)}];
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (!animatedCoder) {
|
|
219
|
+
return self;
|
|
220
|
+
}
|
|
221
|
+
if (animatedCoder.animatedImageFrameCount > 1) {
|
|
222
|
+
_animatedCoder = animatedCoder;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return self;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
- (void)encodeWithCoder:(NSCoder *)aCoder {
|
|
229
|
+
[super encodeWithCoder:aCoder];
|
|
230
|
+
[aCoder encodeInteger:self.animatedImageFormat forKey:NSStringFromSelector(@selector(animatedImageFormat))];
|
|
231
|
+
NSData *animatedImageData = self.animatedImageData;
|
|
232
|
+
if (animatedImageData) {
|
|
233
|
+
[aCoder encodeObject:animatedImageData forKey:NSStringFromSelector(@selector(animatedImageData))];
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
+ (BOOL)supportsSecureCoding {
|
|
238
|
+
return YES;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
#pragma mark - SDAnimatedImageProvider
|
|
242
|
+
|
|
243
|
+
- (NSData *)animatedImageData {
|
|
244
|
+
return [self.animatedCoder animatedImageData];
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
- (NSUInteger)animatedImageLoopCount {
|
|
248
|
+
return [self.animatedCoder animatedImageLoopCount];
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
- (NSUInteger)animatedImageFrameCount {
|
|
252
|
+
return [self.animatedCoder animatedImageFrameCount];
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
- (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index {
|
|
256
|
+
if (index >= self.animatedImageFrameCount) {
|
|
257
|
+
return nil;
|
|
258
|
+
}
|
|
259
|
+
if (self.isAllFramesLoaded) {
|
|
260
|
+
SDImageFrame *frame = [self.loadedAnimatedImageFrames objectAtIndex:index];
|
|
261
|
+
return frame.image;
|
|
262
|
+
}
|
|
263
|
+
return [self.animatedCoder animatedImageFrameAtIndex:index];
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
- (NSTimeInterval)animatedImageDurationAtIndex:(NSUInteger)index {
|
|
267
|
+
if (index >= self.animatedImageFrameCount) {
|
|
268
|
+
return 0;
|
|
269
|
+
}
|
|
270
|
+
if (self.isAllFramesLoaded) {
|
|
271
|
+
SDImageFrame *frame = [self.loadedAnimatedImageFrames objectAtIndex:index];
|
|
272
|
+
return frame.duration;
|
|
273
|
+
}
|
|
274
|
+
return [self.animatedCoder animatedImageDurationAtIndex:index];
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
@end
|
|
278
|
+
|
|
279
|
+
@implementation SDAnimatedImage (MemoryCacheCost)
|
|
280
|
+
|
|
281
|
+
- (NSUInteger)sd_memoryCost {
|
|
282
|
+
NSNumber *value = objc_getAssociatedObject(self, @selector(sd_memoryCost));
|
|
283
|
+
if (value != nil) {
|
|
284
|
+
return value.unsignedIntegerValue;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
CGImageRef imageRef = self.CGImage;
|
|
288
|
+
if (!imageRef) {
|
|
289
|
+
return 0;
|
|
290
|
+
}
|
|
291
|
+
NSUInteger bytesPerFrame = CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef);
|
|
292
|
+
NSUInteger frameCount = 1;
|
|
293
|
+
if (self.isAllFramesLoaded) {
|
|
294
|
+
frameCount = self.animatedImageFrameCount;
|
|
295
|
+
}
|
|
296
|
+
frameCount = frameCount > 0 ? frameCount : 1;
|
|
297
|
+
NSUInteger cost = bytesPerFrame * frameCount;
|
|
298
|
+
return cost;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
@end
|
|
302
|
+
|
|
303
|
+
@implementation SDAnimatedImage (Metadata)
|
|
304
|
+
|
|
305
|
+
- (BOOL)sd_isAnimated {
|
|
306
|
+
return YES;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
- (NSUInteger)sd_imageLoopCount {
|
|
310
|
+
return self.animatedImageLoopCount;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
- (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
- (NSUInteger)sd_imageFrameCount {
|
|
318
|
+
return self.animatedImageFrameCount;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
- (SDImageFormat)sd_imageFormat {
|
|
322
|
+
return self.animatedImageFormat;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
- (void)setSd_imageFormat:(SDImageFormat)sd_imageFormat {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
- (BOOL)sd_isVector {
|
|
330
|
+
return NO;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
@end
|
|
334
|
+
|
|
335
|
+
@implementation SDAnimatedImage (MultiFormat)
|
|
336
|
+
|
|
337
|
+
+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data {
|
|
338
|
+
return [self sd_imageWithData:data scale:1];
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale {
|
|
342
|
+
return [self sd_imageWithData:data scale:scale firstFrameOnly:NO];
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale firstFrameOnly:(BOOL)firstFrameOnly {
|
|
346
|
+
if (!data) {
|
|
347
|
+
return nil;
|
|
348
|
+
}
|
|
349
|
+
return [[self alloc] initWithData:data scale:scale options:@{SDImageCoderDecodeFirstFrameOnly : @(firstFrameOnly)}];
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
- (nullable NSData *)sd_imageData {
|
|
353
|
+
NSData *imageData = self.animatedImageData;
|
|
354
|
+
if (imageData) {
|
|
355
|
+
return imageData;
|
|
356
|
+
} else {
|
|
357
|
+
return [self sd_imageDataAsFormat:self.animatedImageFormat];
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat {
|
|
362
|
+
return [self sd_imageDataAsFormat:imageFormat compressionQuality:1];
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality {
|
|
366
|
+
return [self sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:NO];
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality firstFrameOnly:(BOOL)firstFrameOnly {
|
|
370
|
+
if (firstFrameOnly) {
|
|
371
|
+
// First frame, use super implementation
|
|
372
|
+
return [super sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:firstFrameOnly];
|
|
373
|
+
}
|
|
374
|
+
NSUInteger frameCount = self.animatedImageFrameCount;
|
|
375
|
+
if (frameCount <= 1) {
|
|
376
|
+
// Static image, use super implementation
|
|
377
|
+
return [super sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:firstFrameOnly];
|
|
378
|
+
}
|
|
379
|
+
// Keep animated image encoding, loop each frame.
|
|
380
|
+
NSMutableArray<SDImageFrame *> *frames = [NSMutableArray arrayWithCapacity:frameCount];
|
|
381
|
+
for (size_t i = 0; i < frameCount; i++) {
|
|
382
|
+
UIImage *image = [self animatedImageFrameAtIndex:i];
|
|
383
|
+
NSTimeInterval duration = [self animatedImageDurationAtIndex:i];
|
|
384
|
+
SDImageFrame *frame = [SDImageFrame frameWithImage:image duration:duration];
|
|
385
|
+
[frames addObject:frame];
|
|
386
|
+
}
|
|
387
|
+
UIImage *animatedImage = [SDImageCoderHelper animatedImageWithFrames:frames];
|
|
388
|
+
NSData *imageData = [animatedImage sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:firstFrameOnly];
|
|
389
|
+
return imageData;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
@end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the SDWebImage package.
|
|
3
|
+
* (c) Olivier Poitrey <rs@dailymotion.com>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#import <Foundation/Foundation.h>
|
|
10
|
+
#import "SDWebImageCompat.h"
|
|
11
|
+
#import "SDImageCoder.h"
|
|
12
|
+
|
|
13
|
+
typedef NS_ENUM(NSUInteger, SDAnimatedImagePlaybackMode) {
|
|
14
|
+
/**
|
|
15
|
+
* From first to last frame and stop or next loop.
|
|
16
|
+
*/
|
|
17
|
+
SDAnimatedImagePlaybackModeNormal = 0,
|
|
18
|
+
/**
|
|
19
|
+
* From last frame to first frame and stop or next loop.
|
|
20
|
+
*/
|
|
21
|
+
SDAnimatedImagePlaybackModeReverse,
|
|
22
|
+
/**
|
|
23
|
+
* From first frame to last frame and reverse again, like reciprocating.
|
|
24
|
+
*/
|
|
25
|
+
SDAnimatedImagePlaybackModeBounce,
|
|
26
|
+
/**
|
|
27
|
+
* From last frame to first frame and reverse again, like reversed reciprocating.
|
|
28
|
+
*/
|
|
29
|
+
SDAnimatedImagePlaybackModeReversedBounce,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/// A player to control the playback of animated image, which can be used to drive Animated ImageView or any rendering usage, like CALayer/WatchKit/SwiftUI rendering.
|
|
33
|
+
@interface SDAnimatedImagePlayer : NSObject
|
|
34
|
+
|
|
35
|
+
/// Current playing frame image. This value is KVO Compliance.
|
|
36
|
+
@property (nonatomic, readonly, nullable) UIImage *currentFrame;
|
|
37
|
+
|
|
38
|
+
/// Current frame index, zero based. This value is KVO Compliance.
|
|
39
|
+
@property (nonatomic, readonly) NSUInteger currentFrameIndex;
|
|
40
|
+
|
|
41
|
+
/// Current loop count since its latest animating. This value is KVO Compliance.
|
|
42
|
+
@property (nonatomic, readonly) NSUInteger currentLoopCount;
|
|
43
|
+
|
|
44
|
+
/// Total frame count for animated image rendering. Defaults is animated image's frame count.
|
|
45
|
+
/// @note For progressive animation, you can update this value when your provider receive more frames.
|
|
46
|
+
@property (nonatomic, assign) NSUInteger totalFrameCount;
|
|
47
|
+
|
|
48
|
+
/// Total loop count for animated image rendering. Default is animated image's loop count.
|
|
49
|
+
@property (nonatomic, assign) NSUInteger totalLoopCount;
|
|
50
|
+
|
|
51
|
+
/// The animation playback rate. Default is 1.0
|
|
52
|
+
/// `1.0` means the normal speed.
|
|
53
|
+
/// `0.0` means stopping the animation.
|
|
54
|
+
/// `0.0-1.0` means the slow speed.
|
|
55
|
+
/// `> 1.0` means the fast speed.
|
|
56
|
+
/// `< 0.0` is not supported currently and stop animation. (may support reverse playback in the future)
|
|
57
|
+
@property (nonatomic, assign) double playbackRate;
|
|
58
|
+
|
|
59
|
+
/// Asynchronous setup animation playback mode. Default mode is SDAnimatedImagePlaybackModeNormal.
|
|
60
|
+
@property (nonatomic, assign) SDAnimatedImagePlaybackMode playbackMode;
|
|
61
|
+
|
|
62
|
+
/// Provide a max buffer size by bytes. This is used to adjust frame buffer count and can be useful when the decoding cost is expensive (such as Animated WebP software decoding). Default is 0.
|
|
63
|
+
/// `0` means automatically adjust by calculating current memory usage.
|
|
64
|
+
/// `1` means without any buffer cache, each of frames will be decoded and then be freed after rendering. (Lowest Memory and Highest CPU)
|
|
65
|
+
/// `NSUIntegerMax` means cache all the buffer. (Lowest CPU and Highest Memory)
|
|
66
|
+
@property (nonatomic, assign) NSUInteger maxBufferSize;
|
|
67
|
+
|
|
68
|
+
/// You can specify a runloop mode to let it rendering.
|
|
69
|
+
/// Default is NSRunLoopCommonModes on multi-core device, NSDefaultRunLoopMode on single-core device
|
|
70
|
+
@property (nonatomic, copy, nonnull) NSRunLoopMode runLoopMode;
|
|
71
|
+
|
|
72
|
+
/// Create a player with animated image provider. If the provider's `animatedImageFrameCount` is less than 1, returns nil.
|
|
73
|
+
/// The provider can be any protocol implementation, like `SDAnimatedImage`, `SDImageGIFCoder`, etc.
|
|
74
|
+
/// @note This provider can represent mutable content, like progressive animated loading. But you need to update the frame count by yourself
|
|
75
|
+
/// @param provider The animated provider
|
|
76
|
+
- (nullable instancetype)initWithProvider:(nonnull id<SDAnimatedImageProvider>)provider;
|
|
77
|
+
|
|
78
|
+
/// Create a player with animated image provider. If the provider's `animatedImageFrameCount` is less than 1, returns nil.
|
|
79
|
+
/// The provider can be any protocol implementation, like `SDAnimatedImage` or `SDImageGIFCoder`, etc.
|
|
80
|
+
/// @note This provider can represent mutable content, like progressive animated loading. But you need to update the frame count by yourself
|
|
81
|
+
/// @param provider The animated provider
|
|
82
|
+
+ (nullable instancetype)playerWithProvider:(nonnull id<SDAnimatedImageProvider>)provider;
|
|
83
|
+
|
|
84
|
+
/// The handler block when current frame and index changed.
|
|
85
|
+
@property (nonatomic, copy, nullable) void (^animationFrameHandler)(NSUInteger index, UIImage * _Nonnull frame);
|
|
86
|
+
|
|
87
|
+
/// The handler block when one loop count finished.
|
|
88
|
+
@property (nonatomic, copy, nullable) void (^animationLoopHandler)(NSUInteger loopCount);
|
|
89
|
+
|
|
90
|
+
/// Return the status whether animation is playing.
|
|
91
|
+
@property (nonatomic, readonly) BOOL isPlaying;
|
|
92
|
+
|
|
93
|
+
/// Start the animation. Or resume the previously paused animation.
|
|
94
|
+
- (void)startPlaying;
|
|
95
|
+
|
|
96
|
+
/// Pause the animation. Keep the current frame index and loop count.
|
|
97
|
+
- (void)pausePlaying;
|
|
98
|
+
|
|
99
|
+
/// Stop the animation. Reset the current frame index and loop count.
|
|
100
|
+
- (void)stopPlaying;
|
|
101
|
+
|
|
102
|
+
/// Seek to the desired frame index and loop count.
|
|
103
|
+
/// @note This can be used for advanced control like progressive loading, or skipping specify frames.
|
|
104
|
+
/// @param index The frame index
|
|
105
|
+
/// @param loopCount The loop count
|
|
106
|
+
- (void)seekToFrameAtIndex:(NSUInteger)index loopCount:(NSUInteger)loopCount;
|
|
107
|
+
|
|
108
|
+
/// Clear the frame cache buffer. The frame cache buffer size can be controlled by `maxBufferSize`.
|
|
109
|
+
/// By default, when stop or pause the animation, the frame buffer is still kept to ready for the next restart
|
|
110
|
+
- (void)clearFrameBuffer;
|
|
111
|
+
|
|
112
|
+
@end
|