├── README.md ├── Pods ├── Headers │ ├── Public │ │ ├── HandyJSON │ │ │ ├── HandyJSON.h │ │ │ ├── HandyJSON.modulemap │ │ │ └── HandyJSON-umbrella.h │ │ ├── SDWebImage │ │ │ ├── SDWebImage.h │ │ │ ├── SDDiskCache.h │ │ │ ├── UIImage+GIF.h │ │ │ ├── SDImageCache.h │ │ │ ├── SDImageCoder.h │ │ │ ├── SDImageFrame.h │ │ │ ├── SDImageLoader.h │ │ │ ├── SDMemoryCache.h │ │ │ ├── SDAnimatedImage.h │ │ │ ├── SDImageAPNGCoder.h │ │ │ ├── SDImageGIFCoder.h │ │ │ ├── SDImageGraphics.h │ │ │ ├── SDImageHEICCoder.h │ │ │ ├── SDImageIOCoder.h │ │ │ ├── SDWebImageCompat.h │ │ │ ├── SDWebImageDefine.h │ │ │ ├── SDWebImageError.h │ │ │ ├── UIImage+Metadata.h │ │ │ ├── UIView+WebCache.h │ │ │ ├── NSButton+WebCache.h │ │ │ ├── SDAnimatedImageRep.h │ │ │ ├── SDImageAWebPCoder.h │ │ │ ├── SDImageCacheConfig.h │ │ │ ├── SDImageCacheDefine.h │ │ │ ├── SDImageCoderHelper.h │ │ │ ├── SDImageTransformer.h │ │ │ ├── SDWebImageManager.h │ │ │ ├── UIButton+WebCache.h │ │ │ ├── UIImage+Transform.h │ │ │ ├── NSImage+Compatibility.h │ │ │ ├── SDAnimatedImagePlayer.h │ │ │ ├── SDAnimatedImageView.h │ │ │ ├── SDImageCachesManager.h │ │ │ ├── SDImageCodersManager.h │ │ │ ├── SDImageLoadersManager.h │ │ │ ├── SDWebImageDownloader.h │ │ │ ├── SDWebImageIndicator.h │ │ │ ├── SDWebImageOperation.h │ │ │ ├── SDWebImagePrefetcher.h │ │ │ ├── SDWebImageTransition.h │ │ │ ├── UIImage+ForceDecode.h │ │ │ ├── UIImage+MultiFormat.h │ │ │ ├── UIImageView+WebCache.h │ │ │ ├── NSData+ImageContentType.h │ │ │ ├── SDGraphicsImageRenderer.h │ │ │ ├── SDImageIOAnimatedCoder.h │ │ │ ├── UIImage+MemoryCacheCost.h │ │ │ ├── SDWebImageCacheKeyFilter.h │ │ │ ├── SDWebImageCacheSerializer.h │ │ │ ├── SDWebImageDownloaderConfig.h │ │ │ ├── SDWebImageOptionsProcessor.h │ │ │ ├── UIImage+ExtendedCacheData.h │ │ │ ├── UIView+WebCacheOperation.h │ │ │ ├── SDAnimatedImageView+WebCache.h │ │ │ ├── SDWebImageDownloaderDecryptor.h │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ ├── SDWebImageDownloaderRequestModifier.h │ │ │ └── SDWebImageDownloaderResponseModifier.h │ │ ├── SnapKit │ │ │ ├── SnapKit-umbrella.h │ │ │ └── SnapKit.modulemap │ │ └── Lottie │ │ │ ├── lottie-ios.modulemap │ │ │ └── lottie-ios-umbrella.h │ └── Private │ │ ├── HandyJSON │ │ └── HandyJSON.h │ │ └── SDWebImage │ │ ├── SDWebImage.h │ │ ├── SDDiskCache.h │ │ ├── SDImageCache.h │ │ ├── SDImageCoder.h │ │ ├── SDImageFrame.h │ │ ├── SDImageLoader.h │ │ ├── SDMemoryCache.h │ │ ├── SDWeakProxy.h │ │ ├── UIImage+GIF.h │ │ ├── SDAnimatedImage.h │ │ ├── SDDeviceHelper.h │ │ ├── SDDisplayLink.h │ │ ├── SDImageGIFCoder.h │ │ ├── SDImageGraphics.h │ │ ├── SDImageIOCoder.h │ │ ├── SDWebImageError.h │ │ ├── SDmetamacros.h │ │ ├── UIView+WebCache.h │ │ ├── NSButton+WebCache.h │ │ ├── SDAnimatedImageRep.h │ │ ├── SDImageAPNGCoder.h │ │ ├── SDImageAWebPCoder.h │ │ ├── SDImageCacheConfig.h │ │ ├── SDImageCacheDefine.h │ │ ├── SDImageCoderHelper.h │ │ ├── SDImageHEICCoder.h │ │ ├── SDImageTransformer.h │ │ ├── SDInternalMacros.h │ │ ├── SDWebImageCompat.h │ │ ├── SDWebImageDefine.h │ │ ├── SDWebImageManager.h │ │ ├── UIButton+WebCache.h │ │ ├── UIImage+Metadata.h │ │ ├── UIImage+Transform.h │ │ ├── SDAnimatedImageView.h │ │ ├── SDAssociatedObject.h │ │ ├── SDImageAssetManager.h │ │ ├── SDImageCachesManager.h │ │ ├── SDImageCodersManager.h │ │ ├── SDWebImageDownloader.h │ │ ├── SDWebImageIndicator.h │ │ ├── SDWebImageOperation.h │ │ ├── SDWebImagePrefetcher.h │ │ ├── SDWebImageTransition.h │ │ ├── UIColor+SDHexString.h │ │ ├── UIImage+ForceDecode.h │ │ ├── UIImage+MultiFormat.h │ │ ├── UIImageView+WebCache.h │ │ ├── NSData+ImageContentType.h │ │ ├── NSImage+Compatibility.h │ │ ├── SDAnimatedImagePlayer.h │ │ ├── SDAsyncBlockOperation.h │ │ ├── SDFileAttributeHelper.h │ │ ├── SDGraphicsImageRenderer.h │ │ ├── SDImageIOAnimatedCoder.h │ │ ├── SDImageLoadersManager.h │ │ ├── UIImage+MemoryCacheCost.h │ │ ├── SDWebImageCacheKeyFilter.h │ │ ├── SDWebImageCacheSerializer.h │ │ ├── UIImage+ExtendedCacheData.h │ │ ├── UIView+WebCacheOperation.h │ │ ├── SDAnimatedImageView+WebCache.h │ │ ├── SDWebImageDownloaderConfig.h │ │ ├── SDWebImageOptionsProcessor.h │ │ ├── NSBezierPath+SDRoundedCorners.h │ │ ├── SDImageCachesManagerOperation.h │ │ ├── SDWebImageDownloaderDecryptor.h │ │ ├── SDWebImageDownloaderOperation.h │ │ ├── SDWebImageTransitionInternal.h │ │ ├── SDImageIOAnimatedCoderInternal.h │ │ ├── UIImageView+HighlightedWebCache.h │ │ ├── SDWebImageDownloaderRequestModifier.h │ │ └── SDWebImageDownloaderResponseModifier.h ├── Target Support Files │ ├── SnapKit │ │ ├── SnapKit.modulemap │ │ ├── SnapKit-dummy.m │ │ ├── SnapKit-prefix.pch │ │ ├── SnapKit-umbrella.h │ │ ├── SnapKit.debug.xcconfig │ │ └── SnapKit.release.xcconfig │ ├── HandyJSON │ │ ├── HandyJSON.modulemap │ │ ├── HandyJSON-dummy.m │ │ ├── HandyJSON-prefix.pch │ │ ├── HandyJSON-umbrella.h │ │ ├── HandyJSON.debug.xcconfig │ │ └── HandyJSON.release.xcconfig │ ├── lottie-ios │ │ ├── lottie-ios.modulemap │ │ ├── lottie-ios-dummy.m │ │ ├── lottie-ios-prefix.pch │ │ ├── lottie-ios-umbrella.h │ │ ├── lottie-ios.debug.xcconfig │ │ └── lottie-ios.release.xcconfig │ ├── SDWebImage │ │ ├── SDWebImage-dummy.m │ │ ├── SDWebImage-prefix.pch │ │ ├── SDWebImage.debug.xcconfig │ │ └── SDWebImage.release.xcconfig │ └── Pods-FJFSwiftBlogDemo │ │ ├── Pods-FJFSwiftBlogDemo.modulemap │ │ ├── Pods-FJFSwiftBlogDemo-dummy.m │ │ └── Pods-FJFSwiftBlogDemo-umbrella.h ├── HandyJSON │ └── Source │ │ ├── Export.swift │ │ ├── MangledName.swift │ │ ├── EnumType.swift │ │ ├── PropertyInfo.swift │ │ ├── ExtendCustomBasicType.swift │ │ ├── HandyJSON.h │ │ ├── PointerType.swift │ │ ├── CBridge.swift │ │ ├── ReflectionHelper.swift │ │ ├── TransformType.swift │ │ ├── Configuration.swift │ │ └── Logger.swift ├── SDWebImage │ ├── SDWebImage │ │ ├── Private │ │ │ ├── SDInternalMacros.m │ │ │ ├── SDDeviceHelper.h │ │ │ ├── UIColor+SDHexString.h │ │ │ ├── SDAssociatedObject.h │ │ │ ├── SDWeakProxy.h │ │ │ ├── SDWebImageTransitionInternal.h │ │ │ ├── SDImageCachesManagerOperation.h │ │ │ ├── NSBezierPath+SDRoundedCorners.h │ │ │ ├── SDAsyncBlockOperation.h │ │ │ ├── SDAssociatedObject.m │ │ │ ├── SDDeviceHelper.m │ │ │ ├── SDDisplayLink.h │ │ │ ├── SDImageAssetManager.h │ │ │ ├── SDFileAttributeHelper.h │ │ │ ├── UIColor+SDHexString.m │ │ │ └── SDImageIOAnimatedCoderInternal.h │ │ └── Core │ │ │ ├── SDWebImageOperation.m │ │ │ ├── SDWebImageError.m │ │ │ ├── SDWebImageCompat.m │ │ │ ├── SDWebImageOperation.h │ │ │ ├── UIImage+GIF.m │ │ │ ├── SDImageAPNGCoder.h │ │ │ ├── UIImage+ExtendedCacheData.m │ │ │ ├── SDImageFrame.m │ │ │ ├── UIImage+GIF.h │ │ │ ├── SDImageAWebPCoder.h │ │ │ ├── SDWebImageCacheKeyFilter.m │ │ │ ├── SDImageGIFCoder.h │ │ │ ├── SDWebImageCacheKeyFilter.h │ │ │ ├── SDWebImageCacheSerializer.m │ │ │ ├── SDImageCoder.m │ │ │ ├── SDAnimatedImageRep.h │ │ │ ├── SDImageHEICCoder.h │ │ │ ├── SDImageLoadersManager.h │ │ │ ├── SDImageFrame.h │ │ │ ├── SDImageIOCoder.h │ │ │ ├── UIImage+ExtendedCacheData.h │ │ │ ├── UIImage+MemoryCacheCost.h │ │ │ ├── UIImage+ForceDecode.m │ │ │ ├── SDImageGIFCoder.m │ │ │ ├── SDImageAPNGCoder.m │ │ │ ├── UIImage+MemoryCacheCost.m │ │ │ ├── SDWebImageCacheSerializer.h │ │ │ ├── UIImage+ForceDecode.h │ │ │ └── SDImageGraphics.h │ └── LICENSE ├── lottie-ios │ └── Sources │ │ ├── Private │ │ ├── Utility │ │ │ ├── Debugging │ │ │ │ ├── TestHelpers.swift │ │ │ │ └── AnimatorNodeDebugging.swift │ │ │ ├── Extensions │ │ │ │ ├── DataExtension.swift │ │ │ │ ├── CGColor+RGB.swift │ │ │ │ ├── StringExtensions.swift │ │ │ │ └── BlendMode+Filter.swift │ │ │ ├── Primitives │ │ │ │ └── CGPointExtension.swift │ │ │ └── Interpolatable │ │ │ │ └── KeyframeExtensions.swift │ │ ├── MainThread │ │ │ ├── NodeRenderSystem │ │ │ │ ├── Protocols │ │ │ │ │ └── PathNode.swift │ │ │ │ ├── NodeProperties │ │ │ │ │ ├── Protocols │ │ │ │ │ │ ├── KeypathSearchable.swift │ │ │ │ │ │ ├── AnyValueContainer.swift │ │ │ │ │ │ ├── NodePropertyMap.swift │ │ │ │ │ │ └── AnyNodeProperty.swift │ │ │ │ │ ├── ValueProviders │ │ │ │ │ │ ├── SingleValueProvider.swift │ │ │ │ │ │ └── GroupInterpolator.swift │ │ │ │ │ ├── ValueContainer.swift │ │ │ │ │ └── NodeProperty.swift │ │ │ │ └── Nodes │ │ │ │ │ └── OutputNodes │ │ │ │ │ ├── PassThroughOutputNode.swift │ │ │ │ │ └── Renderables │ │ │ │ │ └── FillRenderer.swift │ │ │ └── LayerContainers │ │ │ │ ├── CompLayers │ │ │ │ ├── NullCompositionLayer.swift │ │ │ │ └── ImageCompositionLayer.swift │ │ │ │ └── Utility │ │ │ │ ├── LayerTextProvider.swift │ │ │ │ ├── LayerFontProvider.swift │ │ │ │ ├── LayerImageProvider.swift │ │ │ │ ├── CachedImageProvider.swift │ │ │ │ └── InvertedMatteLayer.swift │ │ ├── CoreAnimation │ │ │ ├── Layers │ │ │ │ ├── TransformLayer.swift │ │ │ │ ├── BaseAnimationLayer.swift │ │ │ │ └── SolidLayer.swift │ │ │ ├── Animations │ │ │ │ ├── CustomPathAnimation.swift │ │ │ │ └── VisibilityAnimation.swift │ │ │ └── Extensions │ │ │ │ ├── CALayer+fillBounds.swift │ │ │ │ └── KeyframeGroup+exactlyOneKeyframe.swift │ │ └── Model │ │ │ ├── Objects │ │ │ ├── Marker.swift │ │ │ └── DashPattern.swift │ │ │ ├── Assets │ │ │ ├── Asset.swift │ │ │ └── PrecompAsset.swift │ │ │ ├── Layers │ │ │ ├── ImageLayerModel.swift │ │ │ └── ShapeLayerModel.swift │ │ │ ├── Extensions │ │ │ └── Bundle.swift │ │ │ ├── ShapeItems │ │ │ ├── Group.swift │ │ │ └── Merge.swift │ │ │ ├── Text │ │ │ └── Font.swift │ │ │ └── DictionaryInitializable.swift │ │ └── Public │ │ ├── iOS │ │ ├── AnimationSubview.swift │ │ ├── UIColorExtension.swift │ │ └── Compatibility │ │ │ └── CompatibleAnimationKeypath.swift │ │ ├── Primitives │ │ ├── AnimationTime.swift │ │ ├── LottieColor.swift │ │ └── Vectors.swift │ │ ├── AnimationCache │ │ ├── AnimationCacheProvider.swift │ │ └── LRUAnimationCache.swift │ │ ├── ImageProvider │ │ └── AnimationImageProvider.swift │ │ ├── FontProvider │ │ └── AnimationFontProvider.swift │ │ ├── TextProvider │ │ └── AnimationTextProvider.swift │ │ └── DynamicProperties │ │ └── ValueProviders │ │ └── SizeValueProvider.swift ├── Manifest.lock ├── SnapKit │ ├── LICENSE │ └── Source │ │ ├── ConstraintView.swift │ │ ├── ConstraintInsets.swift │ │ ├── ConstraintDirectionalInsets.swift │ │ ├── UILayoutSupport+Extensions.swift │ │ ├── ConstraintLayoutSupport.swift │ │ ├── ConstraintLayoutGuide+Extensions.swift │ │ └── ConstraintLayoutGuide.swift └── Pods.xcodeproj │ └── xcuserdata │ └── peak.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── FJFSwiftBlogDemo ├── Assets.xcassets │ ├── Contents.json │ └── AccentColor.colorset │ │ └── Contents.json ├── FJFSwiftBlog │ ├── FJFImageLabelViewDemo │ │ ├── fjf_address_add_icon@3x.png │ │ └── FJFImageLabelViewController.swift │ ├── FJFScrollviewDragDemo │ │ └── FJFContentTableView.swift │ ├── FJFTextInputIntercepterDemo │ │ └── FJFPersonInfoViewController.swift │ ├── FJFButtonClickedDemo │ │ └── FJFButtonClickedViewController.swift │ └── FJFItemListViewDemo │ │ └── FJFPersonListModel.swift ├── Info.plist ├── AppDelegate.swift ├── main.swift └── Base.lproj │ └── Main.storyboard ├── FJFSwiftBlogDemo.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcuserdata │ │ └── peak.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── peak.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── FJFSwiftBlogDemo.xcworkspace ├── xcuserdata │ └── peak.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── Podfile ├── Podfile.lock ├── FJFSwiftBlogDemoUITests ├── FJFSwiftBlogDemoUITestsLaunchTests.swift └── FJFSwiftBlogDemoUITests.swift └── FJFSwiftBlogDemoTests └── FJFSwiftBlogDemoTests.swift /README.md: -------------------------------------------------------------------------------- 1 | # FJFSwiftBlogDemo 2 | -------------------------------------------------------------------------------- /Pods/Headers/Public/HandyJSON/HandyJSON.h: -------------------------------------------------------------------------------- 1 | ../../../HandyJSON/Source/HandyJSON.h -------------------------------------------------------------------------------- /Pods/Headers/Private/HandyJSON/HandyJSON.h: -------------------------------------------------------------------------------- 1 | ../../../HandyJSON/Source/HandyJSON.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImage.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/WebImage/SDWebImage.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImage.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/WebImage/SDWebImage.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDDiskCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDDiskCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+GIF.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+GIF.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDDiskCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDDiskCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageFrame.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageFrame.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageLoader.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageLoader.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDMemoryCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDMemoryCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWeakProxy.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDWeakProxy.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+GIF.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+GIF.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageFrame.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageFrame.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageLoader.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageLoader.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDMemoryCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDMemoryCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAnimatedImage.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImage.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDDeviceHelper.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDDeviceHelper.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDDisplayLink.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDDisplayLink.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageGIFCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageGIFCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageGraphics.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageGraphics.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageIOCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageIOCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageError.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageError.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDmetamacros.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDmetamacros.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDAnimatedImage.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImage.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageAPNGCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageGIFCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageGIFCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageGraphics.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageGraphics.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageHEICCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageHEICCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageIOCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageIOCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageCompat.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCompat.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDefine.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDefine.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageError.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageError.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+Metadata.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+Metadata.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SnapKit/SnapKit-umbrella.h: -------------------------------------------------------------------------------- 1 | ../../../Target Support Files/SnapKit/SnapKit-umbrella.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SnapKit/SnapKit.modulemap: -------------------------------------------------------------------------------- 1 | ../../../Target Support Files/SnapKit/SnapKit.modulemap -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/NSButton+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSButton+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAnimatedImageRep.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageAPNGCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageAWebPCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageAWebPCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCacheConfig.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCacheConfig.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCacheDefine.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCacheDefine.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCoderHelper.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCoderHelper.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageHEICCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageHEICCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageTransformer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageTransformer.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDInternalMacros.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDInternalMacros.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageCompat.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCompat.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDefine.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDefine.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIButton+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIButton+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+Metadata.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+Metadata.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+Transform.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+Transform.h -------------------------------------------------------------------------------- /Pods/Headers/Public/HandyJSON/HandyJSON.modulemap: -------------------------------------------------------------------------------- 1 | ../../../Target Support Files/HandyJSON/HandyJSON.modulemap -------------------------------------------------------------------------------- /Pods/Headers/Public/Lottie/lottie-ios.modulemap: -------------------------------------------------------------------------------- 1 | ../../../Target Support Files/lottie-ios/lottie-ios.modulemap -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/NSButton+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSButton+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDAnimatedImageRep.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageAWebPCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageAWebPCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCacheConfig.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCacheConfig.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCacheDefine.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCacheDefine.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCoderHelper.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCoderHelper.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageTransformer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageTransformer.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageManager.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIButton+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIButton+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+Transform.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+Transform.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAnimatedImageView.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAssociatedObject.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDAssociatedObject.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageAssetManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDImageAssetManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCachesManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCachesManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCodersManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCodersManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloader.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageIndicator.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageIndicator.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageTransition.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageTransition.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIColor+SDHexString.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/UIColor+SDHexString.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+ForceDecode.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImageView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/HandyJSON/HandyJSON-umbrella.h: -------------------------------------------------------------------------------- 1 | ../../../Target Support Files/HandyJSON/HandyJSON-umbrella.h -------------------------------------------------------------------------------- /Pods/Headers/Public/Lottie/lottie-ios-umbrella.h: -------------------------------------------------------------------------------- 1 | ../../../Target Support Files/lottie-ios/lottie-ios-umbrella.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/NSImage+Compatibility.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSImage+Compatibility.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDAnimatedImagePlayer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDAnimatedImageView.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCachesManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCachesManager.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCodersManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCodersManager.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageLoadersManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageLoadersManager.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloader.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageIndicator.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageIndicator.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageTransition.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageTransition.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+ForceDecode.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImageView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSData+ImageContentType.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/NSImage+Compatibility.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSImage+Compatibility.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAnimatedImagePlayer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAsyncBlockOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDFileAttributeHelper.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDFileAttributeHelper.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDGraphicsImageRenderer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageIOAnimatedCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageLoadersManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageLoadersManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+MemoryCacheCost.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSData+ImageContentType.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDGraphicsImageRenderer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageIOAnimatedCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+MemoryCacheCost.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageCacheKeyFilter.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageCacheSerializer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+ExtendedCacheData.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageCacheKeyFilter.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageCacheSerializer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloaderConfig.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageOptionsProcessor.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+ExtendedCacheData.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAnimatedImageView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloaderConfig.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageOptionsProcessor.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDAnimatedImageView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.h -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/NSBezierPath+SDRoundedCorners.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCachesManagerOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloaderDecryptor.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageTransitionInternal.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDWebImageTransitionInternal.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloaderDecryptor.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageIOAnimatedCoderInternal.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloaderRequestModifier.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloaderRequestModifier.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloaderResponseModifier.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloaderResponseModifier.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit.modulemap: -------------------------------------------------------------------------------- 1 | module SnapKit { 2 | umbrella header "SnapKit-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON.modulemap: -------------------------------------------------------------------------------- 1 | module HandyJSON { 2 | umbrella header "HandyJSON-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/lottie-ios/lottie-ios.modulemap: -------------------------------------------------------------------------------- 1 | module Lottie { 2 | umbrella header "lottie-ios-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SnapKit : NSObject 3 | @end 4 | @implementation PodsDummy_SnapKit 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_HandyJSON : NSObject 3 | @end 4 | @implementation PodsDummy_HandyJSON 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/lottie-ios/lottie-ios-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_lottie_ios : NSObject 3 | @end 4 | @implementation PodsDummy_lottie_ios 5 | @end 6 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/FJFSwiftBlog/FJFImageLabelViewDemo/fjf_address_add_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fangjinfeng/FJFSwiftBlogDemo/HEAD/FJFSwiftBlogDemo/FJFSwiftBlog/FJFImageLabelViewDemo/fjf_address_add_icon@3x.png -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-FJFSwiftBlogDemo/Pods-FJFSwiftBlogDemo.modulemap: -------------------------------------------------------------------------------- 1 | module Pods_FJFSwiftBlogDemo { 2 | umbrella header "Pods-FJFSwiftBlogDemo-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo.xcworkspace/xcuserdata/peak.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fangjinfeng/FJFSwiftBlogDemo/HEAD/FJFSwiftBlogDemo.xcworkspace/xcuserdata/peak.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | platform:ios, '11.0' 2 | 3 | target 'FJFSwiftBlogDemo' do 4 | pod 'SnapKit', '~> 5.0.1' 5 | pod 'HandyJSON' 6 | pod 'lottie-ios', '3.5.0' 7 | pod 'SDWebImage', '~> 5.10.4' 8 | end 9 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-FJFSwiftBlogDemo/Pods-FJFSwiftBlogDemo-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_FJFSwiftBlogDemo : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_FJFSwiftBlogDemo 5 | @end 6 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo.xcodeproj/project.xcworkspace/xcuserdata/peak.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fangjinfeng/FJFSwiftBlogDemo/HEAD/FJFSwiftBlogDemo.xcodeproj/project.xcworkspace/xcuserdata/peak.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/lottie-ios/lottie-ios-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/Export.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Export.swift 3 | // HandyJSON 4 | // 5 | // Created by zhouzhuo on 16/07/2017. 6 | // Copyright © 2017 aliyun. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public protocol HandyJSONCustomTransformable: _ExtendCustomBasicType {} 12 | 13 | public protocol HandyJSON: _ExtendCustomModelType {} 14 | 15 | public protocol HandyJSONEnum: _RawEnumProtocol {} 16 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SnapKitVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/lottie-ios/lottie-ios-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double LottieVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char LottieVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDInternalMacros.h" 10 | 11 | void sd_executeCleanupBlock (__strong sd_cleanupBlock_t *block) { 12 | (*block)(); 13 | } 14 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "HandyJSON.h" 14 | 15 | FOUNDATION_EXPORT double HandyJSONVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char HandyJSONVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/MangledName.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MangledName.swift 3 | // HandyJSON 4 | // 5 | // Created by chantu on 2019/2/2. 6 | // Copyright © 2019 aliyun. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // mangled name might contain 0 but it is not the end, do not just use strlen 12 | func getMangledTypeNameSize(_ mangledName: UnsafePointer) -> Int { 13 | // TODO: should find the actually size 14 | return 256 15 | } 16 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Utility/Debugging/TestHelpers.swift: -------------------------------------------------------------------------------- 1 | // Created by Cal Stephens on 1/28/22. 2 | // Copyright © 2022 Airbnb Inc. All rights reserved. 3 | 4 | enum TestHelpers { 5 | /// Whether or not snapshot tests are currently running in a test target 6 | static var snapshotTestsAreRunning = false 7 | 8 | /// Whether or not performance tests are currently running in a test target 9 | static var performanceTestsAreRunning = false 10 | } 11 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/Protocols/PathNode.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PathNode.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/17/19. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - PathNode 11 | 12 | protocol PathNode { 13 | var pathOutput: PathOutputNode { get } 14 | } 15 | 16 | extension PathNode where Self: AnimatorNode { 17 | 18 | var outputNode: NodeOutput { 19 | pathOutput 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageOperation.h" 10 | 11 | /// NSOperation conform to `SDWebImageOperation`. 12 | @implementation NSOperation (SDWebImageOperation) 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-FJFSwiftBlogDemo/Pods-FJFSwiftBlogDemo-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_FJFSwiftBlogDemoVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_FJFSwiftBlogDemoVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo.xcodeproj/xcuserdata/peak.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | FJFSwiftBlogDemo.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 5 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/CoreAnimation/Layers/TransformLayer.swift: -------------------------------------------------------------------------------- 1 | // Created by Cal Stephens on 12/21/21. 2 | // Copyright © 2021 Airbnb Inc. All rights reserved. 3 | 4 | /// The CALayer type responsible for only rendering the `transform` of a `LayerModel` 5 | final class TransformLayer: BaseCompositionLayer { 6 | 7 | /// `TransformLayer`s don't render any visible content, 8 | /// they just `transform` their sublayers 9 | override var renderLayerContents: Bool { false } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/iOS/AnimationSubview.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimationSubview.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 2/4/19. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) || os(tvOS) || os(watchOS) || targetEnvironment(macCatalyst) 10 | import UIKit 11 | 12 | /// A view that can be added to a keypath of an AnimationView 13 | public final class AnimationSubview: UIView { 14 | 15 | var viewLayer: CALayer? { 16 | layer 17 | } 18 | 19 | } 20 | #endif 21 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/Primitives/AnimationTime.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimationTime.swift 3 | // lottie-swift-iOS 4 | // 5 | // Created by Brandon Withrow on 2/6/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | /// Defines animation time in Frames (Seconds * Framerate). 12 | public typealias AnimationFrameTime = CGFloat 13 | 14 | /// Defines animation time by a progress from 0 (beginning of the animation) to 1 (end of the animation) 15 | public typealias AnimationProgressTime = CGFloat 16 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDWebImageCompat.h" 11 | 12 | /// Device information helper methods 13 | @interface SDDeviceHelper : NSObject 14 | 15 | + (NSUInteger)totalMemory; 16 | + (NSUInteger)freeMemory; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Jamie Pinkham 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "SDWebImageError.h" 11 | 12 | NSErrorDomain const _Nonnull SDWebImageErrorDomain = @"SDWebImageErrorDomain"; 13 | NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadStatusCodeKey = @"SDWebImageErrorDownloadStatusCodeKey"; 14 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | 11 | #if !__has_feature(objc_arc) 12 | #error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag 13 | #endif 14 | 15 | #if !OS_OBJECT_USE_OBJC 16 | #error SDWebImage need ARC for dispatch object 17 | #endif 18 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | 11 | @interface UIColor (SDHexString) 12 | 13 | /** 14 | Convenience way to get hex string from color. The output should always be 32-bit RGBA hex string like `#00000000`. 15 | */ 16 | @property (nonatomic, copy, readonly, nonnull) NSString *sd_hexString; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/iOS/UIColorExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColorExtension.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 2/4/19. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) || os(tvOS) || os(watchOS) || targetEnvironment(macCatalyst) 10 | import UIKit 11 | 12 | extension UIColor { 13 | 14 | public var lottieColorValue: LottieColor { 15 | var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0 16 | getRed(&r, green: &g, blue: &b, alpha: &a) 17 | return LottieColor(r: Double(r), g: Double(g), b: Double(b), a: Double(a)) 18 | } 19 | 20 | } 21 | #endif 22 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | 11 | /// A protocol represents cancelable operation. 12 | @protocol SDWebImageOperation 13 | 14 | - (void)cancel; 15 | 16 | @end 17 | 18 | /// NSOperation conform to `SDWebImageOperation`. 19 | @interface NSOperation (SDWebImageOperation) 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | 11 | /// Copy the associated object from source image to target image. The associated object including all the category read/write properties. 12 | /// @param source source 13 | /// @param target target 14 | FOUNDATION_EXPORT void SDImageCopyAssociatedObject(UIImage * _Nullable source, UIImage * _Nullable target); 15 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Laurin Brandner 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "UIImage+GIF.h" 11 | #import "SDImageGIFCoder.h" 12 | 13 | @implementation UIImage (GIF) 14 | 15 | + (nullable UIImage *)sd_imageWithGIFData:(nullable NSData *)data { 16 | if (!data) { 17 | return nil; 18 | } 19 | return [[SDImageGIFCoder sharedCoder] decodedImageWithData:data options:0]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Utility/Debugging/AnimatorNodeDebugging.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimatorNodeDebugging.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/18/19. 6 | // 7 | 8 | import Foundation 9 | 10 | extension AnimatorNode { 11 | 12 | func printNodeTree() { 13 | parentNode?.printNodeTree() 14 | LottieLogger.shared.info(String(describing: type(of: self))) 15 | 16 | if let group = self as? GroupNode { 17 | LottieLogger.shared.info("* |Children") 18 | group.rootNode?.printNodeTree() 19 | LottieLogger.shared.info("*") 20 | } else { 21 | LottieLogger.shared.info("|") 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/FJFSwiftBlog/FJFScrollviewDragDemo/FJFContentTableView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FJFContentTableView.swift 3 | // FJFSwiftBlogDemo 4 | // 5 | // Created by peakfang on 2023/7/18. 6 | // 7 | 8 | import UIKit 9 | 10 | class FJFContentTableView: UITableView { 11 | 12 | } 13 | 14 | extension FJFContentTableView: UIGestureRecognizerDelegate { 15 | /// 保证可以响应多种手势 16 | func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 17 | if otherGestureRecognizer.view is UICollectionView { 18 | return false 19 | } 20 | return true 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDImageIOAnimatedCoder.h" 11 | 12 | /** 13 | Built in coder using ImageIO that supports APNG encoding/decoding 14 | */ 15 | @interface SDImageAPNGCoder : SDImageIOAnimatedCoder 16 | 17 | @property (nonatomic, class, readonly, nonnull) SDImageAPNGCoder *sharedCoder; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDWebImageCompat.h" 11 | 12 | /// A weak proxy which forward all the message to the target 13 | @interface SDWeakProxy : NSProxy 14 | 15 | @property (nonatomic, weak, readonly, nullable) id target; 16 | 17 | - (nonnull instancetype)initWithTarget:(nonnull id)target; 18 | + (nonnull instancetype)proxyWithTarget:(nonnull id)target; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Utility/Extensions/DataExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataExtension.swift 3 | // Lottie 4 | // 5 | // Created by René Fouquet on 03.05.21. 6 | // 7 | 8 | import Foundation 9 | #if canImport(UIKit) 10 | import UIKit 11 | #elseif canImport(AppKit) 12 | import AppKit 13 | #endif 14 | 15 | extension Data { 16 | 17 | static func jsonData(from assetName: String, in bundle: Bundle) -> Data? { 18 | #if canImport(UIKit) 19 | return NSDataAsset(name: assetName, bundle: bundle)?.data 20 | #else 21 | if #available(macOS 10.11, *) { 22 | return NSDataAsset(name: assetName, bundle: bundle)?.data 23 | } 24 | return nil 25 | #endif 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDWebImageTransitionInternal.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | 11 | #if SD_MAC 12 | 13 | #import 14 | 15 | /// Helper method for Core Animation transition 16 | FOUNDATION_EXPORT CAMediaTimingFunction * _Nullable SDTimingFunctionFromAnimationOptions(SDWebImageAnimationOptions options); 17 | FOUNDATION_EXPORT CATransition * _Nullable SDTransitionFromAnimationOptions(SDWebImageAnimationOptions options); 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDWebImageCompat.h" 11 | 12 | /// This is used for operation management, but not for operation queue execute 13 | @interface SDImageCachesManagerOperation : NSOperation 14 | 15 | @property (nonatomic, assign, readonly) NSUInteger pendingCount; 16 | 17 | - (void)beginWithTotalCount:(NSUInteger)totalCount; 18 | - (void)completeOne; 19 | - (void)done; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // FJFSwiftBlogDemo 4 | // 5 | // Created by peakfang on 2021/11/2. 6 | // 7 | 8 | import UIKit 9 | 10 | class AppDelegate: UIResponder, UIApplicationDelegate { 11 | var window: UIWindow? 12 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 13 | // Override point for customization after application launch. 14 | window = UIWindow(frame: UIScreen.main.bounds) 15 | let nav = UINavigationController.init(rootViewController: ViewController.init()) 16 | window?.rootViewController = nav 17 | window?.makeKeyAndVisible() 18 | return true 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // main.swift 3 | // FJFSwiftBlogDemo 4 | // 5 | // Created by peakfang on 2022/6/25. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, NSStringFromClass(CustomApplication.self), NSStringFromClass(AppDelegate.self)); 12 | 13 | class CustomApplication: UIApplication { 14 | override func sendEvent(_ event: UIEvent) { 15 | // 在这里处理一些统一的逻辑 16 | super.sendEvent(event) 17 | } 18 | 19 | override func sendAction(_ action: Selector, to target: Any?, from sender: Any?, for event: UIEvent?) -> Bool { 20 | // 在这里处理一些统一的逻辑, 例如 记录行为日志 21 | return super.sendAction(action, to: target, from: sender, for: event) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/AnimationCache/AnimationCacheProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimationCacheProvider.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 2/5/19. 6 | // 7 | 8 | import Foundation 9 | /// `AnimationCacheProvider` is a protocol that describes an Animation Cache. 10 | /// Animation Cache is used when loading `LottieAnimation` models. Using an Animation Cache 11 | /// can increase performance when loading an animation multiple times. 12 | /// 13 | /// Lottie comes with a prebuilt LRU Animation Cache. 14 | public protocol AnimationCacheProvider { 15 | 16 | func animation(forKey: String) -> LottieAnimation? 17 | 18 | func setAnimation(_ animation: LottieAnimation, forKey: String) 19 | 20 | func clearCache() 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KeypathSettable.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 2/4/19. 6 | // 7 | 8 | import Foundation 9 | import QuartzCore 10 | 11 | /// Protocol that provides keypath search functionality. Returns all node properties associated with a keypath. 12 | protocol KeypathSearchable { 13 | 14 | /// The name of the Keypath 15 | var keypathName: String { get } 16 | 17 | /// A list of properties belonging to the keypath. 18 | var keypathProperties: [String: AnyNodeProperty] { get } 19 | 20 | /// Children Keypaths 21 | var childKeypaths: [KeypathSearchable] { get } 22 | 23 | var keypathLayer: CALayer? { get } 24 | } 25 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | 11 | #if SD_MAC 12 | 13 | #import "UIImage+Transform.h" 14 | 15 | @interface NSBezierPath (SDRoundedCorners) 16 | 17 | /** 18 | Convenience way to create a bezier path with the specify rounding corners on macOS. Same as the one on `UIBezierPath`. 19 | */ 20 | + (nonnull instancetype)sd_bezierPathWithRoundedRect:(NSRect)rect byRoundingCorners:(SDRectCorner)corners cornerRadius:(CGFloat)cornerRadius; 21 | 22 | @end 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - HandyJSON (5.0.2) 3 | - lottie-ios (3.5.0) 4 | - SDWebImage (5.10.4): 5 | - SDWebImage/Core (= 5.10.4) 6 | - SDWebImage/Core (5.10.4) 7 | - SnapKit (5.0.1) 8 | 9 | DEPENDENCIES: 10 | - HandyJSON 11 | - lottie-ios (= 3.5.0) 12 | - SDWebImage (~> 5.10.4) 13 | - SnapKit (~> 5.0.1) 14 | 15 | SPEC REPOS: 16 | trunk: 17 | - HandyJSON 18 | - lottie-ios 19 | - SDWebImage 20 | - SnapKit 21 | 22 | SPEC CHECKSUMS: 23 | HandyJSON: 9e4e236f5d2dbefad5155a77417bbea438201c03 24 | lottie-ios: c55158d67d0629a260625cc2ded2052b829e3c3e 25 | SDWebImage: c666b97e1fa9c64b4909816a903322018f0a9c84 26 | SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb 27 | 28 | PODFILE CHECKSUM: 7cf29369912dc381496e1f45f8698447e45ca498 29 | 30 | COCOAPODS: 1.11.3 31 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnyValueContainer.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/30/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | /// The container for the value of a property. 12 | protocol AnyValueContainer: AnyObject { 13 | 14 | /// The stored value of the container 15 | var value: Any { get } 16 | 17 | /// Notifies the provider that it should update its container 18 | func setNeedsUpdate() 19 | 20 | /// When true the container needs to have its value updated by its provider 21 | var needsUpdate: Bool { get } 22 | 23 | /// The frame time of the last provided update 24 | var lastUpdateFrame: CGFloat { get } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - HandyJSON (5.0.2) 3 | - lottie-ios (3.5.0) 4 | - SDWebImage (5.10.4): 5 | - SDWebImage/Core (= 5.10.4) 6 | - SDWebImage/Core (5.10.4) 7 | - SnapKit (5.0.1) 8 | 9 | DEPENDENCIES: 10 | - HandyJSON 11 | - lottie-ios (= 3.5.0) 12 | - SDWebImage (~> 5.10.4) 13 | - SnapKit (~> 5.0.1) 14 | 15 | SPEC REPOS: 16 | trunk: 17 | - HandyJSON 18 | - lottie-ios 19 | - SDWebImage 20 | - SnapKit 21 | 22 | SPEC CHECKSUMS: 23 | HandyJSON: 9e4e236f5d2dbefad5155a77417bbea438201c03 24 | lottie-ios: c55158d67d0629a260625cc2ded2052b829e3c3e 25 | SDWebImage: c666b97e1fa9c64b4909816a903322018f0a9c84 26 | SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb 27 | 28 | PODFILE CHECKSUM: 7cf29369912dc381496e1f45f8698447e45ca498 29 | 30 | COCOAPODS: 1.11.3 31 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Fabrice Aneche 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "UIImage+ExtendedCacheData.h" 11 | #import 12 | 13 | @implementation UIImage (ExtendedCacheData) 14 | 15 | - (id)sd_extendedObject { 16 | return objc_getAssociatedObject(self, @selector(sd_extendedObject)); 17 | } 18 | 19 | - (void)setSd_extendedObject:(id)sd_extendedObject { 20 | objc_setAssociatedObject(self, @selector(sd_extendedObject), sd_extendedObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Pods/Target Support Files/lottie-ios/lottie-ios.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/lottie-ios 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/lottie-ios/lottie-ios.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/lottie-ios 9 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/ImageProvider/AnimationImageProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LottieImageProvider.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/25/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | /// Image provider is a protocol that is used to supply images to `LottieAnimationView`. 12 | /// 13 | /// Some animations require a reference to an image. The image provider loads and 14 | /// provides those images to the `LottieAnimationView`. Lottie includes a couple of 15 | /// prebuilt Image Providers that supply images from a Bundle, or from a FilePath. 16 | /// 17 | /// Additionally custom Image Providers can be made to load images from a URL, 18 | /// or to Cache images. 19 | public protocol AnimationImageProvider { 20 | func imageForAsset(asset: ImageAsset) -> CGImage? 21 | } 22 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageFrame.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDImageFrame.h" 10 | 11 | @interface SDImageFrame () 12 | 13 | @property (nonatomic, strong, readwrite, nonnull) UIImage *image; 14 | @property (nonatomic, readwrite, assign) NSTimeInterval duration; 15 | 16 | @end 17 | 18 | @implementation SDImageFrame 19 | 20 | + (instancetype)frameWithImage:(UIImage *)image duration:(NSTimeInterval)duration { 21 | SDImageFrame *frame = [[SDImageFrame alloc] init]; 22 | frame.image = image; 23 | frame.duration = duration; 24 | 25 | return frame; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | 11 | @class SDAsyncBlockOperation; 12 | typedef void (^SDAsyncBlock)(SDAsyncBlockOperation * __nonnull asyncOperation); 13 | 14 | /// A async block operation, success after you call `completer` (not like `NSBlockOperation` which is for sync block, success on return) 15 | @interface SDAsyncBlockOperation : NSOperation 16 | 17 | - (nonnull instancetype)initWithBlock:(nonnull SDAsyncBlock)block; 18 | + (nonnull instancetype)blockOperationWithBlock:(nonnull SDAsyncBlock)block; 19 | - (void)complete; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/LayerContainers/CompLayers/NullCompositionLayer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NullCompositionLayer.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/25/19. 6 | // 7 | 8 | import Foundation 9 | 10 | final class NullCompositionLayer: CompositionLayer { 11 | 12 | init(layer: LayerModel) { 13 | super.init(layer: layer, size: .zero) 14 | } 15 | 16 | required init?(coder _: NSCoder) { 17 | fatalError("init(coder:) has not been implemented") 18 | } 19 | 20 | override init(layer: Any) { 21 | /// Used for creating shadow model layers. Read More here: https://developer.apple.com/documentation/quartzcore/calayer/1410842-init 22 | guard let layer = layer as? NullCompositionLayer else { 23 | fatalError("init(layer:) Wrong Layer Class") 24 | } 25 | super.init(layer: layer) 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/FJFSwiftBlog/FJFTextInputIntercepterDemo/FJFPersonInfoViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FJFPersonInfoViewController.swift 3 | // FJFTestBlogDemo 4 | // 5 | // Created by peakfang on 2021/10/20. 6 | // 7 | 8 | import UIKit 9 | 10 | class FJFPersonInfoViewController: UIViewController { 11 | 12 | override func viewDidLoad() { 13 | super.viewDidLoad() 14 | 15 | // Do any additional setup after loading the view. 16 | } 17 | 18 | 19 | 20 | /* 21 | // MARK: - Navigation 22 | 23 | // In a storyboard-based application, you will often want to do a little preparation before navigation 24 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 25 | // Get the new view controller using segue.destination. 26 | // Pass the selected object to the new view controller. 27 | } 28 | */ 29 | 30 | } 31 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Utility/Extensions/CGColor+RGB.swift: -------------------------------------------------------------------------------- 1 | // Created by Cal Stephens on 1/7/22. 2 | // Copyright © 2022 Airbnb Inc. All rights reserved. 3 | 4 | import QuartzCore 5 | 6 | extension CGColor { 7 | /// Initializes a `CGColor` using the given `RGB` values 8 | static func rgb(_ red: CGFloat, _ green: CGFloat, _ blue: CGFloat) -> CGColor { 9 | if #available(iOS 13.0, tvOS 13.0, macOS 10.5, *) { 10 | return CGColor(red: red, green: green, blue: blue, alpha: 1) 11 | } else { 12 | return CGColor( 13 | colorSpace: CGColorSpaceCreateDeviceRGB(), 14 | components: [red, green, blue])! 15 | } 16 | } 17 | 18 | /// Initializes a `CGColor` using the given `RGBA` values 19 | static func rgba(_ red: CGFloat, _ green: CGFloat, _ blue: CGFloat, _ alpha: CGFloat) -> CGColor { 20 | CGColor.rgb(red, green, blue).copy(alpha: alpha)! 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Utility/Primitives/CGPointExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGPointExtension.swift 3 | // Lottie 4 | // 5 | // Created by Marcelo Fabri on 5/5/22. 6 | // 7 | 8 | import CoreGraphics 9 | 10 | extension CGPoint: AnyInitializable { 11 | 12 | // MARK: Lifecycle 13 | 14 | init(value: Any) throws { 15 | if let dictionary = value as? [String: CGFloat] { 16 | let x: CGFloat = try dictionary.value(for: CodingKeys.x) 17 | let y: CGFloat = try dictionary.value(for: CodingKeys.y) 18 | self.init(x: x, y: y) 19 | } else if 20 | let array = value as? [CGFloat], 21 | array.count > 1 22 | { 23 | self.init(x: array[0], y: array[1]) 24 | } else { 25 | throw InitializableError.invalidInput 26 | } 27 | } 28 | 29 | // MARK: Private 30 | 31 | private enum CodingKeys: String { 32 | case x 33 | case y 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Laurin Brandner 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "SDWebImageCompat.h" 11 | 12 | /** 13 | This category is just use as a convenience method. For more detail control, use methods in `UIImage+MultiFormat.h` or directly use `SDImageCoder`. 14 | */ 15 | @interface UIImage (GIF) 16 | 17 | /** 18 | Creates an animated UIImage from an NSData. 19 | This will create animated image if the data is Animated GIF. And will create a static image is the data is Static GIF. 20 | 21 | @param data The GIF data 22 | @return The created image 23 | */ 24 | + (nullable UIImage *)sd_imageWithGIFData:(nullable NSData *)data; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/EnumType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EnumType.swift 3 | // HandyJSON 4 | // 5 | // Created by zhouzhuo on 16/07/2017. 6 | // Copyright © 2017 aliyun. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public protocol _RawEnumProtocol: _Transformable { 12 | 13 | static func _transform(from object: Any) -> Self? 14 | func _plainValue() -> Any? 15 | } 16 | 17 | extension RawRepresentable where Self: _RawEnumProtocol { 18 | 19 | public static func _transform(from object: Any) -> Self? { 20 | if let transformableType = RawValue.self as? _Transformable.Type { 21 | if let typedValue = transformableType.transform(from: object) { 22 | return Self(rawValue: typedValue as! RawValue) 23 | } 24 | } 25 | return nil 26 | } 27 | 28 | public func _plainValue() -> Any? { 29 | return self.rawValue 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage 3 | DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage 10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | SUPPORTS_MACCATALYST = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage 3 | DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage 10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | SUPPORTS_MACCATALYST = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/FontProvider/AnimationFontProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimationFontProvider.swift 3 | // Lottie 4 | // 5 | // Created by Brandon Withrow on 8/5/20. 6 | // Copyright © 2020 YurtvilleProds. All rights reserved. 7 | // 8 | 9 | import CoreGraphics 10 | import CoreText 11 | import Foundation 12 | 13 | // MARK: - AnimationFontProvider 14 | 15 | /// Font provider is a protocol that is used to supply fonts to `LottieAnimationView`. 16 | /// 17 | public protocol AnimationFontProvider { 18 | func fontFor(family: String, size: CGFloat) -> CTFont? 19 | } 20 | 21 | // MARK: - DefaultFontProvider 22 | 23 | /// Default Font provider. 24 | public final class DefaultFontProvider: AnimationFontProvider { 25 | 26 | // MARK: Lifecycle 27 | 28 | public init() { } 29 | 30 | // MARK: Public 31 | 32 | public func fontFor(family: String, size: CGFloat) -> CTFont? { 33 | CTFontCreateWithName(family as CFString, size, nil) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/PropertyInfo.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // PropertyInfo.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 20/08/2017. 22 | // 23 | 24 | struct PropertyInfo { 25 | let key: String 26 | let type: Any.Type 27 | let address: UnsafeMutableRawPointer 28 | let bridged: Bool 29 | } 30 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LayerTextProvider.swift 3 | // lottie-ios-iOS 4 | // 5 | // Created by Alexandr Goncharov on 07/06/2019. 6 | // 7 | 8 | import Foundation 9 | 10 | /// Connects a LottieTextProvider to a group of text layers 11 | final class LayerTextProvider { 12 | 13 | // MARK: Lifecycle 14 | 15 | init(textProvider: AnimationTextProvider) { 16 | self.textProvider = textProvider 17 | textLayers = [] 18 | reloadTexts() 19 | } 20 | 21 | // MARK: Internal 22 | 23 | private(set) var textLayers: [TextCompositionLayer] 24 | 25 | var textProvider: AnimationTextProvider { 26 | didSet { 27 | reloadTexts() 28 | } 29 | } 30 | 31 | func addTextLayers(_ layers: [TextCompositionLayer]) { 32 | textLayers += layers 33 | } 34 | 35 | func reloadTexts() { 36 | textLayers.forEach { 37 | $0.textProvider = textProvider 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SingleValueProvider.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/30/19. 6 | // 7 | 8 | import Foundation 9 | import QuartzCore 10 | 11 | /// Returns a value for every frame. 12 | final class SingleValueProvider: ValueProvider { 13 | 14 | // MARK: Lifecycle 15 | 16 | init(_ value: ValueType) { 17 | self.value = value 18 | } 19 | 20 | // MARK: Internal 21 | 22 | var value: ValueType { 23 | didSet { 24 | hasUpdate = true 25 | } 26 | } 27 | 28 | var storage: ValueProviderStorage { 29 | .singleValue(value) 30 | } 31 | 32 | var valueType: Any.Type { 33 | ValueType.self 34 | } 35 | 36 | func hasUpdate(frame _: CGFloat) -> Bool { 37 | hasUpdate 38 | } 39 | 40 | // MARK: Private 41 | 42 | private var hasUpdate = true 43 | } 44 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CompatibleAnimationKeypath.swift 3 | // Lottie_iOS 4 | // 5 | // Created by Tyler Hedrick on 3/6/19. 6 | // 7 | 8 | import Foundation 9 | #if os(iOS) || os(tvOS) || os(watchOS) || targetEnvironment(macCatalyst) 10 | 11 | /// An Objective-C compatible wrapper around Lottie's AnimationKeypath 12 | @objc 13 | public final class CompatibleAnimationKeypath: NSObject { 14 | 15 | // MARK: Lifecycle 16 | 17 | /// Creates a keypath from a dot separated string. The string is separated by "." 18 | @objc 19 | public init(keypath: String) { 20 | animationKeypath = AnimationKeypath(keypath: keypath) 21 | } 22 | 23 | /// Creates a keypath from a list of strings. 24 | @objc 25 | public init(keys: [String]) { 26 | animationKeypath = AnimationKeypath(keys: keys) 27 | } 28 | 29 | // MARK: Public 30 | 31 | public let animationKeypath: AnimationKeypath 32 | } 33 | #endif 34 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/HandyJSON" "${PODS_ROOT}/Headers/Public" 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/HandyJSON 10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | SWIFT_VERSION = 5.0 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/HandyJSON" "${PODS_ROOT}/Headers/Public" 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/HandyJSON 10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | SWIFT_VERSION = 5.0 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/ExtendCustomBasicType.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // ExtendCustomBasicType.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 05/09/2017. 22 | // 23 | 24 | public protocol _ExtendCustomBasicType: _Transformable { 25 | 26 | static func _transform(from object: Any) -> Self? 27 | func _plainValue() -> Any? 28 | } 29 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/Objects/Marker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Marker.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/9/19. 6 | // 7 | 8 | import Foundation 9 | 10 | /// A time marker 11 | final class Marker: Codable, DictionaryInitializable { 12 | 13 | // MARK: Lifecycle 14 | 15 | init(dictionary: [String: Any]) throws { 16 | name = try dictionary.value(for: CodingKeys.name) 17 | frameTime = try dictionary.value(for: CodingKeys.frameTime) 18 | durationFrameTime = try dictionary.value(for: CodingKeys.durationFrameTime) 19 | } 20 | 21 | // MARK: Internal 22 | 23 | enum CodingKeys: String, CodingKey { 24 | case name = "cm" 25 | case frameTime = "tm" 26 | case durationFrameTime = "dr" 27 | } 28 | 29 | /// The Marker Name 30 | let name: String 31 | 32 | /// The Frame time of the marker 33 | let frameTime: AnimationFrameTime 34 | 35 | /// The duration of the marker, in frames. 36 | let durationFrameTime: AnimationFrameTime 37 | } 38 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemoUITests/FJFSwiftBlogDemoUITestsLaunchTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FJFSwiftBlogDemoUITestsLaunchTests.swift 3 | // FJFSwiftBlogDemoUITests 4 | // 5 | // Created by peakfang on 2021/11/2. 6 | // 7 | 8 | import XCTest 9 | 10 | class FJFSwiftBlogDemoUITestsLaunchTests: XCTestCase { 11 | 12 | override class var runsForEachTargetApplicationUIConfiguration: Bool { 13 | true 14 | } 15 | 16 | override func setUpWithError() throws { 17 | continueAfterFailure = false 18 | } 19 | 20 | func testLaunch() throws { 21 | let app = XCUIApplication() 22 | app.launch() 23 | 24 | // Insert steps here to perform after app launch but before taking a screenshot, 25 | // such as logging into a test account or navigating somewhere in the app 26 | 27 | let attachment = XCTAttachment(screenshot: app.screenshot()) 28 | attachment.name = "Launch Screen" 29 | attachment.lifetime = .keepAlways 30 | add(attachment) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LayerFontProvider.swift 3 | // Lottie 4 | // 5 | // Created by Brandon Withrow on 8/5/20. 6 | // Copyright © 2020 YurtvilleProds. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | /// Connects a LottieFontProvider to a group of text layers 12 | final class LayerFontProvider { 13 | 14 | // MARK: Lifecycle 15 | 16 | init(fontProvider: AnimationFontProvider) { 17 | self.fontProvider = fontProvider 18 | textLayers = [] 19 | reloadTexts() 20 | } 21 | 22 | // MARK: Internal 23 | 24 | private(set) var textLayers: [TextCompositionLayer] 25 | 26 | var fontProvider: AnimationFontProvider { 27 | didSet { 28 | reloadTexts() 29 | } 30 | } 31 | 32 | func addTextLayers(_ layers: [TextCompositionLayer]) { 33 | textLayers += layers 34 | } 35 | 36 | func reloadTexts() { 37 | textLayers.forEach { 38 | $0.fontProvider = fontProvider 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDAssociatedObject.h" 10 | #import "UIImage+Metadata.h" 11 | #import "UIImage+ExtendedCacheData.h" 12 | #import "UIImage+MemoryCacheCost.h" 13 | #import "UIImage+ForceDecode.h" 14 | 15 | void SDImageCopyAssociatedObject(UIImage * _Nullable source, UIImage * _Nullable target) { 16 | if (!source || !target) { 17 | return; 18 | } 19 | // Image Metadata 20 | target.sd_isIncremental = source.sd_isIncremental; 21 | target.sd_imageLoopCount = source.sd_imageLoopCount; 22 | target.sd_imageFormat = source.sd_imageFormat; 23 | // Force Decode 24 | target.sd_isDecoded = source.sd_isDecoded; 25 | // Extended Cache Data 26 | target.sd_extendedObject = source.sd_extendedObject; 27 | } 28 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/CoreAnimation/Layers/BaseAnimationLayer.swift: -------------------------------------------------------------------------------- 1 | // Created by Cal Stephens on 1/27/22. 2 | // Copyright © 2022 Airbnb Inc. All rights reserved. 3 | 4 | import QuartzCore 5 | 6 | /// A base `CALayer` that manages the frame and animations 7 | /// of its `sublayers` and `mask` 8 | class BaseAnimationLayer: CALayer, AnimationLayer { 9 | 10 | // MARK: Internal 11 | 12 | override func layoutSublayers() { 13 | super.layoutSublayers() 14 | 15 | for sublayer in managedSublayers { 16 | sublayer.fillBoundsOfSuperlayer() 17 | } 18 | } 19 | 20 | func setupAnimations(context: LayerAnimationContext) throws { 21 | for childAnimationLayer in managedSublayers { 22 | try (childAnimationLayer as? AnimationLayer)?.setupAnimations(context: context) 23 | } 24 | } 25 | 26 | // MARK: Private 27 | 28 | /// All of the sublayers managed by this container 29 | private var managedSublayers: [CALayer] { 30 | (sublayers ?? []) + [mask].compactMap { $0 } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/NodeProperties/ValueContainer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ValueContainer.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/30/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | /// A container for a node value that is Typed to T. 12 | class ValueContainer: AnyValueContainer { 13 | 14 | // MARK: Lifecycle 15 | 16 | init(_ value: T) { 17 | outputValue = value 18 | } 19 | 20 | // MARK: Internal 21 | 22 | private(set) var lastUpdateFrame = CGFloat.infinity 23 | 24 | fileprivate(set) var needsUpdate = true 25 | 26 | var value: Any { 27 | outputValue as Any 28 | } 29 | 30 | var outputValue: T { 31 | didSet { 32 | needsUpdate = false 33 | } 34 | } 35 | 36 | func setValue(_ value: Any, forFrame: CGFloat) { 37 | if let typedValue = value as? T { 38 | needsUpdate = false 39 | lastUpdateFrame = forFrame 40 | outputValue = typedValue 41 | } 42 | } 43 | 44 | func setNeedsUpdate() { 45 | needsUpdate = true 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Utility/Extensions/StringExtensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StringExtensions.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/25/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | extension String { 12 | 13 | var cgColor: CGColor { 14 | let (red, green, blue) = hexColorComponents() 15 | return .rgb(red, green, blue) 16 | } 17 | 18 | func hexColorComponents() -> (red: CGFloat, green: CGFloat, blue: CGFloat) { 19 | var cString: String = trimmingCharacters(in: .whitespacesAndNewlines).uppercased() 20 | 21 | if cString.hasPrefix("#") { 22 | cString.remove(at: cString.startIndex) 23 | } 24 | 25 | if (cString.count) != 6 { 26 | return (red: 0, green: 0, blue: 0) 27 | } 28 | 29 | var rgbValue: UInt64 = 0 30 | Scanner(string: cString).scanHexInt64(&rgbValue) 31 | 32 | return ( 33 | red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, 34 | green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, 35 | blue: CGFloat(rgbValue & 0x0000FF) / 255.0) 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDDeviceHelper.h" 10 | #import 11 | 12 | @implementation SDDeviceHelper 13 | 14 | + (NSUInteger)totalMemory { 15 | return (NSUInteger)[[NSProcessInfo processInfo] physicalMemory]; 16 | } 17 | 18 | + (NSUInteger)freeMemory { 19 | mach_port_t host_port = mach_host_self(); 20 | mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); 21 | vm_size_t page_size; 22 | vm_statistics_data_t vm_stat; 23 | kern_return_t kern; 24 | 25 | kern = host_page_size(host_port, &page_size); 26 | if (kern != KERN_SUCCESS) return 0; 27 | kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); 28 | if (kern != KERN_SUCCESS) return 0; 29 | return vm_stat.free_count * page_size; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/FJFSwiftBlog/FJFButtonClickedDemo/FJFButtonClickedViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FJFButtonClickedViewController.swift 3 | // FJFSwiftBlogDemo 4 | // 5 | // Created by peakfang on 2022/6/20. 6 | // 7 | 8 | import UIKit 9 | 10 | class FJFButtonClickedViewController: UIViewController { 11 | 12 | // MARK: - Life 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | self.title = "按键点击响应问题" 16 | self.view.backgroundColor = .white 17 | self.view.addSubview(testView) 18 | testView.snp.makeConstraints { make in 19 | make.center.equalToSuperview() 20 | make.width.equalTo(200) 21 | make.height.equalTo(140) 22 | } 23 | } 24 | 25 | @objc 26 | func testButtonClicked(_ sender: UIButton) { 27 | print("-----------------------:FJFButtonClickedViewController") 28 | } 29 | // MARK: - Lazy 30 | lazy var testView: FJFButtonTestView = { 31 | let view = FJFButtonTestView() 32 | view.backgroundColor = .blue 33 | return view 34 | }() 35 | 36 | } 37 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemoTests/FJFSwiftBlogDemoTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FJFSwiftBlogDemoTests.swift 3 | // FJFSwiftBlogDemoTests 4 | // 5 | // Created by peakfang on 2021/11/2. 6 | // 7 | 8 | import XCTest 9 | @testable import FJFSwiftBlogDemo 10 | 11 | class FJFSwiftBlogDemoTests: XCTestCase { 12 | 13 | override func setUpWithError() throws { 14 | // Put setup code here. This method is called before the invocation of each test method in the class. 15 | } 16 | 17 | override func tearDownWithError() throws { 18 | // Put teardown code here. This method is called after the invocation of each test method in the class. 19 | } 20 | 21 | func testExample() throws { 22 | // This is an example of a functional test case. 23 | // Use XCTAssert and related functions to verify your tests produce the correct results. 24 | } 25 | 26 | func testPerformanceExample() throws { 27 | // This is an example of a performance test case. 28 | self.measure { 29 | // Put the code you want to measure the time of here. 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDImageIOAnimatedCoder.h" 11 | 12 | /** 13 | This coder is used for Google WebP and Animated WebP(AWebP) image format. 14 | Image/IO provide the WebP decoding support in iOS 14/macOS 11/tvOS 14/watchOS 7+. 15 | @note Currently Image/IO seems does not supports WebP encoding, if you need WebP encoding, use the custom codec below. 16 | @note If you need to support lower firmware version for WebP, you can have a try at https://github.com/SDWebImage/SDWebImageWebPCoder 17 | */ 18 | API_AVAILABLE(ios(14.0), tvos(14.0), macos(11.0), watchos(7.0)) 19 | @interface SDImageAWebPCoder : SDImageIOAnimatedCoder 20 | 21 | @property (nonatomic, class, readonly, nonnull) SDImageAWebPCoder *sharedCoder; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NodePropertyMap.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/21/19. 6 | // 7 | 8 | import Foundation 9 | import QuartzCore 10 | 11 | // MARK: - NodePropertyMap 12 | 13 | protocol NodePropertyMap { 14 | var properties: [AnyNodeProperty] { get } 15 | } 16 | 17 | extension NodePropertyMap { 18 | 19 | var childKeypaths: [KeypathSearchable] { 20 | [] 21 | } 22 | 23 | var keypathLayer: CALayer? { 24 | nil 25 | } 26 | 27 | /// Checks if the node's local contents need to be rebuilt. 28 | func needsLocalUpdate(frame: CGFloat) -> Bool { 29 | for property in properties { 30 | if property.needsUpdate(frame: frame) { 31 | return true 32 | } 33 | } 34 | return false 35 | } 36 | 37 | /// Rebuilds only the local nodes that have an update for the frame 38 | func updateNodeProperties(frame: CGFloat) { 39 | properties.forEach { property in 40 | property.update(frame: frame) 41 | } 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/HandyJSON.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // Created by zhouzhuo on 7/11/16. 18 | // 19 | 20 | @import Foundation; 21 | 22 | //! Project version number for HandyJSON. 23 | FOUNDATION_EXPORT double HandyJSONVersionNumber; 24 | 25 | //! Project version string for HandyJSON. 26 | FOUNDATION_EXPORT const unsigned char HandyJSONVersionString[]; 27 | 28 | // In this header, you should import all the public headers of your framework using statements like #import 29 | 30 | 31 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCacheKeyFilter.h" 10 | 11 | @interface SDWebImageCacheKeyFilter () 12 | 13 | @property (nonatomic, copy, nonnull) SDWebImageCacheKeyFilterBlock block; 14 | 15 | @end 16 | 17 | @implementation SDWebImageCacheKeyFilter 18 | 19 | - (instancetype)initWithBlock:(SDWebImageCacheKeyFilterBlock)block { 20 | self = [super init]; 21 | if (self) { 22 | self.block = block; 23 | } 24 | return self; 25 | } 26 | 27 | + (instancetype)cacheKeyFilterWithBlock:(SDWebImageCacheKeyFilterBlock)block { 28 | SDWebImageCacheKeyFilter *cacheKeyFilter = [[SDWebImageCacheKeyFilter alloc] initWithBlock:block]; 29 | return cacheKeyFilter; 30 | } 31 | 32 | - (NSString *)cacheKeyForURL:(NSURL *)url { 33 | if (!self.block) { 34 | return nil; 35 | } 36 | return self.block(url); 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDWebImageCompat.h" 11 | 12 | /// Cross-platform display link wrapper. Do not retain the target 13 | /// Use `CADisplayLink` on iOS/tvOS, `CVDisplayLink` on macOS, `NSTimer` on watchOS 14 | @interface SDDisplayLink : NSObject 15 | 16 | @property (readonly, nonatomic, weak, nullable) id target; 17 | @property (readonly, nonatomic, assign, nonnull) SEL selector; 18 | @property (readonly, nonatomic) CFTimeInterval duration; 19 | @property (readonly, nonatomic) BOOL isRunning; 20 | 21 | + (nonnull instancetype)displayLinkWithTarget:(nonnull id)target selector:(nonnull SEL)sel; 22 | 23 | - (void)addToRunLoop:(nonnull NSRunLoop *)runloop forMode:(nonnull NSRunLoopMode)mode; 24 | - (void)removeFromRunLoop:(nonnull NSRunLoop *)runloop forMode:(nonnull NSRunLoopMode)mode; 25 | 26 | - (void)start; 27 | - (void)stop; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/Assets/Asset.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Asset.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/9/19. 6 | // 7 | 8 | import Foundation 9 | 10 | public class Asset: Codable, DictionaryInitializable { 11 | 12 | // MARK: Lifecycle 13 | 14 | required public init(from decoder: Decoder) throws { 15 | let container = try decoder.container(keyedBy: Asset.CodingKeys.self) 16 | if let id = try? container.decode(String.self, forKey: .id) { 17 | self.id = id 18 | } else { 19 | id = String(try container.decode(Int.self, forKey: .id)) 20 | } 21 | } 22 | 23 | required init(dictionary: [String: Any]) throws { 24 | if let id = dictionary[CodingKeys.id.rawValue] as? String { 25 | self.id = id 26 | } else if let id = dictionary[CodingKeys.id.rawValue] as? Int { 27 | self.id = String(id) 28 | } else { 29 | throw InitializableError.invalidInput 30 | } 31 | } 32 | 33 | // MARK: Public 34 | 35 | /// The ID of the asset 36 | public let id: String 37 | 38 | // MARK: Private 39 | 40 | private enum CodingKeys: String, CodingKey { 41 | case id 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Pods/SDWebImage/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | 21 | -------------------------------------------------------------------------------- /Pods/SnapKit/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDImageIOAnimatedCoder.h" 11 | 12 | /** 13 | Built in coder using ImageIO that supports animated GIF encoding/decoding 14 | @note `SDImageIOCoder` supports GIF but only as static (will use the 1st frame). 15 | @note Use `SDImageGIFCoder` for fully animated GIFs. For `UIImageView`, it will produce animated `UIImage`(`NSImage` on macOS) for rendering. For `SDAnimatedImageView`, it will use `SDAnimatedImage` for rendering. 16 | @note The recommended approach for animated GIFs is using `SDAnimatedImage` with `SDAnimatedImageView`. It's more performant than `UIImageView` for GIF displaying(especially on memory usage) 17 | */ 18 | @interface SDImageGIFCoder : SDImageIOAnimatedCoder 19 | 20 | @property (nonatomic, class, readonly, nonnull) SDImageGIFCoder *sharedCoder; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDWebImageCompat.h" 11 | 12 | /// A Image-Asset manager to work like UIKit/AppKit's image cache behavior 13 | /// Apple parse the Asset Catalog compiled file(`Assets.car`) by CoreUI.framework, however it's a private framework and there are no other ways to directly get the data. So we just process the normal bundle files :) 14 | @interface SDImageAssetManager : NSObject 15 | 16 | @property (nonatomic, strong, nonnull) NSMapTable *imageTable; 17 | 18 | + (nonnull instancetype)sharedAssetManager; 19 | - (nullable NSString *)getPathForName:(nonnull NSString *)name bundle:(nonnull NSBundle *)bundle preferredScale:(nonnull CGFloat *)scale; 20 | - (nullable UIImage *)imageForName:(nonnull NSString *)name; 21 | - (void)storeImage:(nonnull UIImage *)image forName:(nonnull NSString *)name; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/Objects/DashPattern.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DashPattern.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/22/19. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - DashElementType 11 | 12 | enum DashElementType: String, Codable { 13 | case offset = "o" 14 | case dash = "d" 15 | case gap = "g" 16 | } 17 | 18 | // MARK: - DashElement 19 | 20 | final class DashElement: Codable, DictionaryInitializable { 21 | 22 | // MARK: Lifecycle 23 | 24 | init(dictionary: [String: Any]) throws { 25 | let typeRawValue: String = try dictionary.value(for: CodingKeys.type) 26 | guard let type = DashElementType(rawValue: typeRawValue) else { 27 | throw InitializableError.invalidInput 28 | } 29 | self.type = type 30 | let valueDictionary: [String: Any] = try dictionary.value(for: CodingKeys.value) 31 | value = try KeyframeGroup(dictionary: valueDictionary) 32 | } 33 | 34 | // MARK: Internal 35 | 36 | enum CodingKeys: String, CodingKey { 37 | case type = "n" 38 | case value = "v" 39 | } 40 | 41 | let type: DashElementType 42 | let value: KeyframeGroup 43 | 44 | } 45 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift: -------------------------------------------------------------------------------- 1 | // Created by Cal Stephens on 12/21/21. 2 | // Copyright © 2021 Airbnb Inc. All rights reserved. 3 | 4 | import QuartzCore 5 | 6 | extension CAShapeLayer { 7 | /// Adds animations for the given `BezierPath` keyframes to this `CALayer` 8 | @nonobjc 9 | func addAnimations( 10 | for customPath: KeyframeGroup, 11 | context: LayerAnimationContext, 12 | pathMultiplier: PathMultiplier = 1, 13 | transformPath: (CGPath) -> CGPath = { $0 }) 14 | throws 15 | { 16 | try addAnimation( 17 | for: .path, 18 | keyframes: customPath.keyframes, 19 | value: { pathKeyframe in 20 | transformPath(pathKeyframe.cgPath().duplicated(times: pathMultiplier)) 21 | }, 22 | context: context) 23 | } 24 | } 25 | 26 | extension CGPath { 27 | /// Duplicates this `CGPath` so that it is repeated the given number of times 28 | func duplicated(times: Int) -> CGPath { 29 | if times <= 1 { 30 | return self 31 | } 32 | 33 | let cgPath = CGMutablePath() 34 | 35 | for _ in 0.. 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | HandyJSON.xcscheme 8 | 9 | isShown 10 | 11 | orderHint 12 | 0 13 | 14 | Pods-FJFSwiftBlogDemo.xcscheme 15 | 16 | isShown 17 | 18 | orderHint 19 | 2 20 | 21 | SDWebImage.xcscheme 22 | 23 | isShown 24 | 25 | orderHint 26 | 3 27 | 28 | SnapKit.xcscheme 29 | 30 | isShown 31 | 32 | orderHint 33 | 4 34 | 35 | lottie-ios.xcscheme 36 | 37 | isShown 38 | 39 | orderHint 40 | 1 41 | 42 | 43 | SuppressBuildableAutocreation 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDWebImageCompat.h" 11 | 12 | typedef NSString * _Nullable(^SDWebImageCacheKeyFilterBlock)(NSURL * _Nonnull url); 13 | 14 | /** 15 | This is the protocol for cache key filter. 16 | We can use a block to specify the cache key filter. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. 17 | */ 18 | @protocol SDWebImageCacheKeyFilter 19 | 20 | - (nullable NSString *)cacheKeyForURL:(nonnull NSURL *)url; 21 | 22 | @end 23 | 24 | /** 25 | A cache key filter class with block. 26 | */ 27 | @interface SDWebImageCacheKeyFilter : NSObject 28 | 29 | - (nonnull instancetype)initWithBlock:(nonnull SDWebImageCacheKeyFilterBlock)block; 30 | + (nonnull instancetype)cacheKeyFilterWithBlock:(nonnull SDWebImageCacheKeyFilterBlock)block; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCacheSerializer.h" 10 | 11 | @interface SDWebImageCacheSerializer () 12 | 13 | @property (nonatomic, copy, nonnull) SDWebImageCacheSerializerBlock block; 14 | 15 | @end 16 | 17 | @implementation SDWebImageCacheSerializer 18 | 19 | - (instancetype)initWithBlock:(SDWebImageCacheSerializerBlock)block { 20 | self = [super init]; 21 | if (self) { 22 | self.block = block; 23 | } 24 | return self; 25 | } 26 | 27 | + (instancetype)cacheSerializerWithBlock:(SDWebImageCacheSerializerBlock)block { 28 | SDWebImageCacheSerializer *cacheSerializer = [[SDWebImageCacheSerializer alloc] initWithBlock:block]; 29 | return cacheSerializer; 30 | } 31 | 32 | - (NSData *)cacheDataWithImage:(UIImage *)image originalData:(NSData *)data imageURL:(nullable NSURL *)imageURL { 33 | if (!self.block) { 34 | return nil; 35 | } 36 | return self.block(image, data, imageURL); 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/Assets/PrecompAsset.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PrecompAsset.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/9/19. 6 | // 7 | 8 | import Foundation 9 | 10 | final class PrecompAsset: Asset { 11 | 12 | // MARK: Lifecycle 13 | 14 | required init(from decoder: Decoder) throws { 15 | let container = try decoder.container(keyedBy: PrecompAsset.CodingKeys.self) 16 | layers = try container.decode([LayerModel].self, ofFamily: LayerType.self, forKey: .layers) 17 | try super.init(from: decoder) 18 | } 19 | 20 | required init(dictionary: [String: Any]) throws { 21 | let layerDictionaries: [[String: Any]] = try dictionary.value(for: CodingKeys.layers) 22 | layers = try [LayerModel].fromDictionaries(layerDictionaries) 23 | try super.init(dictionary: dictionary) 24 | } 25 | 26 | // MARK: Internal 27 | 28 | enum CodingKeys: String, CodingKey { 29 | case layers 30 | } 31 | 32 | /// Layers of the precomp 33 | let layers: [LayerModel] 34 | 35 | override func encode(to encoder: Encoder) throws { 36 | try super.encode(to: encoder) 37 | var container = encoder.container(keyedBy: CodingKeys.self) 38 | try container.encode(layers, forKey: .layers) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/Layers/ImageLayerModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageLayer.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/8/19. 6 | // 7 | 8 | import Foundation 9 | 10 | /// A layer that holds an image. 11 | final class ImageLayerModel: LayerModel { 12 | 13 | // MARK: Lifecycle 14 | 15 | required init(from decoder: Decoder) throws { 16 | let container = try decoder.container(keyedBy: ImageLayerModel.CodingKeys.self) 17 | referenceID = try container.decode(String.self, forKey: .referenceID) 18 | try super.init(from: decoder) 19 | } 20 | 21 | required init(dictionary: [String: Any]) throws { 22 | referenceID = try dictionary.value(for: CodingKeys.referenceID) 23 | try super.init(dictionary: dictionary) 24 | } 25 | 26 | // MARK: Internal 27 | 28 | /// The reference ID of the image. 29 | let referenceID: String 30 | 31 | override func encode(to encoder: Encoder) throws { 32 | try super.encode(to: encoder) 33 | var container = encoder.container(keyedBy: CodingKeys.self) 34 | try container.encode(referenceID, forKey: .referenceID) 35 | } 36 | 37 | // MARK: Private 38 | 39 | private enum CodingKeys: String, CodingKey { 40 | case referenceID = "refId" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/PointerType.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // Created by zhouzhuo on 07/01/2017. 19 | // 20 | 21 | protocol PointerType : Equatable { 22 | associatedtype Pointee 23 | var pointer: UnsafePointer { get set } 24 | } 25 | 26 | extension PointerType { 27 | init(pointer: UnsafePointer) { 28 | func cast(_ value: T) -> U { 29 | return unsafeBitCast(value, to: U.self) 30 | } 31 | self = cast(UnsafePointer(pointer)) 32 | } 33 | } 34 | 35 | func == (lhs: T, rhs: T) -> Bool { 36 | return lhs.pointer == rhs.pointer 37 | } 38 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.h: -------------------------------------------------------------------------------- 1 | // 2 | // This file is from https://gist.github.com/zydeco/6292773 3 | // 4 | // Created by Jesús A. Álvarez on 2008-12-17. 5 | // Copyright 2008-2009 namedfork.net. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | /// File Extended Attribute (xattr) helper methods 11 | @interface SDFileAttributeHelper : NSObject 12 | 13 | + (nullable NSArray *)extendedAttributeNamesAtPath:(nonnull NSString *)path traverseLink:(BOOL)follow error:(NSError * _Nullable * _Nullable)err; 14 | + (BOOL)hasExtendedAttribute:(nonnull NSString *)name atPath:(nonnull NSString *)path traverseLink:(BOOL)follow error:(NSError * _Nullable * _Nullable)err; 15 | + (nullable NSData *)extendedAttribute:(nonnull NSString *)name atPath:(nonnull NSString *)path traverseLink:(BOOL)follow error:(NSError * _Nullable * _Nullable)err; 16 | + (BOOL)setExtendedAttribute:(nonnull NSString *)name value:(nonnull NSData *)value atPath:(nonnull NSString *)path traverseLink:(BOOL)follow overwrite:(BOOL)overwrite error:(NSError * _Nullable * _Nullable)err; 17 | + (BOOL)removeExtendedAttribute:(nonnull NSString *)name atPath:(nonnull NSString *)path traverseLink:(BOOL)follow error:(NSError * _Nullable * _Nullable)err; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "UIColor+SDHexString.h" 10 | 11 | @implementation UIColor (SDHexString) 12 | 13 | - (NSString *)sd_hexString { 14 | CGFloat red, green, blue, alpha; 15 | #if SD_UIKIT 16 | if (![self getRed:&red green:&green blue:&blue alpha:&alpha]) { 17 | [self getWhite:&red alpha:&alpha]; 18 | green = red; 19 | blue = red; 20 | } 21 | #else 22 | @try { 23 | [self getRed:&red green:&green blue:&blue alpha:&alpha]; 24 | } 25 | @catch (NSException *exception) { 26 | [self getWhite:&red alpha:&alpha]; 27 | green = red; 28 | blue = red; 29 | } 30 | #endif 31 | 32 | red = roundf(red * 255.f); 33 | green = roundf(green * 255.f); 34 | blue = roundf(blue * 255.f); 35 | alpha = roundf(alpha * 255.f); 36 | 37 | uint hex = ((uint)alpha << 24) | ((uint)red << 16) | ((uint)green << 8) | ((uint)blue); 38 | 39 | return [NSString stringWithFormat:@"#%08x", hex]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift: -------------------------------------------------------------------------------- 1 | // Created by Cal Stephens on 12/15/21. 2 | // Copyright © 2021 Airbnb Inc. All rights reserved. 3 | 4 | import QuartzCore 5 | 6 | // MARK: - CALayer + fillBoundsOfSuperlayer 7 | 8 | extension CALayer { 9 | /// Updates the `bounds` of this layer to fill the bounds of its `superlayer` 10 | /// without setting `frame` (which is not permitted if the layer can rotate) 11 | @nonobjc 12 | func fillBoundsOfSuperlayer() { 13 | guard let superlayer = superlayer else { return } 14 | 15 | if let customLayerLayer = self as? CustomLayoutLayer { 16 | customLayerLayer.layout(superlayerBounds: superlayer.bounds) 17 | } 18 | 19 | else { 20 | // By default the `anchorPoint` of a layer is `CGPoint(x: 0.5, y: 0.5)`. 21 | // Setting it to `.zero` makes the layer have the same coordinate space 22 | // as its superlayer, which lets use use `superlayer.bounds` directly. 23 | anchorPoint = .zero 24 | 25 | bounds = superlayer.bounds 26 | } 27 | } 28 | } 29 | 30 | // MARK: - CustomLayoutLayer 31 | 32 | /// A `CALayer` that sets a custom `bounds` and `anchorPoint` relative to its superlayer 33 | protocol CustomLayoutLayer: CALayer { 34 | func layout(superlayerBounds: CGRect) 35 | } 36 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageCoder.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDImageCoder.h" 10 | 11 | SDImageCoderOption const SDImageCoderDecodeFirstFrameOnly = @"decodeFirstFrameOnly"; 12 | SDImageCoderOption const SDImageCoderDecodeScaleFactor = @"decodeScaleFactor"; 13 | SDImageCoderOption const SDImageCoderDecodePreserveAspectRatio = @"decodePreserveAspectRatio"; 14 | SDImageCoderOption const SDImageCoderDecodeThumbnailPixelSize = @"decodeThumbnailPixelSize"; 15 | 16 | SDImageCoderOption const SDImageCoderEncodeFirstFrameOnly = @"encodeFirstFrameOnly"; 17 | SDImageCoderOption const SDImageCoderEncodeCompressionQuality = @"encodeCompressionQuality"; 18 | SDImageCoderOption const SDImageCoderEncodeBackgroundColor = @"encodeBackgroundColor"; 19 | SDImageCoderOption const SDImageCoderEncodeMaxPixelSize = @"encodeMaxPixelSize"; 20 | SDImageCoderOption const SDImageCoderEncodeMaxFileSize = @"encodeMaxFileSize"; 21 | SDImageCoderOption const SDImageCoderEncodeEmbedThumbnail = @"encodeEmbedThumbnail"; 22 | 23 | SDImageCoderOption const SDImageCoderWebImageContext = @"webImageContext"; 24 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/Extensions/Bundle.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | #if os(iOS) || os(tvOS) || os(watchOS) || targetEnvironment(macCatalyst) 3 | import UIKit 4 | #endif 5 | 6 | extension Bundle { 7 | func getAnimationData(_ name: String, subdirectory: String? = nil) throws -> Data? { 8 | // Check for files in the bundle at the given path 9 | let name = name.removingJSONSuffix() 10 | if let url = url(forResource: name, withExtension: "json", subdirectory: subdirectory) { 11 | return try Data(contentsOf: url) 12 | } 13 | 14 | // Check for data assets (not available on macOS) 15 | #if os(iOS) || os(tvOS) || os(watchOS) || targetEnvironment(macCatalyst) 16 | let assetKey = subdirectory != nil ? "\(subdirectory ?? "")/\(name)" : name 17 | return NSDataAsset(name: assetKey, bundle: self)?.data 18 | #else 19 | return nil 20 | #endif 21 | } 22 | } 23 | 24 | extension String { 25 | fileprivate func removingJSONSuffix() -> String { 26 | // Allow filenames to be passed with a ".json" extension (but not other extensions) 27 | // to keep the behavior from Lottie 2.x - instead of failing to load the animation 28 | guard hasSuffix(".json") else { 29 | return self 30 | } 31 | 32 | return (self as NSString).deletingPathExtension 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/FJFSwiftBlog/FJFItemListViewDemo/FJFPersonListModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FJFPersonListModel.swift 3 | // FJFTestBlogDemo 4 | // 5 | // Created by peakfang on 2021/10/29. 6 | // 7 | 8 | 9 | import Foundation 10 | import HandyJSON 11 | 12 | 13 | // 地址 item 类型 14 | struct FJFPersonListModel: HandyJSON { 15 | var addressDetails: [FJFPersonInfoModel]? 16 | 17 | static func defaultData() -> [FJFPersonInfoModel] { 18 | return [ 19 | FJFPersonInfoModel.init(address: "广东省深圳市宝安区福永路198号", cityName: "深圳", sex: "男", name: "王招商"), 20 | FJFPersonInfoModel.init(address: "广东省深圳市宝安区福永路198号", cityName: "深圳", sex: "男", name: "董大"), 21 | FJFPersonInfoModel.init(address: "广东省深圳市宝安区福永路198号", cityName: "深圳", sex: "男", name: "楚才"), 22 | FJFPersonInfoModel.init(address: "广东省深圳市宝安区福永路198号", cityName: "深圳", sex: "男", name: "王大"), 23 | FJFPersonInfoModel.init(address: "广东省深圳市宝安区福永路198号", cityName: "深圳", sex: "男", name: "王五"), 24 | FJFPersonInfoModel.init(address: "广东省深圳市宝安区福永路198号", cityName: "深圳", sex: "男", name: "李四"), 25 | ] 26 | } 27 | } 28 | 29 | // 个人信息 item 类型 30 | struct FJFPersonInfoModel: HandyJSON { 31 | var address: String? 32 | var cityName: String? 33 | var sex: String? 34 | var name: String? 35 | } 36 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | 11 | #if SD_MAC 12 | 13 | /** 14 | A subclass of `NSBitmapImageRep` to fix that GIF duration issue because `NSBitmapImageRep` will reset `NSImageCurrentFrameDuration` by using `kCGImagePropertyGIFDelayTime` but not `kCGImagePropertyGIFUnclampedDelayTime`. 15 | This also fix the GIF loop count issue, which will use the Netscape standard (See http://www6.uniovi.es/gifanim/gifabout.htm) to only place once when the `kCGImagePropertyGIFLoopCount` is nil. This is what modern browser's behavior. 16 | Built in GIF coder use this instead of `NSBitmapImageRep` for better GIF rendering. If you do not want this, only enable `SDImageIOCoder`, which just call `NSImage` API and actually use `NSBitmapImageRep` for GIF image. 17 | This also support APNG format using `SDImageAPNGCoder`. Which provide full alpha-channel support and the correct duration match the `kCGImagePropertyAPNGUnclampedDelayTime`. 18 | */ 19 | @interface SDAnimatedImageRep : NSBitmapImageRep 20 | 21 | @end 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/CBridge.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // CBridge.swift 19 | // HandyJSON 20 | // 21 | // Created by chantu on 2018/7/15. 22 | // Copyright © 2018 aliyun. All rights reserved. 23 | // 24 | 25 | import Foundation 26 | 27 | @_silgen_name("swift_getTypeByMangledNameInContext") 28 | public func _getTypeByMangledNameInContext( 29 | _ name: UnsafePointer, 30 | _ nameLength: Int, 31 | genericContext: UnsafeRawPointer?, 32 | genericArguments: UnsafeRawPointer?) 33 | -> Any.Type? 34 | 35 | 36 | @_silgen_name("swift_getTypeContextDescriptor") 37 | public func _swift_getTypeContextDescriptor(_ metadata: UnsafeRawPointer?) -> UnsafeRawPointer? 38 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KeyframeGroupInterpolator.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/22/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | /// A value provider that produces an array of values from an array of Keyframe Interpolators 12 | final class GroupInterpolator: ValueProvider where ValueType: Interpolatable { 13 | 14 | // MARK: Lifecycle 15 | 16 | /// Initialize with an array of array of keyframes. 17 | init(keyframeGroups: ContiguousArray>>) { 18 | keyframeInterpolators = ContiguousArray(keyframeGroups.map({ KeyframeInterpolator(keyframes: $0) })) 19 | } 20 | 21 | // MARK: Internal 22 | 23 | let keyframeInterpolators: ContiguousArray> 24 | 25 | var valueType: Any.Type { 26 | [ValueType].self 27 | } 28 | 29 | var storage: ValueProviderStorage<[ValueType]> { 30 | .closure { frame in 31 | self.keyframeInterpolators.map({ $0.value(frame: frame) as! ValueType }) 32 | } 33 | } 34 | 35 | func hasUpdate(frame: CGFloat) -> Bool { 36 | let updated = keyframeInterpolators.first(where: { $0.hasUpdate(frame: frame) }) 37 | return updated != nil 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDImageIOAnimatedCoder.h" 11 | 12 | /** 13 | This coder is used for HEIC (HEIF with HEVC container codec) image format. 14 | Image/IO provide the static HEIC (.heic) support in iOS 11/macOS 10.13/tvOS 11/watchOS 4+. 15 | Image/IO provide the animated HEIC (.heics) support in iOS 13/macOS 10.15/tvOS 13/watchOS 6+. 16 | See https://nokiatech.github.io/heif/technical.html for the standard. 17 | @note This coder is not in the default coder list for now, since HEIC animated image is really rare, and Apple's implementation still contains performance issues. You can enable if you need this. 18 | @note If you need to support lower firmware version for HEIF, you can have a try at https://github.com/SDWebImage/SDWebImageHEIFCoder 19 | */ 20 | API_AVAILABLE(ios(13.0), tvos(13.0), macos(10.15), watchos(6.0)) 21 | @interface SDImageHEICCoder : SDImageIOAnimatedCoder 22 | 23 | @property (nonatomic, class, readonly, nonnull) SDImageHEICCoder *sharedCoder; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDImageLoader.h" 10 | 11 | /** 12 | A loaders manager to manage multiple loaders 13 | */ 14 | @interface SDImageLoadersManager : NSObject 15 | 16 | /** 17 | Returns the global shared loaders manager instance. By default we will set [`SDWebImageDownloader.sharedDownloader`] into the loaders array. 18 | */ 19 | @property (nonatomic, class, readonly, nonnull) SDImageLoadersManager *sharedManager; 20 | 21 | /** 22 | All image loaders in manager. The loaders array is a priority queue, which means the later added loader will have the highest priority 23 | */ 24 | @property (nonatomic, copy, nullable) NSArray>* loaders; 25 | 26 | /** 27 | Add a new image loader to the end of loaders array. Which has the highest priority. 28 | 29 | @param loader loader 30 | */ 31 | - (void)addLoader:(nonnull id)loader; 32 | 33 | /** 34 | Remove an image loader in the loaders array. 35 | 36 | @param loader loader 37 | */ 38 | - (void)removeLoader:(nonnull id)loader; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/Layers/ShapeLayerModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShapeLayer.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/8/19. 6 | // 7 | 8 | import Foundation 9 | 10 | /// A layer that holds vector shape objects. 11 | final class ShapeLayerModel: LayerModel { 12 | 13 | // MARK: Lifecycle 14 | 15 | required init(from decoder: Decoder) throws { 16 | let container = try decoder.container(keyedBy: ShapeLayerModel.CodingKeys.self) 17 | items = try container.decode([ShapeItem].self, ofFamily: ShapeType.self, forKey: .items) 18 | try super.init(from: decoder) 19 | } 20 | 21 | required init(dictionary: [String: Any]) throws { 22 | let itemDictionaries: [[String: Any]] = try dictionary.value(for: CodingKeys.items) 23 | items = try [ShapeItem].fromDictionaries(itemDictionaries) 24 | try super.init(dictionary: dictionary) 25 | } 26 | 27 | // MARK: Internal 28 | 29 | /// A list of shape items. 30 | let items: [ShapeItem] 31 | 32 | override func encode(to encoder: Encoder) throws { 33 | try super.encode(to: encoder) 34 | var container = encoder.container(keyedBy: CodingKeys.self) 35 | try container.encode(items, forKey: .items) 36 | } 37 | 38 | // MARK: Private 39 | 40 | private enum CodingKeys: String, CodingKey { 41 | case items = "shapes" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageFrame.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDWebImageCompat.h" 11 | 12 | /** 13 | This class is used for creating animated images via `animatedImageWithFrames` in `SDImageCoderHelper`. 14 | @note If you need to specify animated images loop count, use `sd_imageLoopCount` property in `UIImage+Metadata.h`. 15 | */ 16 | @interface SDImageFrame : NSObject 17 | 18 | /** 19 | The image of current frame. You should not set an animated image. 20 | */ 21 | @property (nonatomic, strong, readonly, nonnull) UIImage *image; 22 | /** 23 | The duration of current frame to be displayed. The number is seconds but not milliseconds. You should not set this to zero. 24 | */ 25 | @property (nonatomic, readonly, assign) NSTimeInterval duration; 26 | 27 | /** 28 | Create a frame instance with specify image and duration 29 | 30 | @param image current frame's image 31 | @param duration current frame's duration 32 | @return frame instance 33 | */ 34 | + (instancetype _Nonnull)frameWithImage:(UIImage * _Nonnull)image duration:(NSTimeInterval)duration; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PassThroughOutputNode.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/30/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | class PassThroughOutputNode: NodeOutput { 12 | 13 | // MARK: Lifecycle 14 | 15 | init(parent: NodeOutput?) { 16 | self.parent = parent 17 | } 18 | 19 | // MARK: Internal 20 | 21 | let parent: NodeOutput? 22 | 23 | var hasUpdate = false 24 | var isEnabled = true 25 | 26 | var outputPath: CGPath? { 27 | if let parent = parent { 28 | return parent.outputPath 29 | } 30 | return nil 31 | } 32 | 33 | func hasOutputUpdates(_ forFrame: CGFloat) -> Bool { 34 | /// Changes to this node do not affect downstream nodes. 35 | let parentUpdate = parent?.hasOutputUpdates(forFrame) ?? false 36 | /// Changes to upstream nodes do, however, affect this nodes state. 37 | hasUpdate = hasUpdate || parentUpdate 38 | return parentUpdate 39 | } 40 | 41 | func hasRenderUpdates(_ forFrame: CGFloat) -> Bool { 42 | /// Return true if there are upstream updates or if this node has updates 43 | let upstreamUpdates = parent?.hasOutputUpdates(forFrame) ?? false 44 | hasUpdate = hasUpdate || upstreamUpdates 45 | return hasUpdate 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/Primitives/LottieColor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LottieColor.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 2/4/19. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - ColorFormatDenominator 11 | 12 | public enum ColorFormatDenominator: Hashable { 13 | case One 14 | case OneHundred 15 | case TwoFiftyFive 16 | 17 | var value: Double { 18 | switch self { 19 | case .One: 20 | return 1.0 21 | case .OneHundred: 22 | return 100.0 23 | case .TwoFiftyFive: 24 | return 255.0 25 | } 26 | } 27 | } 28 | 29 | // MARK: - Color 30 | 31 | @available(*, deprecated, renamed: "LottieColor", message: """ 32 | `Lottie.Color` has been renamed to `LottieColor`, to prevent conflicts with \ 33 | the `SwiftUI.Color` type. This notice will be removed in Lottie 4.0. 34 | """) 35 | public typealias Color = LottieColor 36 | 37 | // MARK: - LottieColor 38 | 39 | public struct LottieColor: Hashable { 40 | 41 | public var r: Double 42 | public var g: Double 43 | public var b: Double 44 | public var a: Double 45 | 46 | public init(r: Double, g: Double, b: Double, a: Double, denominator: ColorFormatDenominator = .One) { 47 | self.r = r / denominator.value 48 | self.g = g / denominator.value 49 | self.b = b / denominator.value 50 | self.a = a / denominator.value 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Utility/Extensions/BlendMode+Filter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Denis Koryttsev on 10.05.2022. 6 | // 7 | 8 | extension BlendMode { 9 | /// The Core Image filter name for this `BlendMode`, that can be applied to a `CALayer`'s `compositingFilter`. 10 | /// Supported compositing filters are defined here: https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/uid/TP30000136-SW71 11 | var filterName: String? { 12 | switch self { 13 | case .normal: return nil 14 | case .multiply: return "multiplyBlendMode" 15 | case .screen: return "screenBlendMode" 16 | case .overlay: return "overlayBlendMode" 17 | case .darken: return "darkenBlendMode" 18 | case .lighten: return "lightenBlendMode" 19 | case .colorDodge: return "colorDodgeBlendMode" 20 | case .colorBurn: return "colorBurnBlendMode" 21 | case .hardLight: return "hardLightBlendMode" 22 | case .softLight: return "softLightBlendMode" 23 | case .difference: return "differenceBlendMode" 24 | case .exclusion: return "exclusionBlendMode" 25 | case .hue: return "hueBlendMode" 26 | case .saturation: return "saturationBlendMode" 27 | case .color: return "colorBlendMode" 28 | case .luminosity: return "luminosityBlendMode" 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/TextProvider/AnimationTextProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimationImageProvider.swift 3 | // Lottie_iOS 4 | // 5 | // Created by Alexandr Goncharov on 07/06/2019. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - AnimationTextProvider 11 | 12 | /// Text provider is a protocol that is used to supply text to `LottieAnimationView`. 13 | public protocol AnimationTextProvider: AnyObject { 14 | func textFor(keypathName: String, sourceText: String) -> String 15 | } 16 | 17 | // MARK: - DictionaryTextProvider 18 | 19 | /// Text provider that simply map values from dictionary 20 | public final class DictionaryTextProvider: AnimationTextProvider { 21 | 22 | // MARK: Lifecycle 23 | 24 | public init(_ values: [String: String]) { 25 | self.values = values 26 | } 27 | 28 | // MARK: Public 29 | 30 | public func textFor(keypathName: String, sourceText: String) -> String { 31 | values[keypathName] ?? sourceText 32 | } 33 | 34 | // MARK: Internal 35 | 36 | let values: [String: String] 37 | } 38 | 39 | // MARK: - DefaultTextProvider 40 | 41 | /// Default text provider. Uses text in the animation file 42 | public final class DefaultTextProvider: AnimationTextProvider { 43 | 44 | // MARK: Lifecycle 45 | 46 | public init() { } 47 | 48 | // MARK: Public 49 | 50 | public func textFor(keypathName _: String, sourceText: String) -> String { 51 | sourceText 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDImageCoder.h" 11 | 12 | /** 13 | Built in coder that supports PNG, JPEG, TIFF, includes support for progressive decoding. 14 | 15 | GIF 16 | Also supports static GIF (meaning will only handle the 1st frame). 17 | For a full GIF support, we recommend `SDAnimatedImageView` to keep both CPU and memory balanced. 18 | 19 | HEIC 20 | This coder also supports HEIC format because ImageIO supports it natively. But it depends on the system capabilities, so it won't work on all devices, see: https://devstreaming-cdn.apple.com/videos/wwdc/2017/511tj33587vdhds/511/511_working_with_heif_and_hevc.pdf 21 | Decode(Software): !Simulator && (iOS 11 || tvOS 11 || macOS 10.13) 22 | Decode(Hardware): !Simulator && ((iOS 11 && A9Chip) || (macOS 10.13 && 6thGenerationIntelCPU)) 23 | Encode(Software): macOS 10.13 24 | Encode(Hardware): !Simulator && ((iOS 11 && A10FusionChip) || (macOS 10.13 && 6thGenerationIntelCPU)) 25 | */ 26 | @interface SDImageIOCoder : NSObject 27 | 28 | @property (nonatomic, class, readonly, nonnull) SDImageIOCoder *sharedCoder; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Fabrice Aneche 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import 11 | #import "SDWebImageCompat.h" 12 | 13 | @interface UIImage (ExtendedCacheData) 14 | 15 | /** 16 | Read and Write the extended object and bind it to the image. Which can hold some extra metadata like Image's scale factor, URL rich link, date, etc. 17 | The extended object should conforms to NSCoding, which we use `NSKeyedArchiver` and `NSKeyedUnarchiver` to archive it to data, and write to disk cache. 18 | @note The disk cache preserve both of the data and extended data with the same cache key. For manual query, use the `SDDiskCache` protocol method `extendedDataForKey:` instead. 19 | @note You can specify arbitrary object conforms to NSCoding (NSObject protocol here is used to support object using `NS_ROOT_CLASS`, which is not NSObject subclass). If you load image from disk cache, you should check the extended object class to avoid corrupted data. 20 | @warning This object don't need to implements NSSecureCoding (but it's recommended), because we allows arbitrary class. 21 | */ 22 | @property (nonatomic, strong, nullable) id sd_extendedObject; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | 11 | /** 12 | UIImage category for memory cache cost. 13 | */ 14 | @interface UIImage (MemoryCacheCost) 15 | 16 | /** 17 | The memory cache cost for specify image used by image cache. The cost function is the bytes size held in memory. 18 | If you set some associated object to `UIImage`, you can set the custom value to indicate the memory cost. 19 | 20 | For `UIImage`, this method return the single frame bytes size when `image.images` is nil for static image. Return full frame bytes size when `image.images` is not nil for animated image. 21 | For `NSImage`, this method return the single frame bytes size because `NSImage` does not store all frames in memory. 22 | @note Note that because of the limitations of category this property can get out of sync if you create another instance with CGImage or other methods. 23 | @note For custom animated class conforms to `SDAnimatedImage`, you can override this getter method in your subclass to return a more proper value instead, which representing the current frame's total bytes. 24 | */ 25 | @property (assign, nonatomic) NSUInteger sd_memoryCost; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/CoreAnimation/Animations/VisibilityAnimation.swift: -------------------------------------------------------------------------------- 1 | // Created by Cal Stephens on 12/21/21. 2 | // Copyright © 2021 Airbnb Inc. All rights reserved. 3 | 4 | import QuartzCore 5 | 6 | extension CALayer { 7 | /// Adds an animation for the given `inTime` and `outTime` to this `CALayer` 8 | @nonobjc 9 | func addVisibilityAnimation( 10 | inFrame: AnimationFrameTime, 11 | outFrame: AnimationFrameTime, 12 | context: LayerAnimationContext) 13 | { 14 | let animation = CAKeyframeAnimation(keyPath: #keyPath(isHidden)) 15 | animation.calculationMode = .discrete 16 | 17 | animation.values = [ 18 | true, // hidden, before `inFrame` 19 | false, // visible 20 | true, // hidden, after `outFrame` 21 | ] 22 | 23 | // From the documentation of `keyTimes`: 24 | // - If the calculationMode is set to discrete, the first value in the array 25 | // must be 0.0 and the last value must be 1.0. The array should have one more 26 | // entry than appears in the values array. For example, if there are two values, 27 | // there should be three key times. 28 | animation.keyTimes = [ 29 | NSNumber(value: 0.0), 30 | NSNumber(value: max(Double(context.progressTime(for: inFrame)), 0)), 31 | NSNumber(value: min(Double(context.progressTime(for: outFrame)), 1)), 32 | NSNumber(value: 1.0), 33 | ] 34 | 35 | add(animation, timedWith: context) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/ShapeItems/Group.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GroupItem.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/8/19. 6 | // 7 | 8 | import Foundation 9 | 10 | /// An item that define a a group of shape items 11 | final class Group: ShapeItem { 12 | 13 | // MARK: Lifecycle 14 | 15 | required init(from decoder: Decoder) throws { 16 | let container = try decoder.container(keyedBy: Group.CodingKeys.self) 17 | items = try container.decode([ShapeItem].self, ofFamily: ShapeType.self, forKey: .items) 18 | try super.init(from: decoder) 19 | } 20 | 21 | required init(dictionary: [String: Any]) throws { 22 | let itemDictionaries: [[String: Any]] = try dictionary.value(for: CodingKeys.items) 23 | items = try [ShapeItem].fromDictionaries(itemDictionaries) 24 | try super.init(dictionary: dictionary) 25 | } 26 | 27 | init(items: [ShapeItem], name: String) { 28 | self.items = items 29 | super.init(name: name, type: .group, hidden: false) 30 | } 31 | 32 | // MARK: Internal 33 | 34 | /// A list of shape items. 35 | let items: [ShapeItem] 36 | 37 | override func encode(to encoder: Encoder) throws { 38 | try super.encode(to: encoder) 39 | var container = encoder.container(keyedBy: CodingKeys.self) 40 | try container.encode(items, forKey: .items) 41 | } 42 | 43 | // MARK: Private 44 | 45 | private enum CodingKeys: String, CodingKey { 46 | case items = "it" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/Primitives/Vectors.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Vectors.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 2/4/19. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - Vector1D 11 | 12 | @available(*, deprecated, renamed: "LottieVector1D", message: """ 13 | `Lottie.Vector1D` has been renamed to `LottieVector1D` for consistency with \ 14 | the new `LottieVector3D` type. This notice will be removed in Lottie 4.0. 15 | """) 16 | public typealias Vector1D = LottieVector1D 17 | 18 | // MARK: - LottieVector1D 19 | 20 | public struct LottieVector1D: Hashable { 21 | 22 | public init(_ value: Double) { 23 | self.value = value 24 | } 25 | 26 | public let value: Double 27 | 28 | } 29 | 30 | // MARK: - Vector3D 31 | 32 | @available(*, deprecated, renamed: "LottieVector3D", message: """ 33 | `Lottie.Vector3D` has been renamed to `LottieVector3D`, to prevent conflicts with \ 34 | the Apple SDK `Spatial.Vector3D` type. This notice will be removed in Lottie 4.0. 35 | """) 36 | public typealias Vector3D = LottieVector3D 37 | 38 | // MARK: - LottieVector3D 39 | 40 | /// A three dimensional vector. 41 | /// These vectors are encoded and decoded from [Double] 42 | public struct LottieVector3D: Hashable { 43 | 44 | public let x: Double 45 | public let y: Double 46 | public let z: Double 47 | 48 | public init(x: Double, y: Double, z: Double) { 49 | self.x = x 50 | self.y = y 51 | self.z = z 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "UIImage+ForceDecode.h" 10 | #import "SDImageCoderHelper.h" 11 | #import "objc/runtime.h" 12 | 13 | @implementation UIImage (ForceDecode) 14 | 15 | - (BOOL)sd_isDecoded { 16 | NSNumber *value = objc_getAssociatedObject(self, @selector(sd_isDecoded)); 17 | return value.boolValue; 18 | } 19 | 20 | - (void)setSd_isDecoded:(BOOL)sd_isDecoded { 21 | objc_setAssociatedObject(self, @selector(sd_isDecoded), @(sd_isDecoded), OBJC_ASSOCIATION_RETAIN_NONATOMIC); 22 | } 23 | 24 | + (nullable UIImage *)sd_decodedImageWithImage:(nullable UIImage *)image { 25 | if (!image) { 26 | return nil; 27 | } 28 | return [SDImageCoderHelper decodedImageWithImage:image]; 29 | } 30 | 31 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image { 32 | return [self sd_decodedAndScaledDownImageWithImage:image limitBytes:0]; 33 | } 34 | 35 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image limitBytes:(NSUInteger)bytes { 36 | if (!image) { 37 | return nil; 38 | } 39 | return [SDImageCoderHelper decodedAndScaledDownImageWithImage:image limitBytes:bytes]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Utility/Interpolatable/KeyframeExtensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KeyframeExtensions.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/14/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | extension Keyframe where T: AnyInterpolatable { 12 | func interpolate(to: Keyframe, progress: CGFloat) -> T { 13 | value._interpolate( 14 | to: to.value, 15 | amount: progress, 16 | spatialOutTangent: spatialOutTangent?.pointValue, 17 | spatialInTangent: to.spatialInTangent?.pointValue) 18 | } 19 | } 20 | 21 | extension Keyframe { 22 | /// Interpolates the keyTime into a value from 0-1 23 | func interpolatedProgress(_ to: Keyframe, keyTime: CGFloat) -> CGFloat { 24 | let startTime = time 25 | let endTime = to.time 26 | if keyTime <= startTime { 27 | return 0 28 | } 29 | if endTime <= keyTime { 30 | return 1 31 | } 32 | 33 | if isHold { 34 | return 0 35 | } 36 | 37 | let outTanPoint = outTangent?.pointValue ?? .zero 38 | let inTanPoint = to.inTangent?.pointValue ?? CGPoint(x: 1, y: 1) 39 | var progress: CGFloat = keyTime.remap(fromLow: startTime, fromHigh: endTime, toLow: 0, toHigh: 1) 40 | if !outTanPoint.isZero || !inTanPoint.equalTo(CGPoint(x: 1, y: 1)) { 41 | /// Cubic interpolation 42 | progress = progress.cubicBezierInterpolate(.zero, outTanPoint, inTanPoint, CGPoint(x: 1, y: 1)) 43 | } 44 | return progress 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/LayerContainers/CompLayers/ImageCompositionLayer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageCompositionLayer.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/25/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | import QuartzCore 11 | 12 | final class ImageCompositionLayer: CompositionLayer { 13 | 14 | // MARK: Lifecycle 15 | 16 | init(imageLayer: ImageLayerModel, size: CGSize) { 17 | imageReferenceID = imageLayer.referenceID 18 | super.init(layer: imageLayer, size: size) 19 | contentsLayer.masksToBounds = true 20 | contentsLayer.contentsGravity = CALayerContentsGravity.resize 21 | } 22 | 23 | override init(layer: Any) { 24 | /// Used for creating shadow model layers. Read More here: https://developer.apple.com/documentation/quartzcore/calayer/1410842-init 25 | guard let layer = layer as? ImageCompositionLayer else { 26 | fatalError("init(layer:) Wrong Layer Class") 27 | } 28 | imageReferenceID = layer.imageReferenceID 29 | image = nil 30 | super.init(layer: layer) 31 | } 32 | 33 | required init?(coder _: NSCoder) { 34 | fatalError("init(coder:) has not been implemented") 35 | } 36 | 37 | // MARK: Internal 38 | 39 | let imageReferenceID: String 40 | 41 | var image: CGImage? = nil { 42 | didSet { 43 | if let image = image { 44 | contentsLayer.contents = image 45 | } else { 46 | contentsLayer.contents = nil 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/Text/Font.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Font.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/9/19. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - Font 11 | 12 | final class Font: Codable, DictionaryInitializable { 13 | 14 | // MARK: Lifecycle 15 | 16 | init(dictionary: [String: Any]) throws { 17 | name = try dictionary.value(for: CodingKeys.name) 18 | familyName = try dictionary.value(for: CodingKeys.familyName) 19 | style = try dictionary.value(for: CodingKeys.style) 20 | ascent = try dictionary.value(for: CodingKeys.ascent) 21 | } 22 | 23 | // MARK: Internal 24 | 25 | let name: String 26 | let familyName: String 27 | let style: String 28 | let ascent: Double 29 | 30 | // MARK: Private 31 | 32 | private enum CodingKeys: String, CodingKey { 33 | case name = "fName" 34 | case familyName = "fFamily" 35 | case style = "fStyle" 36 | case ascent 37 | } 38 | 39 | } 40 | 41 | // MARK: - FontList 42 | 43 | /// A list of fonts 44 | final class FontList: Codable, DictionaryInitializable { 45 | 46 | // MARK: Lifecycle 47 | 48 | init(dictionary: [String: Any]) throws { 49 | let fontDictionaries: [[String: Any]] = try dictionary.value(for: CodingKeys.fonts) 50 | fonts = try fontDictionaries.map({ try Font(dictionary: $0) }) 51 | } 52 | 53 | // MARK: Internal 54 | 55 | enum CodingKeys: String, CodingKey { 56 | case fonts = "list" 57 | } 58 | 59 | let fonts: [Font] 60 | 61 | } 62 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/ReflectionHelper.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // Helper.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 07/01/2017. 22 | // 23 | 24 | struct ReflectionHelper { 25 | 26 | static func mutableStorage(instance: inout T) -> UnsafeMutableRawPointer { 27 | return UnsafeMutableRawPointer(mutating: storage(instance: &instance)) 28 | } 29 | 30 | static func storage(instance: inout T) -> UnsafeRawPointer { 31 | if type(of: instance) is AnyClass { 32 | let opaquePointer = Unmanaged.passUnretained(instance as AnyObject).toOpaque() 33 | return UnsafeRawPointer(opaquePointer) 34 | } else { 35 | return withUnsafePointer(to: &instance) { pointer in 36 | return UnsafeRawPointer(pointer) 37 | } 38 | } 39 | } 40 | } 41 | 42 | 43 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/LayerContainers/Utility/LayerImageProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LayerImageProvider.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/25/19. 6 | // 7 | 8 | import Foundation 9 | 10 | /// Connects a LottieImageProvider to a group of image layers 11 | final class LayerImageProvider { 12 | 13 | // MARK: Lifecycle 14 | 15 | init(imageProvider: AnimationImageProvider, assets: [String: ImageAsset]?) { 16 | self.imageProvider = imageProvider 17 | imageLayers = [ImageCompositionLayer]() 18 | if let assets = assets { 19 | imageAssets = assets 20 | } else { 21 | imageAssets = [:] 22 | } 23 | reloadImages() 24 | } 25 | 26 | // MARK: Internal 27 | 28 | private(set) var imageLayers: [ImageCompositionLayer] 29 | let imageAssets: [String: ImageAsset] 30 | 31 | var imageProvider: AnimationImageProvider { 32 | didSet { 33 | reloadImages() 34 | } 35 | } 36 | 37 | func addImageLayers(_ layers: [ImageCompositionLayer]) { 38 | for layer in layers { 39 | if imageAssets[layer.imageReferenceID] != nil { 40 | /// Found a linking asset in our asset library. Add layer 41 | imageLayers.append(layer) 42 | } 43 | } 44 | } 45 | 46 | func reloadImages() { 47 | for imageLayer in imageLayers { 48 | if let asset = imageAssets[imageLayer.imageReferenceID] { 49 | imageLayer.image = imageProvider.imageForAsset(asset: asset) 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/ShapeItems/Merge.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Merge.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/8/19. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - MergeMode 11 | 12 | enum MergeMode: Int, Codable { 13 | case none 14 | case merge 15 | case add 16 | case subtract 17 | case intersect 18 | case exclude 19 | } 20 | 21 | // MARK: - Merge 22 | 23 | final class Merge: ShapeItem { 24 | 25 | // MARK: Lifecycle 26 | 27 | required init(from decoder: Decoder) throws { 28 | let container = try decoder.container(keyedBy: Merge.CodingKeys.self) 29 | mode = try container.decode(MergeMode.self, forKey: .mode) 30 | try super.init(from: decoder) 31 | } 32 | 33 | required init(dictionary: [String: Any]) throws { 34 | let modeRawType: Int = try dictionary.value(for: CodingKeys.mode) 35 | guard let mode = MergeMode(rawValue: modeRawType) else { 36 | throw InitializableError.invalidInput 37 | } 38 | self.mode = mode 39 | try super.init(dictionary: dictionary) 40 | } 41 | 42 | // MARK: Internal 43 | 44 | /// The mode of the merge path 45 | let mode: MergeMode 46 | 47 | override func encode(to encoder: Encoder) throws { 48 | try super.encode(to: encoder) 49 | var container = encoder.container(keyedBy: CodingKeys.self) 50 | try container.encode(mode, forKey: .mode) 51 | } 52 | 53 | // MARK: Private 54 | 55 | private enum CodingKeys: String, CodingKey { 56 | case mode = "mm" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDImageIOAnimatedCoder.h" 11 | 12 | // AVFileTypeHEIC/AVFileTypeHEIF is defined in AVFoundation via iOS 11, we use this without import AVFoundation 13 | #define kSDUTTypeHEIC ((__bridge CFStringRef)@"public.heic") 14 | #define kSDUTTypeHEIF ((__bridge CFStringRef)@"public.heif") 15 | // HEIC Sequence (Animated Image) 16 | #define kSDUTTypeHEICS ((__bridge CFStringRef)@"public.heics") 17 | // kUTTypeWebP seems not defined in public UTI framework, Apple use the hardcode string, we define them :) 18 | #define kSDUTTypeWebP ((__bridge CFStringRef)@"org.webmproject.webp") 19 | 20 | @interface SDImageIOAnimatedCoder () 21 | 22 | + (NSTimeInterval)frameDurationAtIndex:(NSUInteger)index source:(nonnull CGImageSourceRef)source; 23 | + (NSUInteger)imageLoopCountWithSource:(nonnull CGImageSourceRef)source; 24 | + (nullable UIImage *)createFrameAtIndex:(NSUInteger)index source:(nonnull CGImageSourceRef)source scale:(CGFloat)scale preserveAspectRatio:(BOOL)preserveAspectRatio thumbnailSize:(CGSize)thumbnailSize options:(nullable NSDictionary *)options; 25 | + (BOOL)canEncodeToFormat:(SDImageFormat)format; 26 | + (BOOL)canDecodeFromFormat:(SDImageFormat)format; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDImageGIFCoder.h" 10 | #if SD_MAC 11 | #import 12 | #else 13 | #import 14 | #endif 15 | 16 | @implementation SDImageGIFCoder 17 | 18 | + (instancetype)sharedCoder { 19 | static SDImageGIFCoder *coder; 20 | static dispatch_once_t onceToken; 21 | dispatch_once(&onceToken, ^{ 22 | coder = [[SDImageGIFCoder alloc] init]; 23 | }); 24 | return coder; 25 | } 26 | 27 | #pragma mark - Subclass Override 28 | 29 | + (SDImageFormat)imageFormat { 30 | return SDImageFormatGIF; 31 | } 32 | 33 | + (NSString *)imageUTType { 34 | return (__bridge NSString *)kUTTypeGIF; 35 | } 36 | 37 | + (NSString *)dictionaryProperty { 38 | return (__bridge NSString *)kCGImagePropertyGIFDictionary; 39 | } 40 | 41 | + (NSString *)unclampedDelayTimeProperty { 42 | return (__bridge NSString *)kCGImagePropertyGIFUnclampedDelayTime; 43 | } 44 | 45 | + (NSString *)delayTimeProperty { 46 | return (__bridge NSString *)kCGImagePropertyGIFDelayTime; 47 | } 48 | 49 | + (NSString *)loopCountProperty { 50 | return (__bridge NSString *)kCGImagePropertyGIFLoopCount; 51 | } 52 | 53 | + (NSUInteger)defaultLoopCount { 54 | return 1; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDImageAPNGCoder.h" 10 | #if SD_MAC 11 | #import 12 | #else 13 | #import 14 | #endif 15 | 16 | @implementation SDImageAPNGCoder 17 | 18 | + (instancetype)sharedCoder { 19 | static SDImageAPNGCoder *coder; 20 | static dispatch_once_t onceToken; 21 | dispatch_once(&onceToken, ^{ 22 | coder = [[SDImageAPNGCoder alloc] init]; 23 | }); 24 | return coder; 25 | } 26 | 27 | #pragma mark - Subclass Override 28 | 29 | + (SDImageFormat)imageFormat { 30 | return SDImageFormatPNG; 31 | } 32 | 33 | + (NSString *)imageUTType { 34 | return (__bridge NSString *)kUTTypePNG; 35 | } 36 | 37 | + (NSString *)dictionaryProperty { 38 | return (__bridge NSString *)kCGImagePropertyPNGDictionary; 39 | } 40 | 41 | + (NSString *)unclampedDelayTimeProperty { 42 | return (__bridge NSString *)kCGImagePropertyAPNGUnclampedDelayTime; 43 | } 44 | 45 | + (NSString *)delayTimeProperty { 46 | return (__bridge NSString *)kCGImagePropertyAPNGDelayTime; 47 | } 48 | 49 | + (NSString *)loopCountProperty { 50 | return (__bridge NSString *)kCGImagePropertyAPNGLoopCount; 51 | } 52 | 53 | + (NSUInteger)defaultLoopCount { 54 | return 0; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | public typealias ConstraintView = UIView 33 | #else 34 | public typealias ConstraintView = NSView 35 | #endif 36 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintInsets.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | public typealias ConstraintInsets = UIEdgeInsets 33 | #else 34 | public typealias ConstraintInsets = NSEdgeInsets 35 | #endif 36 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintDirectionalInsets.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 11.0, tvOS 11.0, *) 33 | public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets 34 | #endif 35 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "UIImage+MemoryCacheCost.h" 10 | #import "objc/runtime.h" 11 | #import "NSImage+Compatibility.h" 12 | 13 | FOUNDATION_STATIC_INLINE NSUInteger SDMemoryCacheCostForImage(UIImage *image) { 14 | CGImageRef imageRef = image.CGImage; 15 | if (!imageRef) { 16 | return 0; 17 | } 18 | NSUInteger bytesPerFrame = CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef); 19 | NSUInteger frameCount; 20 | #if SD_MAC 21 | frameCount = 1; 22 | #elif SD_UIKIT || SD_WATCH 23 | frameCount = image.images.count > 0 ? image.images.count : 1; 24 | #endif 25 | NSUInteger cost = bytesPerFrame * frameCount; 26 | return cost; 27 | } 28 | 29 | @implementation UIImage (MemoryCacheCost) 30 | 31 | - (NSUInteger)sd_memoryCost { 32 | NSNumber *value = objc_getAssociatedObject(self, @selector(sd_memoryCost)); 33 | NSUInteger memoryCost; 34 | if (value != nil) { 35 | memoryCost = [value unsignedIntegerValue]; 36 | } else { 37 | memoryCost = SDMemoryCacheCostForImage(self); 38 | } 39 | return memoryCost; 40 | } 41 | 42 | - (void)setSd_memoryCost:(NSUInteger)sd_memoryCost { 43 | objc_setAssociatedObject(self, @selector(sd_memoryCost), @(sd_memoryCost), OBJC_ASSOCIATION_RETAIN_NONATOMIC); 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/NodeProperties/NodeProperty.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NodeProperty.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/30/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | /// A node property that holds a reference to a T ValueProvider and a T ValueContainer. 12 | class NodeProperty: AnyNodeProperty { 13 | 14 | // MARK: Lifecycle 15 | 16 | init(provider: AnyValueProvider) { 17 | valueProvider = provider 18 | originalValueProvider = valueProvider 19 | typedContainer = ValueContainer(provider.value(frame: 0) as! T) 20 | typedContainer.setNeedsUpdate() 21 | } 22 | 23 | // MARK: Internal 24 | 25 | var valueProvider: AnyValueProvider 26 | var originalValueProvider: AnyValueProvider 27 | 28 | var valueType: Any.Type { T.self } 29 | 30 | var value: T { 31 | typedContainer.outputValue 32 | } 33 | 34 | var valueContainer: AnyValueContainer { 35 | typedContainer 36 | } 37 | 38 | func needsUpdate(frame: CGFloat) -> Bool { 39 | valueContainer.needsUpdate || valueProvider.hasUpdate(frame: frame) 40 | } 41 | 42 | func setProvider(provider: AnyValueProvider) { 43 | guard provider.valueType == valueType else { return } 44 | valueProvider = provider 45 | valueContainer.setNeedsUpdate() 46 | } 47 | 48 | func update(frame: CGFloat) { 49 | typedContainer.setValue(valueProvider.value(frame: frame), forFrame: frame) 50 | } 51 | 52 | // MARK: Fileprivate 53 | 54 | fileprivate var typedContainer: ValueContainer 55 | } 56 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/TransformType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransformType.swift 3 | // ObjectMapper 4 | // 5 | // Created by Syo Ikeda on 2/4/15. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2016 Hearst 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | public protocol TransformType { 30 | associatedtype Object 31 | associatedtype JSON 32 | 33 | func transformFromJSON(_ value: Any?) -> Object? 34 | func transformToJSON(_ value: Object?) -> JSON? 35 | } 36 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 10 | #import "SDWebImageCompat.h" 11 | 12 | typedef NSData * _Nullable(^SDWebImageCacheSerializerBlock)(UIImage * _Nonnull image, NSData * _Nullable data, NSURL * _Nullable imageURL); 13 | 14 | /** 15 | This is the protocol for cache serializer. 16 | We can use a block to specify the cache serializer. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. 17 | */ 18 | @protocol SDWebImageCacheSerializer 19 | 20 | /// Provide the image data associated to the image and store to disk cache 21 | /// @param image The loaded image 22 | /// @param data The original loaded image data 23 | /// @param imageURL The image URL 24 | - (nullable NSData *)cacheDataWithImage:(nonnull UIImage *)image originalData:(nullable NSData *)data imageURL:(nullable NSURL *)imageURL; 25 | 26 | @end 27 | 28 | /** 29 | A cache serializer class with block. 30 | */ 31 | @interface SDWebImageCacheSerializer : NSObject 32 | 33 | - (nonnull instancetype)initWithBlock:(nonnull SDWebImageCacheSerializerBlock)block; 34 | + (nonnull instancetype)cacheSerializerWithBlock:(nonnull SDWebImageCacheSerializerBlock)block; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnyNodeProperty.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/30/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | // MARK: - AnyNodeProperty 12 | 13 | /// A property of a node. The node property holds a provider and a container 14 | protocol AnyNodeProperty { 15 | 16 | /// Returns true if the property needs to recompute its stored value 17 | func needsUpdate(frame: CGFloat) -> Bool 18 | 19 | /// Updates the property for the frame 20 | func update(frame: CGFloat) 21 | 22 | /// The stored value container for the property 23 | var valueContainer: AnyValueContainer { get } 24 | 25 | /// The value provider for the property 26 | var valueProvider: AnyValueProvider { get } 27 | 28 | /// The original value provider for the property 29 | var originalValueProvider: AnyValueProvider { get } 30 | 31 | /// The Type of the value provider 32 | var valueType: Any.Type { get } 33 | 34 | /// Sets the value provider for the property. 35 | func setProvider(provider: AnyValueProvider) 36 | } 37 | 38 | extension AnyNodeProperty { 39 | 40 | /// Returns the most recently computed value for the keypath, returns nil if property wasn't found 41 | func getValueOfType() -> T? { 42 | valueContainer.value as? T 43 | } 44 | 45 | /// Returns the most recently computed value for the keypath, returns nil if property wasn't found 46 | func getValue() -> Any? { 47 | valueContainer.value 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/UILayoutSupport+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 8.0, *) 30 | public extension ConstraintLayoutSupport { 31 | 32 | var snp: ConstraintLayoutSupportDSL { 33 | return ConstraintLayoutSupportDSL(support: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FillRenderer.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/30/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | import QuartzCore 11 | 12 | extension FillRule { 13 | var cgFillRule: CGPathFillRule { 14 | switch self { 15 | case .evenOdd: 16 | return .evenOdd 17 | default: 18 | return .winding 19 | } 20 | } 21 | 22 | var caFillRule: CAShapeLayerFillRule { 23 | switch self { 24 | case .evenOdd: 25 | return CAShapeLayerFillRule.evenOdd 26 | default: 27 | return CAShapeLayerFillRule.nonZero 28 | } 29 | } 30 | } 31 | 32 | // MARK: - FillRenderer 33 | 34 | /// A rendered for a Path Fill 35 | final class FillRenderer: PassThroughOutputNode, Renderable { 36 | var shouldRenderInContext = false 37 | 38 | var color: CGColor? { 39 | didSet { 40 | hasUpdate = true 41 | } 42 | } 43 | 44 | var opacity: CGFloat = 0 { 45 | didSet { 46 | hasUpdate = true 47 | } 48 | } 49 | 50 | var fillRule: FillRule = .none { 51 | didSet { 52 | hasUpdate = true 53 | } 54 | } 55 | 56 | func render(_: CGContext) { 57 | // do nothing 58 | } 59 | 60 | func setupSublayers(layer _: CAShapeLayer) { 61 | // do nothing 62 | } 63 | 64 | func updateShapeLayer(layer: CAShapeLayer) { 65 | layer.fillColor = color 66 | layer.opacity = Float(opacity) 67 | layer.fillRule = fillRule.caFillRule 68 | hasUpdate = false 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintLayoutSupport.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 8.0, *) 33 | public typealias ConstraintLayoutSupport = UILayoutSupport 34 | #else 35 | public class ConstraintLayoutSupport {} 36 | #endif 37 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/Model/DictionaryInitializable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DictionaryInitializable.swift 3 | // Lottie 4 | // 5 | // Created by Marcelo Fabri on 5/5/22. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - InitializableError 11 | 12 | enum InitializableError: Error { 13 | case invalidInput 14 | } 15 | 16 | // MARK: - DictionaryInitializable 17 | 18 | protocol DictionaryInitializable { 19 | 20 | init(dictionary: [String: Any]) throws 21 | 22 | } 23 | 24 | // MARK: - AnyInitializable 25 | 26 | protocol AnyInitializable { 27 | 28 | init(value: Any) throws 29 | 30 | } 31 | 32 | extension Dictionary { 33 | 34 | @_disfavoredOverload 35 | func value(for key: KeyType) throws -> T where KeyType.RawValue == Key { 36 | guard let value = self[key.rawValue] as? T else { 37 | throw InitializableError.invalidInput 38 | } 39 | return value 40 | } 41 | 42 | func value(for key: KeyType) throws -> T where KeyType.RawValue == Key { 43 | if let value = self[key.rawValue] as? T { 44 | return value 45 | } 46 | 47 | if let value = self[key.rawValue] { 48 | return try T(value: value) 49 | } 50 | 51 | throw InitializableError.invalidInput 52 | } 53 | 54 | } 55 | 56 | // MARK: - Array + AnyInitializable 57 | 58 | extension Array: AnyInitializable where Element == Double { 59 | 60 | init(value: Any) throws { 61 | guard let array = value as? [Double] else { 62 | throw InitializableError.invalidInput 63 | } 64 | self = array 65 | } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 9.0, OSX 10.11, *) 30 | public extension ConstraintLayoutGuide { 31 | 32 | var snp: ConstraintLayoutGuideDSL { 33 | return ConstraintLayoutGuideDSL(guide: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift: -------------------------------------------------------------------------------- 1 | // Created by Jianjun Wu on 2022/5/12. 2 | // Copyright © 2022 Airbnb Inc. All rights reserved. 3 | 4 | import CoreGraphics 5 | import Foundation 6 | 7 | // MARK: - CachedImageProvider 8 | 9 | private final class CachedImageProvider: AnimationImageProvider { 10 | 11 | // MARK: Lifecycle 12 | 13 | /// Initializes an image provider with an image provider 14 | /// 15 | /// - Parameter imageProvider: The provider to load image from asset 16 | /// 17 | public init(imageProvider: AnimationImageProvider) { 18 | self.imageProvider = imageProvider 19 | } 20 | 21 | // MARK: Public 22 | 23 | public func imageForAsset(asset: ImageAsset) -> CGImage? { 24 | if let image = imageCache.object(forKey: asset.id as NSString) { 25 | return image 26 | } 27 | if let image = imageProvider.imageForAsset(asset: asset) { 28 | imageCache.setObject(image, forKey: asset.id as NSString) 29 | return image 30 | } 31 | return nil 32 | } 33 | 34 | // MARK: Internal 35 | 36 | let imageCache: NSCache = .init() 37 | let imageProvider: AnimationImageProvider 38 | } 39 | 40 | extension AnimationImageProvider { 41 | /// Create a cache enabled image provider which will reuse the asset image with the same asset id 42 | /// It wraps the current provider as image loader, and uses `NSCache` to cache the images for resue. 43 | /// The cache will be reset when the `animation` is reset. 44 | var cachedImageProvider: AnimationImageProvider { 45 | CachedImageProvider(imageProvider: self) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | 11 | /** 12 | UIImage category about force decode feature (avoid Image/IO's lazy decoding during rendering behavior). 13 | */ 14 | @interface UIImage (ForceDecode) 15 | 16 | /** 17 | A bool value indicating whether the image has already been decoded. This can help to avoid extra force decode. 18 | */ 19 | @property (nonatomic, assign) BOOL sd_isDecoded; 20 | 21 | /** 22 | Decode the provided image. This is useful if you want to force decode the image before rendering to improve performance. 23 | 24 | @param image The image to be decoded 25 | @return The decoded image 26 | */ 27 | + (nullable UIImage *)sd_decodedImageWithImage:(nullable UIImage *)image; 28 | 29 | /** 30 | Decode and scale down the provided image 31 | 32 | @param image The image to be decoded 33 | @return The decoded and scaled down image 34 | */ 35 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image; 36 | 37 | /** 38 | Decode and scale down the provided image with limit bytes 39 | 40 | @param image The image to be decoded 41 | @param bytes The limit bytes size. Provide 0 to use the build-in limit. 42 | @return The decoded and scaled down image 43 | */ 44 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image limitBytes:(NSUInteger)bytes; 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintLayoutGuide.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 9.0, *) 33 | public typealias ConstraintLayoutGuide = UILayoutGuide 34 | #else 35 | @available(OSX 10.11, *) 36 | public typealias ConstraintLayoutGuide = NSLayoutGuide 37 | #endif 38 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemoUITests/FJFSwiftBlogDemoUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FJFSwiftBlogDemoUITests.swift 3 | // FJFSwiftBlogDemoUITests 4 | // 5 | // Created by peakfang on 2021/11/2. 6 | // 7 | 8 | import XCTest 9 | 10 | class FJFSwiftBlogDemoUITests: XCTestCase { 11 | 12 | override func setUpWithError() throws { 13 | // Put setup code here. This method is called before the invocation of each test method in the class. 14 | 15 | // In UI tests it is usually best to stop immediately when a failure occurs. 16 | continueAfterFailure = false 17 | 18 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 19 | } 20 | 21 | override func tearDownWithError() throws { 22 | // Put teardown code here. This method is called after the invocation of each test method in the class. 23 | } 24 | 25 | func testExample() throws { 26 | // UI tests must launch the application that they test. 27 | let app = XCUIApplication() 28 | app.launch() 29 | 30 | // Use recording to get started writing UI tests. 31 | // Use XCTAssert and related functions to verify your tests produce the correct results. 32 | } 33 | 34 | func testLaunchPerformance() throws { 35 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { 36 | // This measures how long it takes to launch your application. 37 | measure(metrics: [XCTApplicationLaunchMetric()]) { 38 | XCUIApplication().launch() 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/Configuration.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // Configuration.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 08/01/2017. 22 | // 23 | 24 | public struct DeserializeOptions: OptionSet { 25 | public let rawValue: Int 26 | 27 | public static let caseInsensitive = DeserializeOptions(rawValue: 1 << 0) 28 | 29 | public static let defaultOptions: DeserializeOptions = [] 30 | 31 | public init(rawValue: Int) { 32 | self.rawValue = rawValue 33 | } 34 | } 35 | 36 | public enum DebugMode: Int { 37 | case verbose = 0 38 | case debug = 1 39 | case error = 2 40 | case none = 3 41 | } 42 | 43 | public struct HandyJSONConfiguration { 44 | 45 | private static var _mode = DebugMode.error 46 | public static var debugMode: DebugMode { 47 | get { 48 | return _mode 49 | } 50 | set { 51 | _mode = newValue 52 | } 53 | } 54 | 55 | public static var deserializeOptions: DeserializeOptions = .defaultOptions 56 | } 57 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 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 "SDWebImageCompat.h" 10 | #import 11 | 12 | /** 13 | These following graphics context method are provided to easily write cross-platform(AppKit/UIKit) code. 14 | For UIKit, these methods just call the same method in `UIGraphics.h`. See the documentation for usage. 15 | For AppKit, these methods use `NSGraphicsContext` to create image context and match the behavior like UIKit. 16 | @note If you don't care bitmap format (ARGB8888) and just draw image, use `SDGraphicsImageRenderer` instead. It's more performant on RAM usage.` 17 | */ 18 | 19 | /// Returns the current graphics context. 20 | FOUNDATION_EXPORT CGContextRef __nullable SDGraphicsGetCurrentContext(void) CF_RETURNS_NOT_RETAINED; 21 | /// Creates a bitmap-based graphics context and makes it the current context. 22 | FOUNDATION_EXPORT void SDGraphicsBeginImageContext(CGSize size); 23 | /// Creates a bitmap-based graphics context with the specified options. 24 | FOUNDATION_EXPORT void SDGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale); 25 | /// Removes the current bitmap-based graphics context from the top of the stack. 26 | FOUNDATION_EXPORT void SDGraphicsEndImageContext(void); 27 | /// Returns an image based on the contents of the current bitmap-based graphics context. 28 | FOUNDATION_EXPORT UIImage * __nullable SDGraphicsGetImageFromCurrentImageContext(void); 29 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift: -------------------------------------------------------------------------------- 1 | // Created by Cal Stephens on 1/11/22. 2 | // Copyright © 2022 Airbnb Inc. All rights reserved. 3 | 4 | // MARK: - KeyframeGroup + exactlyOneKeyframe 5 | 6 | extension KeyframeGroup { 7 | /// Retrieves the first `Keyframe` from this group, 8 | /// and asserts that there are not any extra keyframes that would be ignored 9 | /// 10 | /// - There are several places in Lottie animation definitions where multiple 11 | /// sets of keyframe timings can be provided for properties that have to 12 | /// be applied to a single `CALayer` property (for example, the definition for a 13 | /// `Rectangle` technically lets you animate `size`, `position`, and `cornerRadius` 14 | /// separately, but these all have to be combined into a single `CAKeyframeAnimation` 15 | /// on the `CAShapeLayer.path` property. 16 | /// 17 | /// - In those sorts of cases, we currently choose one one `KeyframeGroup` to provide the 18 | /// timing information, and disallow simultaneous animations on the other properties. 19 | /// 20 | func exactlyOneKeyframe( 21 | context: CompatibilityTrackerProviding, 22 | description: String, 23 | fileID _: StaticString = #fileID, 24 | line _: UInt = #line) 25 | throws 26 | -> T 27 | { 28 | try context.compatibilityAssert( 29 | keyframes.count == 1, 30 | """ 31 | The Core Animation rendering engine does not support animating multiple keyframes 32 | for \(description) values (due to limitations of Core Animation `CAKeyframeAnimation`s). 33 | """) 34 | 35 | return keyframes[0].value 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/CoreAnimation/Layers/SolidLayer.swift: -------------------------------------------------------------------------------- 1 | // Created by Cal Stephens on 12/13/21. 2 | // Copyright © 2021 Airbnb Inc. All rights reserved. 3 | 4 | import QuartzCore 5 | 6 | // MARK: - SolidLayer 7 | 8 | final class SolidLayer: BaseCompositionLayer { 9 | 10 | // MARK: Lifecycle 11 | 12 | init(_ solidLayer: SolidLayerModel) { 13 | self.solidLayer = solidLayer 14 | super.init(layerModel: solidLayer) 15 | setupContentLayer() 16 | } 17 | 18 | required init?(coder _: NSCoder) { 19 | fatalError("init(coder:) has not been implemented") 20 | } 21 | 22 | /// Called by CoreAnimation to create a shadow copy of this layer 23 | /// More details: https://developer.apple.com/documentation/quartzcore/calayer/1410842-init 24 | override init(layer: Any) { 25 | guard let typedLayer = layer as? Self else { 26 | fatalError("\(Self.self).init(layer:) incorrectly called with \(type(of: layer))") 27 | } 28 | 29 | solidLayer = typedLayer.solidLayer 30 | super.init(layer: typedLayer) 31 | } 32 | 33 | // MARK: Private 34 | 35 | private let solidLayer: SolidLayerModel 36 | 37 | private func setupContentLayer() { 38 | // Render the fill color in a child `CAShapeLayer` 39 | // - Using a `CAShapeLayer` specifically, instead of a `CALayer` with a `backgroundColor`, 40 | // allows the size of the fill shape to be different from `contentsLayer.size`. 41 | let shapeLayer = CAShapeLayer() 42 | shapeLayer.fillColor = solidLayer.colorHex.cgColor 43 | shapeLayer.path = CGPath(rect: .init(x: 0, y: 0, width: solidLayer.width, height: solidLayer.height), transform: nil) 44 | addSublayer(shapeLayer) 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/AnimationCache/LRUAnimationCache.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LRUAnimationCache.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 2/5/19. 6 | // 7 | 8 | import Foundation 9 | 10 | /// An Animation Cache that will store animations up to `cacheSize`. 11 | /// 12 | /// Once `cacheSize` is reached, the least recently used animation will be ejected. 13 | /// The default size of the cache is 100. 14 | public class LRUAnimationCache: AnimationCacheProvider { 15 | 16 | // MARK: Lifecycle 17 | 18 | public init() { } 19 | 20 | // MARK: Public 21 | 22 | /// The global shared Cache. 23 | public static let sharedCache = LRUAnimationCache() 24 | 25 | /// The size of the cache. 26 | public var cacheSize = 100 27 | 28 | /// Clears the Cache. 29 | public func clearCache() { 30 | cacheMap.removeAll() 31 | lruList.removeAll() 32 | } 33 | 34 | public func animation(forKey: String) -> LottieAnimation? { 35 | guard let animation = cacheMap[forKey] else { 36 | return nil 37 | } 38 | if let index = lruList.firstIndex(of: forKey) { 39 | lruList.remove(at: index) 40 | lruList.append(forKey) 41 | } 42 | return animation 43 | } 44 | 45 | public func setAnimation(_ animation: LottieAnimation, forKey: String) { 46 | cacheMap[forKey] = animation 47 | lruList.append(forKey) 48 | if lruList.count > cacheSize { 49 | let removed = lruList.remove(at: 0) 50 | if removed != forKey { 51 | cacheMap[removed] = nil 52 | } 53 | } 54 | } 55 | 56 | // MARK: Fileprivate 57 | 58 | fileprivate var cacheMap: [String: LottieAnimation] = [:] 59 | fileprivate var lruList: [String] = [] 60 | 61 | } 62 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/Logger.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // Logger.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 08/01/2017. 22 | // 23 | 24 | struct InternalLogger { 25 | 26 | static func logError(_ items: Any..., separator: String = " ", terminator: String = "\n") { 27 | if HandyJSONConfiguration.debugMode.rawValue <= DebugMode.error.rawValue { 28 | print(items, separator: separator, terminator: terminator) 29 | } 30 | } 31 | 32 | static func logDebug(_ items: Any..., separator: String = " ", terminator: String = "\n") { 33 | if HandyJSONConfiguration.debugMode.rawValue <= DebugMode.debug.rawValue { 34 | print(items, separator: separator, terminator: terminator) 35 | } 36 | } 37 | 38 | static func logVerbose(_ items: Any..., separator: String = " ", terminator: String = "\n") { 39 | if HandyJSONConfiguration.debugMode.rawValue <= DebugMode.verbose.rawValue { 40 | print(items, separator: separator, terminator: terminator) 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Private/MainThread/LayerContainers/Utility/InvertedMatteLayer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InvertedMatteLayer.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 1/28/19. 6 | // 7 | 8 | import Foundation 9 | import QuartzCore 10 | 11 | /// A layer that inverses the alpha output of its input layer. 12 | /// 13 | /// WARNING: This is experimental and probably not very performant. 14 | final class InvertedMatteLayer: CALayer, CompositionLayerDelegate { 15 | 16 | // MARK: Lifecycle 17 | 18 | init(inputMatte: CompositionLayer) { 19 | self.inputMatte = inputMatte 20 | super.init() 21 | inputMatte.layerDelegate = self 22 | anchorPoint = .zero 23 | bounds = inputMatte.bounds 24 | setNeedsDisplay() 25 | } 26 | 27 | override init(layer: Any) { 28 | guard let layer = layer as? InvertedMatteLayer else { 29 | fatalError("init(layer:) wrong class.") 30 | } 31 | inputMatte = nil 32 | super.init(layer: layer) 33 | } 34 | 35 | required init?(coder _: NSCoder) { 36 | fatalError("init(coder:) has not been implemented") 37 | } 38 | 39 | // MARK: Internal 40 | 41 | let inputMatte: CompositionLayer? 42 | let wrapperLayer = CALayer() 43 | 44 | func frameUpdated(frame _: CGFloat) { 45 | setNeedsDisplay() 46 | displayIfNeeded() 47 | } 48 | 49 | override func draw(in ctx: CGContext) { 50 | guard let inputMatte = inputMatte else { return } 51 | guard let fillColor = CGColor(colorSpace: CGColorSpaceCreateDeviceRGB(), components: [0, 0, 0, 1]) 52 | else { return } 53 | ctx.setFillColor(fillColor) 54 | ctx.fill(bounds) 55 | ctx.setBlendMode(.destinationOut) 56 | inputMatte.render(in: ctx) 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /Pods/lottie-ios/Sources/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SizeValueProvider.swift 3 | // lottie-swift 4 | // 5 | // Created by Brandon Withrow on 2/4/19. 6 | // 7 | 8 | import CoreGraphics 9 | import Foundation 10 | 11 | /// A `ValueProvider` that returns a CGSize Value 12 | public final class SizeValueProvider: ValueProvider { 13 | 14 | // MARK: Lifecycle 15 | 16 | /// Initializes with a block provider 17 | public init(block: @escaping SizeValueBlock) { 18 | self.block = block 19 | size = .zero 20 | } 21 | 22 | /// Initializes with a single size. 23 | public init(_ size: CGSize) { 24 | self.size = size 25 | block = nil 26 | hasUpdate = true 27 | } 28 | 29 | // MARK: Public 30 | 31 | /// Returns a CGSize for a CGFloat(Frame Time) 32 | public typealias SizeValueBlock = (CGFloat) -> CGSize 33 | 34 | public var size: CGSize { 35 | didSet { 36 | hasUpdate = true 37 | } 38 | } 39 | 40 | // MARK: ValueProvider Protocol 41 | 42 | public var valueType: Any.Type { 43 | LottieVector3D.self 44 | } 45 | 46 | public var storage: ValueProviderStorage { 47 | if let block = block { 48 | return .closure { frame in 49 | self.hasUpdate = false 50 | return block(frame).vector3dValue 51 | } 52 | } else { 53 | hasUpdate = false 54 | return .singleValue(size.vector3dValue) 55 | } 56 | } 57 | 58 | public func hasUpdate(frame _: CGFloat) -> Bool { 59 | if block != nil { 60 | return true 61 | } 62 | return hasUpdate 63 | } 64 | 65 | // MARK: Private 66 | 67 | private var hasUpdate = true 68 | 69 | private var block: SizeValueBlock? 70 | } 71 | -------------------------------------------------------------------------------- /FJFSwiftBlogDemo/FJFSwiftBlog/FJFImageLabelViewDemo/FJFImageLabelViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FJFImageLabelViewController.swift 3 | // FJFTestBlogDemo 4 | // 5 | // Created by peakfang on 2021/10/29. 6 | // 7 | 8 | import UIKit 9 | 10 | class FJFImageLabelViewController: UIViewController { 11 | 12 | // MARK: - Life 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | self.view.addSubview(self.imageLabelView) 18 | imageLabelView.snp.makeConstraints { make in 19 | make.centerY.equalTo(self.view) 20 | make.centerX.equalTo(self.view) 21 | make.width.equalTo(80) 22 | make.height.equalTo(60) 23 | } 24 | imageLabelView.backgroundColor = .red 25 | self.title = "imageLabelView" 26 | self.view.backgroundColor = .white 27 | } 28 | 29 | // MARK: - Lazy 30 | lazy var imageLabelView: FJFImageLabelView = { 31 | let imageLabelView = FJFImageLabelView.init() 32 | imageLabelView.viewStyle.isUserInteractionEnabled = false 33 | imageLabelView.viewStyle.title = "添加" 34 | imageLabelView.viewStyle.layoutType = .leftRight 35 | imageLabelView.viewStyle.edgeSpacing = 12 36 | imageLabelView.viewStyle.contentAlignment = .right 37 | imageLabelView.viewStyle.imageSize = CGSize.init(width: 14, height: 14) 38 | imageLabelView.viewStyle.iconImage = UIImage.init(named: "fjf_address_add_icon") 39 | imageLabelView.updateViewControls() 40 | imageLabelView.tapViewClosure = { [weak self] (sender) in 41 | 42 | } 43 | return imageLabelView 44 | }() 45 | 46 | } 47 | --------------------------------------------------------------------------------