├── .gitignore ├── LICENSE ├── Podfile ├── Podfile.lock ├── Pods ├── Manifest.lock ├── Pods.xcodeproj │ └── project.pbxproj ├── SDWebImage │ ├── LICENSE │ ├── README.md │ ├── SDWebImage │ │ ├── Core │ │ │ ├── NSButton+WebCache.h │ │ │ ├── NSButton+WebCache.m │ │ │ ├── NSData+ImageContentType.h │ │ │ ├── NSData+ImageContentType.m │ │ │ ├── NSImage+Compatibility.h │ │ │ ├── NSImage+Compatibility.m │ │ │ ├── SDAnimatedImage.h │ │ │ ├── SDAnimatedImage.m │ │ │ ├── SDAnimatedImagePlayer.h │ │ │ ├── SDAnimatedImagePlayer.m │ │ │ ├── SDAnimatedImageRep.h │ │ │ ├── SDAnimatedImageRep.m │ │ │ ├── SDAnimatedImageView+WebCache.h │ │ │ ├── SDAnimatedImageView+WebCache.m │ │ │ ├── SDAnimatedImageView.h │ │ │ ├── SDAnimatedImageView.m │ │ │ ├── SDCallbackQueue.h │ │ │ ├── SDCallbackQueue.m │ │ │ ├── SDDiskCache.h │ │ │ ├── SDDiskCache.m │ │ │ ├── SDGraphicsImageRenderer.h │ │ │ ├── SDGraphicsImageRenderer.m │ │ │ ├── SDImageAPNGCoder.h │ │ │ ├── SDImageAPNGCoder.m │ │ │ ├── SDImageAWebPCoder.h │ │ │ ├── SDImageAWebPCoder.m │ │ │ ├── SDImageCache.h │ │ │ ├── SDImageCache.m │ │ │ ├── SDImageCacheConfig.h │ │ │ ├── SDImageCacheConfig.m │ │ │ ├── SDImageCacheDefine.h │ │ │ ├── SDImageCacheDefine.m │ │ │ ├── SDImageCachesManager.h │ │ │ ├── SDImageCachesManager.m │ │ │ ├── SDImageCoder.h │ │ │ ├── SDImageCoder.m │ │ │ ├── SDImageCoderHelper.h │ │ │ ├── SDImageCoderHelper.m │ │ │ ├── SDImageCodersManager.h │ │ │ ├── SDImageCodersManager.m │ │ │ ├── SDImageFrame.h │ │ │ ├── SDImageFrame.m │ │ │ ├── SDImageGIFCoder.h │ │ │ ├── SDImageGIFCoder.m │ │ │ ├── SDImageGraphics.h │ │ │ ├── SDImageGraphics.m │ │ │ ├── SDImageHEICCoder.h │ │ │ ├── SDImageHEICCoder.m │ │ │ ├── SDImageIOAnimatedCoder.h │ │ │ ├── SDImageIOAnimatedCoder.m │ │ │ ├── SDImageIOCoder.h │ │ │ ├── SDImageIOCoder.m │ │ │ ├── SDImageLoader.h │ │ │ ├── SDImageLoader.m │ │ │ ├── SDImageLoadersManager.h │ │ │ ├── SDImageLoadersManager.m │ │ │ ├── SDImageTransformer.h │ │ │ ├── SDImageTransformer.m │ │ │ ├── SDMemoryCache.h │ │ │ ├── SDMemoryCache.m │ │ │ ├── SDWebImageCacheKeyFilter.h │ │ │ ├── SDWebImageCacheKeyFilter.m │ │ │ ├── SDWebImageCacheSerializer.h │ │ │ ├── SDWebImageCacheSerializer.m │ │ │ ├── SDWebImageCompat.h │ │ │ ├── SDWebImageCompat.m │ │ │ ├── SDWebImageDefine.h │ │ │ ├── SDWebImageDefine.m │ │ │ ├── SDWebImageDownloader.h │ │ │ ├── SDWebImageDownloader.m │ │ │ ├── SDWebImageDownloaderConfig.h │ │ │ ├── SDWebImageDownloaderConfig.m │ │ │ ├── SDWebImageDownloaderDecryptor.h │ │ │ ├── SDWebImageDownloaderDecryptor.m │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ ├── SDWebImageDownloaderOperation.m │ │ │ ├── SDWebImageDownloaderRequestModifier.h │ │ │ ├── SDWebImageDownloaderRequestModifier.m │ │ │ ├── SDWebImageDownloaderResponseModifier.h │ │ │ ├── SDWebImageDownloaderResponseModifier.m │ │ │ ├── SDWebImageError.h │ │ │ ├── SDWebImageError.m │ │ │ ├── SDWebImageIndicator.h │ │ │ ├── SDWebImageIndicator.m │ │ │ ├── SDWebImageManager.h │ │ │ ├── SDWebImageManager.m │ │ │ ├── SDWebImageOperation.h │ │ │ ├── SDWebImageOperation.m │ │ │ ├── SDWebImageOptionsProcessor.h │ │ │ ├── SDWebImageOptionsProcessor.m │ │ │ ├── SDWebImagePrefetcher.h │ │ │ ├── SDWebImagePrefetcher.m │ │ │ ├── SDWebImageTransition.h │ │ │ ├── SDWebImageTransition.m │ │ │ ├── UIButton+WebCache.h │ │ │ ├── UIButton+WebCache.m │ │ │ ├── UIImage+ExtendedCacheData.h │ │ │ ├── UIImage+ExtendedCacheData.m │ │ │ ├── UIImage+ForceDecode.h │ │ │ ├── UIImage+ForceDecode.m │ │ │ ├── UIImage+GIF.h │ │ │ ├── UIImage+GIF.m │ │ │ ├── UIImage+MemoryCacheCost.h │ │ │ ├── UIImage+MemoryCacheCost.m │ │ │ ├── UIImage+Metadata.h │ │ │ ├── UIImage+Metadata.m │ │ │ ├── UIImage+MultiFormat.h │ │ │ ├── UIImage+MultiFormat.m │ │ │ ├── UIImage+Transform.h │ │ │ ├── UIImage+Transform.m │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ ├── UIImageView+HighlightedWebCache.m │ │ │ ├── UIImageView+WebCache.h │ │ │ ├── UIImageView+WebCache.m │ │ │ ├── UIView+WebCache.h │ │ │ ├── UIView+WebCache.m │ │ │ ├── UIView+WebCacheOperation.h │ │ │ ├── UIView+WebCacheOperation.m │ │ │ ├── UIView+WebCacheState.h │ │ │ └── UIView+WebCacheState.m │ │ └── Private │ │ │ ├── NSBezierPath+SDRoundedCorners.h │ │ │ ├── NSBezierPath+SDRoundedCorners.m │ │ │ ├── SDAssociatedObject.h │ │ │ ├── SDAssociatedObject.m │ │ │ ├── SDAsyncBlockOperation.h │ │ │ ├── SDAsyncBlockOperation.m │ │ │ ├── SDDeviceHelper.h │ │ │ ├── SDDeviceHelper.m │ │ │ ├── SDDisplayLink.h │ │ │ ├── SDDisplayLink.m │ │ │ ├── SDFileAttributeHelper.h │ │ │ ├── SDFileAttributeHelper.m │ │ │ ├── SDImageAssetManager.h │ │ │ ├── SDImageAssetManager.m │ │ │ ├── SDImageCachesManagerOperation.h │ │ │ ├── SDImageCachesManagerOperation.m │ │ │ ├── SDImageFramePool.h │ │ │ ├── SDImageFramePool.m │ │ │ ├── SDImageIOAnimatedCoderInternal.h │ │ │ ├── SDInternalMacros.h │ │ │ ├── SDInternalMacros.m │ │ │ ├── SDWeakProxy.h │ │ │ ├── SDWeakProxy.m │ │ │ ├── SDWebImageTransitionInternal.h │ │ │ ├── SDmetamacros.h │ │ │ ├── UIColor+SDHexString.h │ │ │ └── UIColor+SDHexString.m │ └── WebImage │ │ ├── PrivacyInfo.xcprivacy │ │ └── SDWebImage.h └── Target Support Files │ ├── Pods-YXCTools-YXCToolsUITests │ ├── Pods-YXCTools-YXCToolsUITests-Info.plist │ ├── Pods-YXCTools-YXCToolsUITests-acknowledgements.markdown │ ├── Pods-YXCTools-YXCToolsUITests-acknowledgements.plist │ ├── Pods-YXCTools-YXCToolsUITests-dummy.m │ ├── Pods-YXCTools-YXCToolsUITests-frameworks-Debug-input-files.xcfilelist │ ├── Pods-YXCTools-YXCToolsUITests-frameworks-Debug-output-files.xcfilelist │ ├── Pods-YXCTools-YXCToolsUITests-frameworks-Release-input-files.xcfilelist │ ├── Pods-YXCTools-YXCToolsUITests-frameworks-Release-output-files.xcfilelist │ ├── Pods-YXCTools-YXCToolsUITests-frameworks.sh │ ├── Pods-YXCTools-YXCToolsUITests-umbrella.h │ ├── Pods-YXCTools-YXCToolsUITests.debug.xcconfig │ ├── Pods-YXCTools-YXCToolsUITests.modulemap │ └── Pods-YXCTools-YXCToolsUITests.release.xcconfig │ ├── Pods-YXCTools │ ├── Pods-YXCTools-Info.plist │ ├── Pods-YXCTools-acknowledgements.markdown │ ├── Pods-YXCTools-acknowledgements.plist │ ├── Pods-YXCTools-dummy.m │ ├── Pods-YXCTools-frameworks-Debug-input-files.xcfilelist │ ├── Pods-YXCTools-frameworks-Debug-output-files.xcfilelist │ ├── Pods-YXCTools-frameworks-Release-input-files.xcfilelist │ ├── Pods-YXCTools-frameworks-Release-output-files.xcfilelist │ ├── Pods-YXCTools-frameworks.sh │ ├── Pods-YXCTools-umbrella.h │ ├── Pods-YXCTools.debug.xcconfig │ ├── Pods-YXCTools.modulemap │ └── Pods-YXCTools.release.xcconfig │ ├── Pods-YXCToolsTests │ ├── Pods-YXCToolsTests-Info.plist │ ├── Pods-YXCToolsTests-acknowledgements.markdown │ ├── Pods-YXCToolsTests-acknowledgements.plist │ ├── Pods-YXCToolsTests-dummy.m │ ├── Pods-YXCToolsTests-umbrella.h │ ├── Pods-YXCToolsTests.debug.xcconfig │ ├── Pods-YXCToolsTests.modulemap │ └── Pods-YXCToolsTests.release.xcconfig │ └── SDWebImage │ ├── ResourceBundle-SDWebImage-SDWebImage-Info.plist │ ├── SDWebImage-Info.plist │ ├── SDWebImage-dummy.m │ ├── SDWebImage-prefix.pch │ ├── SDWebImage-umbrella.h │ ├── SDWebImage.debug.xcconfig │ ├── SDWebImage.modulemap │ └── SDWebImage.release.xcconfig ├── README.md ├── ReplayLoadExtesion ├── Info.plist ├── SampleHandler.h └── SampleHandler.m ├── ReplayUIExtension ├── BroadcastSetupViewController.h ├── BroadcastSetupViewController.m └── Info.plist ├── ShareExtension ├── Base.lproj │ └── MainInterface.storyboard ├── Info.plist ├── ShareExtension.entitlements ├── ShareViewController.h └── ShareViewController.m ├── YXCTools.podspec ├── YXCTools.xcodeproj ├── project.pbxproj ├── project.pbxproj.prepatch ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings │ └── xcuserdata │ │ └── GGT.xcuserdatad │ │ └── WorkspaceSettings.xcsettings ├── xcshareddata │ └── xcschemes │ │ └── YXCTools.xcscheme └── xcuserdata │ ├── GGT.xcuserdatad │ └── xcschemes │ │ └── xcschememanagement.plist │ └── guogt.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── YXCTools.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── YXCTools ├── AirPlay │ ├── Controller │ │ ├── YXCAirPlayAudioController.h │ │ ├── YXCAirPlayAudioController.m │ │ ├── YXCAudioController.h │ │ └── YXCAudioController.m │ ├── Model │ │ ├── YXCAudioModel.h │ │ ├── YXCAudioModel.m │ │ ├── YXCMusicHandler.h │ │ └── YXCMusicHandler.m │ └── View │ │ ├── YXCPlayerMusicListView.h │ │ ├── YXCPlayerMusicListView.m │ │ ├── YXCSlider.h │ │ └── YXCSlider.m ├── Animation │ └── Controller │ │ ├── YXCAnimationController.h │ │ ├── YXCAnimationController.m │ │ ├── YXCBasicAnimation.h │ │ ├── YXCBasicAnimation.m │ │ ├── YXCCABasicAnimationController.h │ │ ├── YXCCABasicAnimationController.m │ │ ├── YXCCAEmitterLayerController.h │ │ ├── YXCCAEmitterLayerController.m │ │ ├── YXCCAReplicatorLayerController.h │ │ ├── YXCCAReplicatorLayerController.m │ │ ├── YXCCoreAnimationController.h │ │ ├── YXCCoreAnimationController.m │ │ ├── YXCEmitterLikeController.h │ │ ├── YXCEmitterLikeController.m │ │ ├── YXCEmitterLiveController.h │ │ ├── YXCEmitterLiveController.m │ │ ├── YXCLeBoHomeAnimationController.h │ │ └── YXCLeBoHomeAnimationController.m ├── Assets.xcassets │ ├── Animation │ │ ├── Contents.json │ │ ├── emitter_like.imageset │ │ │ ├── Contents.json │ │ │ ├── emitter_like@2x.png │ │ │ └── emitter_like@3x.png │ │ ├── snowflake.imageset │ │ │ ├── Contents.json │ │ │ ├── snowflake@2x.png │ │ │ └── snowflake@3x.png │ │ └── snowflake_red.imageset │ │ │ ├── Contents.json │ │ │ ├── snowflake_red@2x.png │ │ │ └── snowflake_red@3x.png │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── icon-1024.png │ │ ├── icon-120.png │ │ ├── icon-180.png │ │ ├── icon-40.png │ │ ├── icon-58.png │ │ ├── icon-60.png │ │ ├── icon-80.png │ │ └── icon-87.png │ ├── Contents.json │ ├── LaunchImage.launchimage │ │ ├── Contents.json │ │ ├── LaunchImage-1125x2436.png │ │ ├── LaunchImage-1242x2208.png │ │ ├── LaunchImage-1242x2688.png │ │ ├── LaunchImage-320x480.png │ │ ├── LaunchImage-640x1136.png │ │ ├── LaunchImage-640x960.png │ │ ├── LaunchImage-750x1334.png │ │ └── LaunchImage-828x1792.png │ ├── PhotoKit │ │ ├── Contents.json │ │ ├── photo_check_normal.imageset │ │ │ ├── Contents.json │ │ │ ├── photo_check_normal@2x.png │ │ │ └── photo_check_normal@3x.png │ │ └── photo_check_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── photo_check_selected@2x.png │ │ │ └── photo_check_selected@3x.png │ ├── Player │ │ ├── Contents.json │ │ ├── player_last_btn.imageset │ │ │ ├── Contents.json │ │ │ ├── player_last_btn@2x.png │ │ │ └── player_last_btn@3x.png │ │ ├── player_listCirculation_btn.imageset │ │ │ ├── Contents.json │ │ │ ├── player_listCirculation_btn@2x.png │ │ │ └── player_listCirculation_btn@3x.png │ │ ├── player_musicList_btn.imageset │ │ │ ├── Contents.json │ │ │ ├── player_musicList_btn@2x.png │ │ │ └── player_musicList_btn@3x.png │ │ ├── player_next_btn.imageset │ │ │ ├── Contents.json │ │ │ ├── player_next_btn@2x.png │ │ │ └── player_next_btn@3x.png │ │ ├── player_pause_btn.imageset │ │ │ ├── Contents.json │ │ │ ├── player_pause_btn@2x.png │ │ │ └── player_pause_btn@3x.png │ │ ├── player_play_btn.imageset │ │ │ ├── Contents.json │ │ │ ├── player_play_btn@2x.png │ │ │ └── player_play_btn@3x.png │ │ ├── player_randomPlay_btn.imageset │ │ │ ├── Contents.json │ │ │ ├── player_randomPlay_btn@2x.png │ │ │ └── player_randomPlay_btn@3x.png │ │ ├── player_singleCycle_btn.imageset │ │ │ ├── Contents.json │ │ │ ├── player_singleCycle_btn@2x.png │ │ │ └── player_singleCycle_btn@3x.png │ │ └── player_slider.imageset │ │ │ ├── Contents.json │ │ │ ├── player_slider@2x.png │ │ │ └── player_slider@3x.png │ ├── atten.imageset │ │ ├── Contents.json │ │ └── 考勤.png │ ├── iOS14 │ │ ├── Contents.json │ │ ├── btn_live_room_attention.imageset │ │ │ ├── Contents.json │ │ │ ├── btn_live_room_attention@2x.png │ │ │ └── btn_live_room_attention@3x.png │ │ ├── calendar.imageset │ │ │ ├── Contents.json │ │ │ ├── calendar@2x.png │ │ │ └── calendar@3x.png │ │ ├── green_pop.imageset │ │ │ ├── Contents.json │ │ │ └── gyhd_chat_self_back@2x.png │ │ ├── live.imageset │ │ │ ├── Contents.json │ │ │ ├── live@2x.png │ │ │ └── live@3x.png │ │ ├── page_currentImage.imageset │ │ │ ├── Contents.json │ │ │ └── page_currentImage@3x.png │ │ └── page_image.imageset │ │ │ ├── Contents.json │ │ │ └── page_image@3x.png │ ├── navigation_back_white.imageset │ │ ├── Contents.json │ │ ├── navigation_back_white.png │ │ ├── navigation_back_white@2x.png │ │ └── navigation_back_white@3x.png │ ├── other │ │ ├── 1.imageset │ │ │ ├── 1.jpg │ │ │ └── Contents.json │ │ └── Contents.json │ ├── scan │ │ ├── Contents.json │ │ ├── scan_line_image.imageset │ │ │ ├── Contents.json │ │ │ ├── scan_line_image.png │ │ │ ├── scan_line_image@2x.png │ │ │ └── scan_line_image@3x.png │ │ └── scan_photo_btn.imageset │ │ │ ├── Contents.json │ │ │ ├── scan_photo_btn.png │ │ │ ├── scan_photo_btn@2x.png │ │ │ └── scan_photo_btn@3x.png │ └── tools.imageset │ │ ├── Contents.json │ │ ├── tools@2x.png │ │ └── tools@3x.png ├── AutoLayout │ └── Controller │ │ ├── YXCAutoLayoutController.h │ │ └── YXCAutoLayoutController.m ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Bluetooth │ ├── Controller │ │ ├── YXCBluetoothCommunicationController.h │ │ ├── YXCBluetoothCommunicationController.m │ │ ├── YXCBluetoothController.h │ │ └── YXCBluetoothController.m │ └── View │ │ ├── YXCBlueToothDeviceCell.h │ │ └── YXCBlueToothDeviceCell.m ├── Controller │ ├── ViewController.h │ ├── ViewController.m │ ├── YXCBaseController.h │ └── YXCBaseController.m ├── Info.plist ├── Masonry │ ├── MASCompositeConstraint.h │ ├── MASCompositeConstraint.m │ ├── MASConstraint+Private.h │ ├── MASConstraint.h │ ├── MASConstraint.m │ ├── MASConstraintMaker.h │ ├── MASConstraintMaker.m │ ├── MASLayoutConstraint.h │ ├── MASLayoutConstraint.m │ ├── MASUtilities.h │ ├── MASViewAttribute.h │ ├── MASViewAttribute.m │ ├── MASViewConstraint.h │ ├── MASViewConstraint.m │ ├── Masonry.h │ ├── NSArray+MASAdditions.h │ ├── NSArray+MASAdditions.m │ ├── NSArray+MASShorthandAdditions.h │ ├── NSLayoutConstraint+MASDebugAdditions.h │ ├── NSLayoutConstraint+MASDebugAdditions.m │ ├── View+MASAdditions.h │ ├── View+MASAdditions.m │ ├── View+MASShorthandAdditions.h │ ├── ViewController+MASAdditions.h │ └── ViewController+MASAdditions.m ├── Model │ ├── YXCControllerModel.h │ └── YXCControllerModel.m ├── Multithreading │ ├── YXCGCDController.h │ ├── YXCGCDController.m │ ├── YXCMultithreadingController.h │ ├── YXCMultithreadingController.m │ ├── YXCNSThreadController.h │ ├── YXCNSThreadController.m │ ├── YXCPthreadController.h │ ├── YXCPthreadController.m │ ├── YXCThread.h │ └── YXCThread.m ├── Musics.plist ├── Net │ ├── YXCNetManager.h │ └── YXCNetManager.m ├── Other │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── SceneDelegate.h │ └── SceneDelegate.m ├── PhotoKit │ ├── Controller │ │ ├── YXCPhotoAlbumListController.h │ │ ├── YXCPhotoAlbumListController.m │ │ ├── YXCPhotoListController.h │ │ └── YXCPhotoListController.m │ ├── Model │ │ ├── YXCAssetModel.h │ │ └── YXCAssetModel.m │ ├── Tools │ │ ├── YXCPhotoHandler.h │ │ └── YXCPhotoHandler.m │ └── View │ │ ├── YXCBigPictureCell.h │ │ ├── YXCBigPictureCell.m │ │ ├── YXCBigPictureView.h │ │ ├── YXCBigPictureView.m │ │ ├── YXCPhotoListCell.h │ │ ├── YXCPhotoListCell.m │ │ ├── YXCPhotoListImageCell.h │ │ ├── YXCPhotoListImageCell.m │ │ ├── YXCPhotoView.h │ │ └── YXCPhotoView.m ├── PrivacyInfo.xcprivacy ├── Scan │ ├── Controller │ │ ├── YXCScanQRCodeController.h │ │ └── YXCScanQRCodeController.m │ ├── Tools │ │ ├── YXCScanTools.h │ │ └── YXCScanTools.m │ └── View │ │ ├── YXCScanView.h │ │ └── YXCScanView.m ├── Test │ ├── View │ │ ├── YXCBannerCell.h │ │ └── YXCBannerCell.m │ ├── YXCBannerController.h │ ├── YXCBannerController.m │ ├── YXCImageSynthesisController.h │ ├── YXCImageSynthesisController.m │ ├── YXCObserverController.h │ ├── YXCObserverController.m │ ├── YXCObserverHandler.h │ ├── YXCObserverHandler.m │ ├── YXCPerson.h │ ├── YXCPerson.m │ ├── YXCTestController.h │ ├── YXCTestController.m │ ├── YXCTestViewModel.h │ ├── YXCTestViewModel.m │ ├── YXCTouchController.h │ └── YXCTouchController.m ├── Tools │ ├── YXCPushHandler.h │ └── YXCPushHandler.m ├── UIKit │ ├── Controller │ │ ├── YXCLaunchImagesController.h │ │ ├── YXCLaunchImagesController.m │ │ ├── YXCTableViewEditController.h │ │ ├── YXCTableViewEditController.m │ │ ├── YXCUIBezierPathController.h │ │ └── YXCUIBezierPathController.m │ └── View │ │ ├── YXCBezierPathView.h │ │ ├── YXCBezierPathView.m │ │ ├── YXCTableViewEditCell.h │ │ └── YXCTableViewEditCell.m ├── YXCTool.pch ├── YXCTools.entitlements ├── YXCTools │ ├── Category │ │ ├── NSObject │ │ │ ├── NSArray+YXC_Category.h │ │ │ ├── NSArray+YXC_Category.m │ │ │ ├── NSDate+YXC_Category.h │ │ │ ├── NSDate+YXC_Category.m │ │ │ ├── NSDictionary+YXC_Category.h │ │ │ ├── NSDictionary+YXC_Category.m │ │ │ ├── NSMutableArray+YXC_Category.h │ │ │ ├── NSMutableArray+YXC_Category.m │ │ │ ├── NSMutableAttributedString+YXC_Category.h │ │ │ ├── NSMutableAttributedString+YXC_Category.m │ │ │ ├── NSMutableDictionary+YXC_Category.h │ │ │ ├── NSMutableDictionary+YXC_Category.m │ │ │ ├── NSObject+YXCObserver.h │ │ │ ├── NSObject+YXCObserver.m │ │ │ ├── NSObject+YXC_Category.h │ │ │ ├── NSObject+YXC_Category.m │ │ │ ├── NSURL+YXCCategory.h │ │ │ └── NSURL+YXCCategory.m │ │ └── UIKit │ │ │ ├── UIButton+YXC_Category.h │ │ │ ├── UIButton+YXC_Category.m │ │ │ ├── UIColor+YXC_Category.h │ │ │ ├── UIColor+YXC_Category.m │ │ │ ├── UIControl+YXC_Category.h │ │ │ ├── UIControl+YXC_Category.m │ │ │ ├── UIDevice+YXC_Category.h │ │ │ ├── UIDevice+YXC_Category.m │ │ │ ├── UIFont+YXC_Category.h │ │ │ ├── UIFont+YXC_Category.m │ │ │ ├── UIImage+YXC_Category.h │ │ │ ├── UIImage+YXC_Category.m │ │ │ ├── UIImageView+YXC_Category.h │ │ │ ├── UIImageView+YXC_Category.m │ │ │ ├── UIScrollView+YXC_Category.h │ │ │ ├── UIScrollView+YXC_Category.m │ │ │ ├── UITextField+YXC_Category.h │ │ │ ├── UITextField+YXC_Category.m │ │ │ ├── UITextView+YXC_Category.h │ │ │ ├── UITextView+YXC_Category.m │ │ │ ├── UIView+YXC_Category.h │ │ │ └── UIView+YXC_Category.m │ ├── Header │ │ ├── UIDeviceName.h │ │ └── YXCToolHeader.h │ ├── NSObject │ │ ├── YXCBlueToothManager.h │ │ ├── YXCBlueToothManager.m │ │ ├── YXCDayLogHandler.h │ │ ├── YXCDayLogHandler.m │ │ ├── YXCImagePickerHandler.h │ │ ├── YXCImagePickerHandler.m │ │ ├── YXCRunLoopHandler.h │ │ └── YXCRunLoopHandler.m │ └── UIKit │ │ ├── YXCMarqueeLabel.h │ │ ├── YXCMarqueeLabel.m │ │ ├── YXCPopOverView.h │ │ └── YXCPopOverView.m ├── en.lproj │ └── Info.plist ├── iOS14 │ ├── Controller │ │ ├── YXCDatePickerController.h │ │ ├── YXCDatePickerController.m │ │ ├── YXCPHPickerViewController.h │ │ ├── YXCPHPickerViewController.m │ │ ├── YXCUIPageControlController.h │ │ ├── YXCUIPageControlController.m │ │ ├── YXCiOS14Controller.h │ │ └── YXCiOS14Controller.m │ └── View │ │ ├── YXCDatePickerView.h │ │ └── YXCDatePickerView.m ├── iOS16 │ └── Controller │ │ ├── YXCLaunchScreenController.h │ │ ├── YXCLaunchScreenController.m │ │ ├── YXCiOS16Controller.h │ │ └── YXCiOS16Controller.m └── main.m ├── YXCToolsTests ├── Info.plist └── YXCToolsTests.m └── YXCToolsUITests ├── Info.plist └── YXCToolsUITests.m /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 guoguangtao 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | platform :ios, '13.0' 3 | 4 | target 'YXCTools' do 5 | # Comment the next line if you don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for YXCTools 9 | pod 'SDWebImage' 10 | 11 | target 'YXCToolsTests' do 12 | inherit! :search_paths 13 | # Pods for testing 14 | end 15 | 16 | target 'YXCToolsUITests' do 17 | # Pods for testing 18 | end 19 | 20 | end 21 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SDWebImage (5.19.0): 3 | - SDWebImage/Core (= 5.19.0) 4 | - SDWebImage/Core (5.19.0) 5 | 6 | DEPENDENCIES: 7 | - SDWebImage 8 | 9 | SPEC REPOS: 10 | trunk: 11 | - SDWebImage 12 | 13 | SPEC CHECKSUMS: 14 | SDWebImage: 981fd7e860af070920f249fd092420006014c3eb 15 | 16 | PODFILE CHECKSUM: 7cba358de00f742545d3ebcc6013725b138c5c97 17 | 18 | COCOAPODS: 1.15.2 19 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SDWebImage (5.19.0): 3 | - SDWebImage/Core (= 5.19.0) 4 | - SDWebImage/Core (5.19.0) 5 | 6 | DEPENDENCIES: 7 | - SDWebImage 8 | 9 | SPEC REPOS: 10 | trunk: 11 | - SDWebImage 12 | 13 | SPEC CHECKSUMS: 14 | SDWebImage: 981fd7e860af070920f249fd092420006014c3eb 15 | 16 | PODFILE CHECKSUM: 7cba358de00f742545d3ebcc6013725b138c5c97 17 | 18 | COCOAPODS: 1.15.2 19 | -------------------------------------------------------------------------------- /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/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/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 | #import "SDImageIOAnimatedCoderInternal.h" 11 | #if SD_MAC 12 | #import 13 | #else 14 | #import 15 | #endif 16 | 17 | @implementation SDImageAPNGCoder 18 | 19 | + (instancetype)sharedCoder { 20 | static SDImageAPNGCoder *coder; 21 | static dispatch_once_t onceToken; 22 | dispatch_once(&onceToken, ^{ 23 | coder = [[SDImageAPNGCoder alloc] init]; 24 | }); 25 | return coder; 26 | } 27 | 28 | #pragma mark - Subclass Override 29 | 30 | + (SDImageFormat)imageFormat { 31 | return SDImageFormatPNG; 32 | } 33 | 34 | + (NSString *)imageUTType { 35 | return (__bridge NSString *)kSDUTTypePNG; 36 | } 37 | 38 | + (NSString *)dictionaryProperty { 39 | return (__bridge NSString *)kCGImagePropertyPNGDictionary; 40 | } 41 | 42 | + (NSString *)unclampedDelayTimeProperty { 43 | return (__bridge NSString *)kCGImagePropertyAPNGUnclampedDelayTime; 44 | } 45 | 46 | + (NSString *)delayTimeProperty { 47 | return (__bridge NSString *)kCGImagePropertyAPNGDelayTime; 48 | } 49 | 50 | + (NSString *)loopCountProperty { 51 | return (__bridge NSString *)kCGImagePropertyAPNGLoopCount; 52 | } 53 | 54 | + (NSUInteger)defaultLoopCount { 55 | return 0; 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /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/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)initWithImage:(UIImage *)image duration:(NSTimeInterval)duration { 21 | self = [super init]; 22 | if (self) { 23 | _image = image; 24 | _duration = duration; 25 | } 26 | return self; 27 | } 28 | 29 | + (instancetype)frameWithImage:(UIImage *)image duration:(NSTimeInterval)duration { 30 | SDImageFrame *frame = [[SDImageFrame alloc] initWithImage:image duration:duration]; 31 | return frame; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /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/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 | #import "SDImageIOAnimatedCoderInternal.h" 11 | #if SD_MAC 12 | #import 13 | #else 14 | #import 15 | #endif 16 | 17 | @implementation SDImageGIFCoder 18 | 19 | + (instancetype)sharedCoder { 20 | static SDImageGIFCoder *coder; 21 | static dispatch_once_t onceToken; 22 | dispatch_once(&onceToken, ^{ 23 | coder = [[SDImageGIFCoder alloc] init]; 24 | }); 25 | return coder; 26 | } 27 | 28 | #pragma mark - Subclass Override 29 | 30 | + (SDImageFormat)imageFormat { 31 | return SDImageFormatGIF; 32 | } 33 | 34 | + (NSString *)imageUTType { 35 | return (__bridge NSString *)kSDUTTypeGIF; 36 | } 37 | 38 | + (NSString *)dictionaryProperty { 39 | return (__bridge NSString *)kCGImagePropertyGIFDictionary; 40 | } 41 | 42 | + (NSString *)unclampedDelayTimeProperty { 43 | return (__bridge NSString *)kCGImagePropertyGIFUnclampedDelayTime; 44 | } 45 | 46 | + (NSString *)delayTimeProperty { 47 | return (__bridge NSString *)kCGImagePropertyGIFDelayTime; 48 | } 49 | 50 | + (NSString *)loopCountProperty { 51 | return (__bridge NSString *)kCGImagePropertyGIFLoopCount; 52 | } 53 | 54 | + (NSUInteger)defaultLoopCount { 55 | return 1; 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /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/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/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/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/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/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/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/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 | 14 | NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadResponseKey = @"SDWebImageErrorDownloadResponseKey"; 15 | NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadStatusCodeKey = @"SDWebImageErrorDownloadStatusCodeKey"; 16 | NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadContentTypeKey = @"SDWebImageErrorDownloadContentTypeKey"; 17 | -------------------------------------------------------------------------------- /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 | /// Cancel the operation 15 | - (void)cancel; 16 | 17 | @optional 18 | 19 | /// Whether the operation has been cancelled. 20 | @property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; 21 | 22 | @end 23 | 24 | /// NSOperation conform to `SDWebImageOperation`. 25 | @interface NSOperation (SDWebImageOperation) 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /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/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+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/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 | #import "NSImage+Compatibility.h" 13 | 14 | @implementation UIImage (ForceDecode) 15 | 16 | - (BOOL)sd_isDecoded { 17 | NSNumber *value = objc_getAssociatedObject(self, @selector(sd_isDecoded)); 18 | return [value boolValue]; 19 | } 20 | 21 | - (void)setSd_isDecoded:(BOOL)sd_isDecoded { 22 | objc_setAssociatedObject(self, @selector(sd_isDecoded), @(sd_isDecoded), OBJC_ASSOCIATION_RETAIN_NONATOMIC); 23 | } 24 | 25 | + (nullable UIImage *)sd_decodedImageWithImage:(nullable UIImage *)image { 26 | if (!image) { 27 | return nil; 28 | } 29 | return [SDImageCoderHelper decodedImageWithImage:image]; 30 | } 31 | 32 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image { 33 | return [self sd_decodedAndScaledDownImageWithImage:image limitBytes:0]; 34 | } 35 | 36 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image limitBytes:(NSUInteger)bytes { 37 | if (!image) { 38 | return nil; 39 | } 40 | return [SDImageCoderHelper decodedAndScaledDownImageWithImage:image limitBytes:bytes]; 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /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/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/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/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 | -------------------------------------------------------------------------------- /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/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_isTransformed = source.sd_isTransformed; 22 | target.sd_decodeOptions = source.sd_decodeOptions; 23 | target.sd_imageLoopCount = source.sd_imageLoopCount; 24 | target.sd_imageFormat = source.sd_imageFormat; 25 | // Force Decode 26 | target.sd_isDecoded = source.sd_isDecoded; 27 | // Extended Cache Data 28 | target.sd_extendedObject = source.sd_extendedObject; 29 | } 30 | -------------------------------------------------------------------------------- /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/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/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 | #import 12 | 13 | @implementation SDDeviceHelper 14 | 15 | + (NSUInteger)totalMemory { 16 | return (NSUInteger)[[NSProcessInfo processInfo] physicalMemory]; 17 | } 18 | 19 | + (NSUInteger)freeMemory { 20 | mach_port_t host_port = mach_host_self(); 21 | mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); 22 | vm_size_t page_size; 23 | vm_statistics_data_t vm_stat; 24 | kern_return_t kern; 25 | 26 | kern = host_page_size(host_port, &page_size); 27 | if (kern != KERN_SUCCESS) return 0; 28 | kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); 29 | if (kern != KERN_SUCCESS) return 0; 30 | return vm_stat.free_count * page_size; 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /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) NSTimeInterval duration; // elapsed time in seconds of previous callback. (or it's first callback, use the time between `start` and callback). Always zero when display link not running 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/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/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/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 | -------------------------------------------------------------------------------- /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 | os_log_t sd_getDefaultLog(void) { 12 | static dispatch_once_t onceToken; 13 | static os_log_t log; 14 | dispatch_once(&onceToken, ^{ 15 | log = os_log_create("com.hackemist.SDWebImage", "Default"); 16 | }); 17 | return log; 18 | } 19 | 20 | void sd_executeCleanupBlock (__strong sd_cleanupBlock_t *block) { 21 | (*block)(); 22 | } 23 | -------------------------------------------------------------------------------- /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/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/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/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/SDWebImage/WebImage/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyTracking 6 | 7 | NSPrivacyCollectedDataTypes 8 | 9 | NSPrivacyTrackingDomains 10 | 11 | NSPrivacyAccessedAPITypes 12 | 13 | 14 | NSPrivacyAccessedAPIType 15 | NSPrivacyAccessedAPICategoryFileTimestamp 16 | NSPrivacyAccessedAPITypeReasons 17 | 18 | C617.1 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## SDWebImage 5 | 6 | Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is furnished 13 | to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in all 16 | copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | 27 | Generated by CocoaPods - https://cocoapods.org 28 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_YXCTools_YXCToolsUITests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_YXCTools_YXCToolsUITests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests-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_YXCTools_YXCToolsUITestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_YXCTools_YXCToolsUITestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -framework "SDWebImage" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_YXCTools_YXCToolsUITests { 2 | umbrella header "Pods-YXCTools-YXCToolsUITests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools-YXCToolsUITests/Pods-YXCTools-YXCToolsUITests.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -framework "SDWebImage" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## SDWebImage 5 | 6 | Copyright (c) 2009-2020 Olivier Poitrey rs@dailymotion.com 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is furnished 13 | to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in all 16 | copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | 27 | Generated by CocoaPods - https://cocoapods.org 28 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_YXCTools : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_YXCTools 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-YXCTools/Pods-YXCTools-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-YXCTools/Pods-YXCTools-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools-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_YXCToolsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_YXCToolsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -framework "SDWebImage" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_YXCTools { 2 | umbrella header "Pods-YXCTools-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCTools/Pods-YXCTools.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -framework "SDWebImage" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCToolsTests/Pods-YXCToolsTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCToolsTests/Pods-YXCToolsTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCToolsTests/Pods-YXCToolsTests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCToolsTests/Pods-YXCToolsTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_YXCToolsTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_YXCToolsTests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCToolsTests/Pods-YXCToolsTests-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_YXCToolsTestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_YXCToolsTestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCToolsTests/Pods-YXCToolsTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -framework "SDWebImage" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCToolsTests/Pods-YXCToolsTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_YXCToolsTests { 2 | umbrella header "Pods-YXCToolsTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-YXCToolsTests/Pods-YXCToolsTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -framework "SDWebImage" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleIdentifier 8 | ${PRODUCT_BUNDLE_IDENTIFIER} 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundleName 12 | ${PRODUCT_NAME} 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 5.19.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 5.19.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /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/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/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 | OTHER_LDFLAGS = $(inherited) -framework "ImageIO" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | SUPPORTS_MACCATALYST = YES 15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 16 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module SDWebImage { 2 | umbrella header "SDWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /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 | OTHER_LDFLAGS = $(inherited) -framework "ImageIO" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | SUPPORTS_MACCATALYST = YES 15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 16 | -------------------------------------------------------------------------------- /ReplayLoadExtesion/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSExtension 6 | 7 | NSExtensionPointIdentifier 8 | com.apple.broadcast-services-upload 9 | NSExtensionPrincipalClass 10 | SampleHandler 11 | RPBroadcastProcessMode 12 | RPBroadcastProcessModeSampleBuffer 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /ReplayLoadExtesion/SampleHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // SampleHandler.h 3 | // ReplayLoadExtesion 4 | // 5 | // Created by lbkj on 2021/12/3. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SampleHandler : RPBroadcastSampleHandler 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ReplayLoadExtesion/SampleHandler.m: -------------------------------------------------------------------------------- 1 | // 2 | // SampleHandler.m 3 | // ReplayLoadExtesion 4 | // 5 | // Created by lbkj on 2021/12/3. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | 10 | #import "SampleHandler.h" 11 | 12 | @implementation SampleHandler 13 | 14 | - (void)broadcastStartedWithSetupInfo:(NSDictionary *)setupInfo { 15 | // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional. 16 | } 17 | 18 | - (void)broadcastPaused { 19 | // User has requested to pause the broadcast. Samples will stop being delivered. 20 | } 21 | 22 | - (void)broadcastResumed { 23 | // User has requested to resume the broadcast. Samples delivery will resume. 24 | } 25 | 26 | - (void)broadcastFinished { 27 | // User has requested to finish the broadcast. 28 | } 29 | 30 | - (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType { 31 | 32 | switch (sampleBufferType) { 33 | case RPSampleBufferTypeVideo: 34 | // Handle video sample buffer 35 | break; 36 | case RPSampleBufferTypeAudioApp: 37 | // Handle audio sample buffer for app audio 38 | break; 39 | case RPSampleBufferTypeAudioMic: 40 | // Handle audio sample buffer for mic audio 41 | break; 42 | 43 | default: 44 | break; 45 | } 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /ReplayUIExtension/BroadcastSetupViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BroadcastSetupViewController.h 3 | // ReplayUIExtension 4 | // 5 | // Created by lbkj on 2021/12/3. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface BroadcastSetupViewController : UIViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /ReplayUIExtension/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSExtension 6 | 7 | NSExtensionAttributes 8 | 9 | NSExtensionActivationRule 10 | 11 | NSExtensionActivationSupportsReplayKitStreaming 12 | 13 | 14 | 15 | NSExtensionPointIdentifier 16 | com.apple.broadcast-services-setupui 17 | NSExtensionPrincipalClass 18 | BroadcastSetupViewController 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /ShareExtension/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSExtension 6 | 7 | NSExtensionAttributes 8 | 9 | NSExtensionActivationRule 10 | TRUEPREDICATE 11 | 12 | NSExtensionMainStoryboard 13 | MainInterface 14 | NSExtensionPointIdentifier 15 | com.apple.share-services 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /ShareExtension/ShareExtension.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.com.hpplay.YXCTools.share 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ShareExtension/ShareViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ShareViewController.h 3 | // ShareExtension 4 | // 5 | // Created by guogt on 2023/9/28. 6 | // Copyright © 2023 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface ShareViewController : SLComposeServiceViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /YXCTools.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |spec| 2 | 3 | spec.name = "YXCTools" 4 | spec.version = "1.0.4" 5 | spec.summary = "Some tools and methods" 6 | spec.description = <<-DESC 7 | Some tools and methods used in daily development 8 | DESC 9 | spec.homepage = "https://github.com/guoguangtao/YXCTool" 10 | spec.license = "MIT" 11 | spec.author = { "guoguangtao" => "Jude_guo@163.com" } 12 | spec.source = { :git => "https://github.com/guoguangtao/YXCTool.git", :tag => "v#{spec.version}" } 13 | spec.source_files = "YXCTools/YXCTools/**/*.{h,m}" 14 | spec.platform = :ios, "10.0" 15 | spec.requires_arc = true 16 | 17 | end 18 | -------------------------------------------------------------------------------- /YXCTools.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /YXCTools.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /YXCTools.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /YXCTools.xcodeproj/project.xcworkspace/xcuserdata/GGT.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildLocationStyle 6 | UseAppPreferences 7 | CustomBuildLocationType 8 | RelativeToDerivedData 9 | DerivedDataLocationStyle 10 | Default 11 | IssueFilterStyle 12 | ShowActiveSchemeOnly 13 | LiveSourceIssuesEnabled 14 | 15 | ShowSharedSchemesAutomaticallyEnabled 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /YXCTools.xcodeproj/xcuserdata/GGT.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | YXCTools.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 8AECEC2324497FEA00537181 16 | 17 | primary 18 | 19 | 20 | 8AECEC3E24497FED00537181 21 | 22 | primary 23 | 24 | 25 | 8AECEC4924497FED00537181 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /YXCTools.xcodeproj/xcuserdata/guogt.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | YXCTools.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /YXCTools.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /YXCTools.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /YXCTools/AirPlay/Controller/YXCAirPlayAudioController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCAirPlayAudioController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/20. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCAirPlayAudioController : YXCBaseController 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/AirPlay/Controller/YXCAudioController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCAudioController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/28. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCAudioController : YXCBaseController 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/AirPlay/Model/YXCAudioModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCAudioModel.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/20. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCAudioModel : NSObject 14 | 15 | #pragma mark - Property 16 | 17 | @property (nonatomic, copy) NSString *musicName; /**< 音乐名称 */ 18 | @property (nonatomic, copy) NSURL *musicUrl; /**< 音乐播放连接 */ 19 | @property (nonatomic, copy) NSURL *musicImage; /**< 音乐图片 */ 20 | 21 | 22 | #pragma mark - Method 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /YXCTools/AirPlay/Model/YXCAudioModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCAudioModel.m 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/20. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCAudioModel.h" 10 | 11 | @implementation YXCAudioModel 12 | 13 | 14 | #pragma mark - Lifecycle 15 | 16 | + (instancetype)modelWithmusicName:(NSString *)musicName 17 | musicUrl:(NSString *)musicUrl 18 | musicImage:(NSString *)musicImage { 19 | YXCAudioModel *model = [YXCAudioModel new]; 20 | model.musicName = musicName; 21 | model.musicUrl = [NSURL URLWithString:musicUrl]; 22 | model.musicImage = [NSURL URLWithString:musicImage]; 23 | return model; 24 | } 25 | 26 | - (void)setMusicUrl:(NSURL *)musicUrl { 27 | if ([musicUrl isKindOfClass:[NSString class]]) { 28 | _musicUrl = [NSURL URLWithString:(NSString *)musicUrl]; 29 | return; 30 | } 31 | _musicUrl = musicUrl; 32 | } 33 | 34 | - (void)setMusicImage:(NSURL *)musicImage { 35 | if ([musicImage isKindOfClass:[NSString class]]) { 36 | _musicImage = [NSURL URLWithString:(NSString *)musicImage]; 37 | return; 38 | } 39 | _musicImage = musicImage; 40 | } 41 | 42 | 43 | #pragma mark - Custom Accessors (Setter 方法) 44 | 45 | 46 | #pragma mark - Public 47 | 48 | 49 | #pragma mark - Private 50 | 51 | 52 | #pragma mark - Protocol 53 | 54 | 55 | #pragma mark - Lazy 56 | 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /YXCTools/AirPlay/Model/YXCMusicHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCMusicHandler.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/23. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "YXCAudioModel.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface YXCMusicHandler : NSObject 15 | 16 | #pragma mark - Property 17 | 18 | @property (nonatomic, strong) NSArray *musics; /**< 所有音乐 */ 19 | 20 | 21 | #pragma mark - Method 22 | 23 | + (instancetype)shareInstance; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /YXCTools/AirPlay/View/YXCPlayerMusicListView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPlayerMusicListView.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/23. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class YXCPlayerMusicListView; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @protocol YXCPlayerMusicListViewDelegate 16 | 17 | @optional 18 | 19 | - (void)listView:(YXCPlayerMusicListView *)listView didSelectedAtIndex:(NSInteger)index; 20 | 21 | - (NSInteger)currentPlayAtIndex:(YXCPlayerMusicListView *)list; 22 | 23 | @end 24 | 25 | @interface YXCPlayerMusicListView : UIView 26 | 27 | #pragma mark - Property 28 | 29 | @property (nonatomic, weak) id delegate; 30 | 31 | 32 | #pragma mark - Method 33 | 34 | - (void)show; 35 | 36 | - (void)dismiss; 37 | 38 | @end 39 | 40 | NS_ASSUME_NONNULL_END 41 | -------------------------------------------------------------------------------- /YXCTools/AirPlay/View/YXCSlider.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCSlider.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/22. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCSlider : UISlider 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/AirPlay/View/YXCSlider.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCSlider.m 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/22. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCSlider.h" 10 | 11 | @interface YXCSlider () 12 | 13 | @end 14 | 15 | 16 | @implementation YXCSlider 17 | 18 | #pragma mark - Lifecycle 19 | 20 | /// 刷新UI 21 | - (void)injected { 22 | 23 | } 24 | 25 | - (instancetype)initWithFrame:(CGRect)frame { 26 | 27 | if (self = [super initWithFrame:frame]) { 28 | 29 | [self setupUI]; 30 | [self setupConstraints]; 31 | } 32 | 33 | return self; 34 | } 35 | 36 | - (void)dealloc { 37 | 38 | } 39 | 40 | #pragma mark - Custom Accessors (Setter 与 Getter 方法) 41 | 42 | 43 | #pragma mark - IBActions 44 | 45 | 46 | #pragma mark - Public 47 | 48 | - (CGRect)trackRectForBounds:(CGRect)bounds { 49 | return CGRectMake(0, 0, CGRectGetWidth(self.frame), 2); 50 | } 51 | 52 | 53 | #pragma mark - Private 54 | 55 | 56 | #pragma mark - Protocol 57 | 58 | 59 | #pragma mark - UI 60 | 61 | - (void)setupUI { 62 | 63 | 64 | } 65 | 66 | 67 | #pragma mark - Constraints 68 | 69 | - (void)setupConstraints { 70 | 71 | 72 | } 73 | 74 | 75 | #pragma mark - Lazy 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCAnimationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCAnimationController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/20. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// 动画效果 12 | @interface YXCAnimationController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCBasicAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBasicAnimation.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/13. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCBasicAnimation : CABasicAnimation 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCBasicAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBasicAnimation.m 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/13. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBasicAnimation.h" 10 | 11 | @implementation YXCBasicAnimation 12 | 13 | 14 | #pragma mark - Lifecycle 15 | 16 | 17 | 18 | 19 | #pragma mark - Custom Accessors (Setter 方法) 20 | 21 | 22 | #pragma mark - Public 23 | 24 | 25 | #pragma mark - Private 26 | 27 | 28 | #pragma mark - Protocol 29 | 30 | 31 | #pragma mark - Lazy 32 | 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCCABasicAnimationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCCABasicAnimationController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/13. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCCABasicAnimationController : YXCBaseController 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCCAEmitterLayerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCCAEmitterLayerController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/20. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// 粒子动画 12 | @interface YXCCAEmitterLayerController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCCAReplicatorLayerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCCAReplicatorLayerController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/27. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCCAReplicatorLayerController : YXCBaseController 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCCoreAnimationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCCoreAnimationController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/10. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCCoreAnimationController : YXCBaseController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCEmitterLikeController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCEmitterLikeController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/22. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// 点赞动画 12 | @interface YXCEmitterLikeController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCEmitterLiveController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCEmitterLiveController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/22. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// 直播间右下角动画 12 | @interface YXCEmitterLiveController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/Animation/Controller/YXCLeBoHomeAnimationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCLeBoHomeAnimationController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/10. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCLeBoHomeAnimationController : YXCBaseController 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/emitter_like.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "emitter_like@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "emitter_like@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/emitter_like.imageset/emitter_like@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Animation/emitter_like.imageset/emitter_like@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/emitter_like.imageset/emitter_like@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Animation/emitter_like.imageset/emitter_like@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/snowflake.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "snowflake@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "snowflake@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/snowflake.imageset/snowflake@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Animation/snowflake.imageset/snowflake@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/snowflake.imageset/snowflake@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Animation/snowflake.imageset/snowflake@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/snowflake_red.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "snowflake_red@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "snowflake_red@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/snowflake_red.imageset/snowflake_red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Animation/snowflake_red.imageset/snowflake_red@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Animation/snowflake_red.imageset/snowflake_red@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Animation/snowflake_red.imageset/snowflake_red@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon-40.png", 5 | "idiom" : "iphone", 6 | "scale" : "2x", 7 | "size" : "20x20" 8 | }, 9 | { 10 | "filename" : "icon-60.png", 11 | "idiom" : "iphone", 12 | "scale" : "3x", 13 | "size" : "20x20" 14 | }, 15 | { 16 | "filename" : "icon-58.png", 17 | "idiom" : "iphone", 18 | "scale" : "2x", 19 | "size" : "29x29" 20 | }, 21 | { 22 | "filename" : "icon-87.png", 23 | "idiom" : "iphone", 24 | "scale" : "3x", 25 | "size" : "29x29" 26 | }, 27 | { 28 | "filename" : "icon-80.png", 29 | "idiom" : "iphone", 30 | "scale" : "2x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "filename" : "icon-120.png", 35 | "idiom" : "iphone", 36 | "scale" : "3x", 37 | "size" : "40x40" 38 | }, 39 | { 40 | "filename" : "icon-120.png", 41 | "idiom" : "iphone", 42 | "scale" : "2x", 43 | "size" : "60x60" 44 | }, 45 | { 46 | "filename" : "icon-180.png", 47 | "idiom" : "iphone", 48 | "scale" : "3x", 49 | "size" : "60x60" 50 | }, 51 | { 52 | "filename" : "icon-1024.png", 53 | "idiom" : "ios-marketing", 54 | "scale" : "1x", 55 | "size" : "1024x1024" 56 | } 57 | ], 58 | "info" : { 59 | "author" : "xcode", 60 | "version" : 1 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/AppIcon.appiconset/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/AppIcon.appiconset/icon-1024.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/AppIcon.appiconset/icon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/AppIcon.appiconset/icon-120.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/AppIcon.appiconset/icon-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/AppIcon.appiconset/icon-180.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/AppIcon.appiconset/icon-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/AppIcon.appiconset/icon-58.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/AppIcon.appiconset/icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/AppIcon.appiconset/icon-60.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/AppIcon.appiconset/icon-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/AppIcon.appiconset/icon-80.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/AppIcon.appiconset/icon-87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/AppIcon.appiconset/icon-87.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-1125x2436.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-1125x2436.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-1242x2208.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-1242x2208.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-1242x2688.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-1242x2688.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-320x480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-320x480.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-640x1136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-640x1136.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-640x960.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-640x960.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-750x1334.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-750x1334.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-828x1792.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/LaunchImage.launchimage/LaunchImage-828x1792.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/PhotoKit/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/PhotoKit/photo_check_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "photo_check_normal@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "photo_check_normal@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/PhotoKit/photo_check_normal.imageset/photo_check_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/PhotoKit/photo_check_normal.imageset/photo_check_normal@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/PhotoKit/photo_check_normal.imageset/photo_check_normal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/PhotoKit/photo_check_normal.imageset/photo_check_normal@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/PhotoKit/photo_check_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "photo_check_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "photo_check_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/PhotoKit/photo_check_selected.imageset/photo_check_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/PhotoKit/photo_check_selected.imageset/photo_check_selected@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/PhotoKit/photo_check_selected.imageset/photo_check_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/PhotoKit/photo_check_selected.imageset/photo_check_selected@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_last_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_last_btn@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_last_btn@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_last_btn.imageset/player_last_btn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_last_btn.imageset/player_last_btn@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_last_btn.imageset/player_last_btn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_last_btn.imageset/player_last_btn@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_listCirculation_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_listCirculation_btn@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_listCirculation_btn@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_listCirculation_btn.imageset/player_listCirculation_btn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_listCirculation_btn.imageset/player_listCirculation_btn@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_listCirculation_btn.imageset/player_listCirculation_btn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_listCirculation_btn.imageset/player_listCirculation_btn@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_musicList_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_musicList_btn@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_musicList_btn@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_musicList_btn.imageset/player_musicList_btn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_musicList_btn.imageset/player_musicList_btn@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_musicList_btn.imageset/player_musicList_btn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_musicList_btn.imageset/player_musicList_btn@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_next_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_next_btn@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_next_btn@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_next_btn.imageset/player_next_btn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_next_btn.imageset/player_next_btn@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_next_btn.imageset/player_next_btn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_next_btn.imageset/player_next_btn@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_pause_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_pause_btn@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_pause_btn@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_pause_btn.imageset/player_pause_btn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_pause_btn.imageset/player_pause_btn@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_pause_btn.imageset/player_pause_btn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_pause_btn.imageset/player_pause_btn@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_play_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_play_btn@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_play_btn@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_play_btn.imageset/player_play_btn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_play_btn.imageset/player_play_btn@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_play_btn.imageset/player_play_btn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_play_btn.imageset/player_play_btn@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_randomPlay_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_randomPlay_btn@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_randomPlay_btn@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_randomPlay_btn.imageset/player_randomPlay_btn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_randomPlay_btn.imageset/player_randomPlay_btn@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_randomPlay_btn.imageset/player_randomPlay_btn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_randomPlay_btn.imageset/player_randomPlay_btn@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_singleCycle_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_singleCycle_btn@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_singleCycle_btn@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_singleCycle_btn.imageset/player_singleCycle_btn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_singleCycle_btn.imageset/player_singleCycle_btn@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_singleCycle_btn.imageset/player_singleCycle_btn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_singleCycle_btn.imageset/player_singleCycle_btn@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_slider.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_slider@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_slider@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_slider.imageset/player_slider@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_slider.imageset/player_slider@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/Player/player_slider.imageset/player_slider@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/Player/player_slider.imageset/player_slider@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/atten.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "考勤.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/atten.imageset/考勤.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/atten.imageset/考勤.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/btn_live_room_attention.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "btn_live_room_attention@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "btn_live_room_attention@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/btn_live_room_attention.imageset/btn_live_room_attention@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/iOS14/btn_live_room_attention.imageset/btn_live_room_attention@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/btn_live_room_attention.imageset/btn_live_room_attention@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/iOS14/btn_live_room_attention.imageset/btn_live_room_attention@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/calendar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "calendar@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "calendar@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/calendar.imageset/calendar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/iOS14/calendar.imageset/calendar@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/calendar.imageset/calendar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/iOS14/calendar.imageset/calendar@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/green_pop.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "gyhd_chat_self_back@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/green_pop.imageset/gyhd_chat_self_back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/iOS14/green_pop.imageset/gyhd_chat_self_back@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/live.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "live@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "live@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/live.imageset/live@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/iOS14/live.imageset/live@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/live.imageset/live@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/iOS14/live.imageset/live@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/page_currentImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "page_currentImage@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/page_currentImage.imageset/page_currentImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/iOS14/page_currentImage.imageset/page_currentImage@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/page_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "page_image@3x.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/iOS14/page_image.imageset/page_image@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/iOS14/page_image.imageset/page_image@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/navigation_back_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "navigation_back_white.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "navigation_back_white@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "navigation_back_white@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/navigation_back_white.imageset/navigation_back_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/navigation_back_white.imageset/navigation_back_white.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/navigation_back_white.imageset/navigation_back_white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/navigation_back_white.imageset/navigation_back_white@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/navigation_back_white.imageset/navigation_back_white@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/navigation_back_white.imageset/navigation_back_white@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/other/1.imageset/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/other/1.imageset/1.jpg -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/other/1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "1.jpg", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/other/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/scan/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/scan/scan_line_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "scan_line_image.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "scan_line_image@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "scan_line_image@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/scan/scan_line_image.imageset/scan_line_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/scan/scan_line_image.imageset/scan_line_image.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/scan/scan_line_image.imageset/scan_line_image@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/scan/scan_line_image.imageset/scan_line_image@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/scan/scan_line_image.imageset/scan_line_image@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/scan/scan_line_image.imageset/scan_line_image@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/scan/scan_photo_btn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "scan_photo_btn.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "scan_photo_btn@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "scan_photo_btn@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/scan/scan_photo_btn.imageset/scan_photo_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/scan/scan_photo_btn.imageset/scan_photo_btn.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/scan/scan_photo_btn.imageset/scan_photo_btn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/scan/scan_photo_btn.imageset/scan_photo_btn@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/scan/scan_photo_btn.imageset/scan_photo_btn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/scan/scan_photo_btn.imageset/scan_photo_btn@3x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/tools.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tools@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tools@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/tools.imageset/tools@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/tools.imageset/tools@2x.png -------------------------------------------------------------------------------- /YXCTools/Assets.xcassets/tools.imageset/tools@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guoguangtao/YXCTool/35790778efe6eff766cd0bcb6e8b0cfcd2879f5b/YXCTools/Assets.xcassets/tools.imageset/tools@3x.png -------------------------------------------------------------------------------- /YXCTools/AutoLayout/Controller/YXCAutoLayoutController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCAutoLayoutController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/11/30. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCAutoLayoutController : YXCBaseController 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/Bluetooth/Controller/YXCBluetoothCommunicationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBluetoothCommunicationController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/11/20. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// 蓝牙通信界面 14 | @interface YXCBluetoothCommunicationController : YXCBaseController 15 | 16 | #pragma mark - Property 17 | 18 | 19 | #pragma mark - Method 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /YXCTools/Bluetooth/Controller/YXCBluetoothController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBluetoothController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/11/6. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// 蓝牙列表 14 | @interface YXCBluetoothController : YXCBaseController 15 | 16 | #pragma mark - Property 17 | 18 | 19 | #pragma mark - Method 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /YXCTools/Bluetooth/View/YXCBlueToothDeviceCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBlueToothDeviceCell.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/11/17. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class CBPeripheral; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface YXCBlueToothDeviceCell : UITableViewCell 16 | 17 | #pragma mark - Property 18 | 19 | @property (nonatomic, strong) CBPeripheral *peripheral; 20 | 21 | 22 | #pragma mark - Method 23 | 24 | + (instancetype)cellWithTableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath; 25 | 26 | 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /YXCTools/Controller/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /YXCTools/Controller/YXCBaseController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBaseController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/19. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YXCBaseController : UIViewController 12 | 13 | #pragma mark - Property 14 | 15 | @property (nonatomic, strong) NSDictionary *parameter; /**< 参数 */ 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/Controller/YXCBaseController.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBaseController.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/19. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | @interface YXCBaseController () 12 | 13 | 14 | @end 15 | 16 | @implementation YXCBaseController 17 | 18 | #pragma mark - Lifecycle 19 | 20 | - (void)viewDidLoad { 21 | [super viewDidLoad]; 22 | 23 | self.view.backgroundColor = [UIColor whiteColor]; 24 | } 25 | 26 | - (void)dealloc { 27 | 28 | NSLog(@"%@", self); 29 | } 30 | 31 | 32 | 33 | 34 | #pragma mark - Custom Accessors (Setter 与 Getter 方法) 35 | 36 | 37 | #pragma mark - IBActions 38 | 39 | 40 | #pragma mark - Public 41 | 42 | 43 | #pragma mark - Private 44 | 45 | 46 | #pragma mark - Protocol 47 | 48 | 49 | #pragma mark - UI 50 | 51 | 52 | #pragma mark - Constraints 53 | 54 | 55 | 56 | #pragma mark - 懒加载 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /YXCTools/Masonry/MASCompositeConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASCompositeConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | #import "MASUtilities.h" 11 | 12 | /** 13 | * A group of MASConstraint objects 14 | */ 15 | @interface MASCompositeConstraint : MASConstraint 16 | 17 | /** 18 | * Creates a composite with a predefined array of children 19 | * 20 | * @param children child MASConstraints 21 | * 22 | * @return a composite constraint 23 | */ 24 | - (id)initWithChildren:(NSArray *)children; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /YXCTools/Masonry/MASLayoutConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * When you are debugging or printing the constraints attached to a view this subclass 13 | * makes it easier to identify which constraints have been created via Masonry 14 | */ 15 | @interface MASLayoutConstraint : NSLayoutConstraint 16 | 17 | /** 18 | * a key to associate with this constraint 19 | */ 20 | @property (nonatomic, strong) id mas_key; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /YXCTools/Masonry/MASLayoutConstraint.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASLayoutConstraint.h" 10 | 11 | @implementation MASLayoutConstraint 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /YXCTools/Masonry/MASViewAttribute.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewAttribute.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * An immutable tuple which stores the view and the related NSLayoutAttribute. 13 | * Describes part of either the left or right hand side of a constraint equation 14 | */ 15 | @interface MASViewAttribute : NSObject 16 | 17 | /** 18 | * The view which the reciever relates to. Can be nil if item is not a view. 19 | */ 20 | @property (nonatomic, weak, readonly) MAS_VIEW *view; 21 | 22 | /** 23 | * The item which the reciever relates to. 24 | */ 25 | @property (nonatomic, weak, readonly) id item; 26 | 27 | /** 28 | * The attribute which the reciever relates to 29 | */ 30 | @property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute; 31 | 32 | /** 33 | * Convenience initializer. 34 | */ 35 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute; 36 | 37 | /** 38 | * The designated initializer. 39 | */ 40 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute; 41 | 42 | /** 43 | * Determine whether the layoutAttribute is a size attribute 44 | * 45 | * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight 46 | */ 47 | - (BOOL)isSizeAttribute; 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /YXCTools/Masonry/MASViewAttribute.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewAttribute.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | 11 | @implementation MASViewAttribute 12 | 13 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute { 14 | self = [self initWithView:view item:view layoutAttribute:layoutAttribute]; 15 | return self; 16 | } 17 | 18 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute { 19 | self = [super init]; 20 | if (!self) return nil; 21 | 22 | _view = view; 23 | _item = item; 24 | _layoutAttribute = layoutAttribute; 25 | 26 | return self; 27 | } 28 | 29 | - (BOOL)isSizeAttribute { 30 | return self.layoutAttribute == NSLayoutAttributeWidth 31 | || self.layoutAttribute == NSLayoutAttributeHeight; 32 | } 33 | 34 | - (BOOL)isEqual:(MASViewAttribute *)viewAttribute { 35 | if ([viewAttribute isKindOfClass:self.class]) { 36 | return self.view == viewAttribute.view 37 | && self.layoutAttribute == viewAttribute.layoutAttribute; 38 | } 39 | return [super isEqual:viewAttribute]; 40 | } 41 | 42 | - (NSUInteger)hash { 43 | return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /YXCTools/Masonry/MASViewConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | #import "MASConstraint.h" 11 | #import "MASLayoutConstraint.h" 12 | #import "MASUtilities.h" 13 | 14 | /** 15 | * A single constraint. 16 | * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view 17 | */ 18 | @interface MASViewConstraint : MASConstraint 19 | 20 | /** 21 | * First item/view and first attribute of the NSLayoutConstraint 22 | */ 23 | @property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute; 24 | 25 | /** 26 | * Second item/view and second attribute of the NSLayoutConstraint 27 | */ 28 | @property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute; 29 | 30 | /** 31 | * initialises the MASViewConstraint with the first part of the equation 32 | * 33 | * @param firstViewAttribute view.mas_left, view.mas_width etc. 34 | * 35 | * @return a new view constraint 36 | */ 37 | - (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute; 38 | 39 | /** 40 | * Returns all MASViewConstraints installed with this view as a first item. 41 | * 42 | * @param view A view to retrieve constraints for. 43 | * 44 | * @return An array of MASViewConstraints. 45 | */ 46 | + (NSArray *)installedConstraintsForView:(MAS_VIEW *)view; 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /YXCTools/Masonry/Masonry.h: -------------------------------------------------------------------------------- 1 | // 2 | // Masonry.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Masonry. 12 | FOUNDATION_EXPORT double MasonryVersionNumber; 13 | 14 | //! Project version string for Masonry. 15 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; 16 | 17 | #import "MASUtilities.h" 18 | #import "View+MASAdditions.h" 19 | #import "View+MASShorthandAdditions.h" 20 | #import "ViewController+MASAdditions.h" 21 | #import "NSArray+MASAdditions.h" 22 | #import "NSArray+MASShorthandAdditions.h" 23 | #import "MASConstraint.h" 24 | #import "MASCompositeConstraint.h" 25 | #import "MASViewAttribute.h" 26 | #import "MASViewConstraint.h" 27 | #import "MASConstraintMaker.h" 28 | #import "MASLayoutConstraint.h" 29 | #import "NSLayoutConstraint+MASDebugAdditions.h" 30 | -------------------------------------------------------------------------------- /YXCTools/Masonry/NSArray+MASShorthandAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+MASShorthandAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 22/07/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "NSArray+MASAdditions.h" 10 | 11 | #ifdef MAS_SHORTHAND 12 | 13 | /** 14 | * Shorthand array additions without the 'mas_' prefixes, 15 | * only enabled if MAS_SHORTHAND is defined 16 | */ 17 | @interface NSArray (MASShorthandAdditions) 18 | 19 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; 20 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; 21 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; 22 | 23 | @end 24 | 25 | @implementation NSArray (MASShorthandAdditions) 26 | 27 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { 28 | return [self mas_makeConstraints:block]; 29 | } 30 | 31 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { 32 | return [self mas_updateConstraints:block]; 33 | } 34 | 35 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { 36 | return [self mas_remakeConstraints:block]; 37 | } 38 | 39 | @end 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /YXCTools/Masonry/NSLayoutConstraint+MASDebugAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLayoutConstraint+MASDebugAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * makes debug and log output of NSLayoutConstraints more readable 13 | */ 14 | @interface NSLayoutConstraint (MASDebugAdditions) 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /YXCTools/Masonry/ViewController+MASAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.h 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "MASUtilities.h" 10 | #import "MASConstraintMaker.h" 11 | #import "MASViewAttribute.h" 12 | 13 | #ifdef MAS_VIEW_CONTROLLER 14 | 15 | @interface MAS_VIEW_CONTROLLER (MASAdditions) 16 | 17 | /** 18 | * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute 19 | */ 20 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide; 21 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide; 22 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop; 23 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom; 24 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop; 25 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom; 26 | 27 | 28 | @end 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /YXCTools/Masonry/ViewController+MASAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.m 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "ViewController+MASAdditions.h" 10 | 11 | #ifdef MAS_VIEW_CONTROLLER 12 | 13 | @implementation MAS_VIEW_CONTROLLER (MASAdditions) 14 | 15 | - (MASViewAttribute *)mas_topLayoutGuide { 16 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 17 | } 18 | - (MASViewAttribute *)mas_topLayoutGuideTop { 19 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 20 | } 21 | - (MASViewAttribute *)mas_topLayoutGuideBottom { 22 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 23 | } 24 | 25 | - (MASViewAttribute *)mas_bottomLayoutGuide { 26 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 27 | } 28 | - (MASViewAttribute *)mas_bottomLayoutGuideTop { 29 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 30 | } 31 | - (MASViewAttribute *)mas_bottomLayoutGuideBottom { 32 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 33 | } 34 | 35 | 36 | 37 | @end 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /YXCTools/Model/YXCControllerModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCControllerModel.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/19. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /// 控制器信息模型 12 | @interface YXCControllerModel : NSObject 13 | 14 | #pragma mark - Property 15 | 16 | @property (nonatomic, copy) NSString *className; /**< 需要跳转的控制器名称 */ 17 | @property (nonatomic, copy) NSString *title; /**< 控制器标题 */ 18 | @property (nonatomic, strong) NSDictionary *parameter; /**< 参数 */ 19 | 20 | 21 | #pragma mark - Method 22 | 23 | /// 创建 model 24 | /// @param className 控制器类名 25 | /// @param title 控制器标题 26 | /// @param parameter 参数 27 | + (instancetype)modelWithClassName:(NSString *)className 28 | title:(NSString *)title 29 | parameter:(NSDictionary *)parameter; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /YXCTools/Model/YXCControllerModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCControllerModel.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/19. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCControllerModel.h" 10 | 11 | @interface YXCControllerModel () 12 | 13 | 14 | 15 | @end 16 | 17 | @implementation YXCControllerModel 18 | 19 | #pragma mark - Lifecycle 20 | 21 | 22 | 23 | 24 | #pragma mark - Custom Accessors (Setter 方法) 25 | 26 | 27 | #pragma mark - Public 28 | 29 | + (instancetype)modelWithClassName:(NSString *)className title:(NSString *)title parameter:(NSDictionary *)parameter { 30 | 31 | YXCControllerModel *model = [YXCControllerModel new]; 32 | model.className = className; 33 | model.title = title; 34 | model.parameter = parameter; 35 | 36 | return model; 37 | } 38 | 39 | 40 | #pragma mark - Private 41 | 42 | 43 | #pragma mark - Protocol 44 | 45 | 46 | #pragma mark - 懒加载 47 | 48 | 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /YXCTools/Multithreading/YXCGCDController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCGCDController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | @interface YXCGCDController : YXCBaseController 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/Multithreading/YXCGCDController.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCGCDController.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCGCDController.h" 10 | 11 | @interface YXCGCDController () 12 | 13 | 14 | 15 | @end 16 | 17 | @implementation YXCGCDController 18 | 19 | #pragma mark - Lifecycle 20 | 21 | /// 刷新UI 22 | - (void)injected { 23 | 24 | } 25 | 26 | - (void)viewDidLoad { 27 | [super viewDidLoad]; 28 | 29 | [self setupUI]; 30 | [self setupConstraints]; 31 | } 32 | 33 | 34 | 35 | 36 | #pragma mark - Custom Accessors (Setter 与 Getter 方法) 37 | 38 | 39 | #pragma mark - IBActions 40 | 41 | 42 | #pragma mark - Public 43 | 44 | 45 | #pragma mark - Private 46 | 47 | 48 | #pragma mark - Protocol 49 | 50 | 51 | #pragma mark - UI 52 | 53 | - (void)setupUI { 54 | 55 | 56 | } 57 | 58 | 59 | #pragma mark - Constraints 60 | 61 | - (void)setupConstraints { 62 | 63 | 64 | } 65 | 66 | 67 | #pragma mark - 懒加载 68 | 69 | @end 70 | -------------------------------------------------------------------------------- /YXCTools/Multithreading/YXCMultithreadingController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCMultithreadingController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// 多线程 12 | @interface YXCMultithreadingController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/Multithreading/YXCNSThreadController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCNSThreadController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | @interface YXCNSThreadController : YXCBaseController 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/Multithreading/YXCPthreadController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPthreadController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | @interface YXCPthreadController : YXCBaseController 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/Multithreading/YXCPthreadController.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPthreadController.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCPthreadController.h" 10 | #import 11 | 12 | @interface YXCPthreadController () 13 | 14 | 15 | 16 | @end 17 | 18 | @implementation YXCPthreadController 19 | 20 | #pragma mark - Lifecycle 21 | 22 | /// 刷新UI 23 | - (void)injected { 24 | 25 | } 26 | 27 | - (void)viewDidLoad { 28 | [super viewDidLoad]; 29 | 30 | [self setupUI]; 31 | [self setupConstraints]; 32 | } 33 | 34 | 35 | 36 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 37 | 38 | pthread_t thread; 39 | pthread_create(&thread, NULL, test, NULL); 40 | pthread_detach(thread); 41 | } 42 | 43 | void *test(void *data) { 44 | 45 | NSLog(@"%s", __func__); 46 | 47 | return NULL; 48 | } 49 | 50 | 51 | #pragma mark - Custom Accessors (Setter 与 Getter 方法) 52 | 53 | 54 | #pragma mark - IBActions 55 | 56 | 57 | #pragma mark - Public 58 | 59 | 60 | #pragma mark - Private 61 | 62 | 63 | #pragma mark - Protocol 64 | 65 | 66 | #pragma mark - UI 67 | 68 | - (void)setupUI { 69 | 70 | 71 | } 72 | 73 | 74 | #pragma mark - Constraints 75 | 76 | - (void)setupConstraints { 77 | 78 | 79 | } 80 | 81 | 82 | #pragma mark - 懒加载 83 | 84 | @end 85 | -------------------------------------------------------------------------------- /YXCTools/Multithreading/YXCThread.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCThread.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YXCThread : NSThread 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/Multithreading/YXCThread.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCThread.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCThread.h" 10 | 11 | @interface YXCThread () 12 | 13 | 14 | 15 | @end 16 | 17 | @implementation YXCThread 18 | 19 | #pragma mark - Lifecycle 20 | 21 | 22 | 23 | 24 | #pragma mark - Custom Accessors (Setter 方法) 25 | 26 | 27 | #pragma mark - Public 28 | 29 | 30 | #pragma mark - Private 31 | 32 | 33 | #pragma mark - Protocol 34 | 35 | 36 | #pragma mark - 懒加载 37 | 38 | 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /YXCTools/Net/YXCNetManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCNetManager.h 3 | // YXCTools 4 | // 5 | // Created by guogt on 2022/6/1. 6 | // Copyright © 2022 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCNetManager : NSObject 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/Net/YXCNetManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCNetManager.m 3 | // YXCTools 4 | // 5 | // Created by guogt on 2022/6/1. 6 | // Copyright © 2022 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCNetManager.h" 10 | 11 | @implementation YXCNetManager 12 | 13 | 14 | #pragma mark - Lifecycle 15 | 16 | - (void)dealloc { 17 | 18 | 19 | } 20 | 21 | 22 | #pragma mark - Custom Accessors (Setter 方法) 23 | 24 | 25 | #pragma mark - Public 26 | 27 | 28 | #pragma mark - Private 29 | 30 | 31 | #pragma mark - Protocol 32 | 33 | 34 | #pragma mark - Lazy 35 | 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /YXCTools/Other/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (nonatomic, assign, getter=isLaunchScreen) BOOL launchScreen; /**< 是否是横屏 */ 14 | @property (nonatomic, weak) UINavigationController *navigationController; 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /YXCTools/Other/SceneDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SceneDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow * window; 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/Controller/YXCPhotoAlbumListController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPhotoAlbumListController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/22. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// 相册访问 12 | @interface YXCPhotoAlbumListController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/Controller/YXCPhotoAlbumListController.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPhotoAlbumListController.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/22. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCPhotoAlbumListController.h" 10 | #import "YXCPhotoView.h" 11 | 12 | @interface YXCPhotoAlbumListController () 13 | 14 | 15 | 16 | @end 17 | 18 | @implementation YXCPhotoAlbumListController 19 | 20 | #pragma mark - Lifecycle 21 | 22 | /// 刷新UI 23 | - (void)injected { 24 | [self.view yxc_removeAllSubView]; 25 | 26 | [self setupUI]; 27 | [self setupConstraints]; 28 | } 29 | 30 | - (void)viewDidLoad { 31 | [super viewDidLoad]; 32 | 33 | [self setupUI]; 34 | [self setupConstraints]; 35 | } 36 | 37 | 38 | 39 | 40 | #pragma mark - Custom Accessors (Setter 与 Getter 方法) 41 | 42 | 43 | #pragma mark - IBActions 44 | 45 | 46 | #pragma mark - Public 47 | 48 | 49 | #pragma mark - Private 50 | 51 | 52 | #pragma mark - Protocol 53 | 54 | 55 | #pragma mark - UI 56 | 57 | - (void)setupUI { 58 | 59 | YXCPhotoView *photoView = [YXCPhotoView photoViewWithOwner:self]; 60 | photoView.frame = self.view.bounds; 61 | [self.view addSubview:photoView]; 62 | } 63 | 64 | 65 | #pragma mark - Constraints 66 | 67 | - (void)setupConstraints { 68 | 69 | 70 | } 71 | 72 | 73 | #pragma mark - 懒加载 74 | 75 | @end 76 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/Controller/YXCPhotoListController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPhotoListController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/25. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | @interface YXCPhotoListController : YXCBaseController 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/Model/YXCAssetModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCAssetModel.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/9. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface YXCAssetModel : NSObject 13 | 14 | #pragma mark - Property 15 | 16 | @property (nonatomic, assign) BOOL selected; /**< 是否被选中 */ 17 | @property (nonatomic, strong) PHAsset *asset; /**< 从相册中获取到的照片信息 */ 18 | 19 | 20 | #pragma mark - Method 21 | 22 | + (instancetype)modelWithAsset:(PHAsset *)asset; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/Model/YXCAssetModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCAssetModel.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/9. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCAssetModel.h" 10 | 11 | @interface YXCAssetModel () 12 | 13 | 14 | 15 | @end 16 | 17 | @implementation YXCAssetModel 18 | 19 | #pragma mark - Lifecycle 20 | 21 | 22 | 23 | 24 | #pragma mark - Custom Accessors (Setter 方法) 25 | 26 | 27 | #pragma mark - Public 28 | 29 | + (instancetype)modelWithAsset:(PHAsset *)asset { 30 | 31 | YXCAssetModel *model = [[YXCAssetModel alloc] init]; 32 | model.asset = asset; 33 | 34 | return model; 35 | } 36 | 37 | 38 | #pragma mark - Private 39 | 40 | 41 | #pragma mark - Protocol 42 | 43 | 44 | #pragma mark - 懒加载 45 | 46 | 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/View/YXCBigPictureCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBigPictureCell.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2021/7/29. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class YXCAssetModel; 12 | 13 | UIKIT_EXTERN NSString *const YXCBigPictureCellIdentifier; 14 | 15 | @interface YXCBigPictureCell : UICollectionViewCell 16 | 17 | #pragma mark - Property 18 | 19 | @property (nonatomic, strong) YXCAssetModel *assetModel; 20 | 21 | 22 | #pragma mark - Method 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/View/YXCBigPictureView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBigPictureView.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/9. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class YXCAssetModel; 12 | 13 | @interface YXCBigPictureView : UIView 14 | 15 | #pragma mark - Property 16 | 17 | @property (nonatomic, strong) NSArray *photos; /**< 图片 */ 18 | @property (nonatomic, assign) NSInteger selectedIndex; 19 | 20 | 21 | #pragma mark - Method 22 | 23 | /// 展示图片 24 | /// @param photos 图片数组 25 | + (instancetype)showWithAssetModels:(NSArray *)photos 26 | selectedIndex:(NSInteger)selectedIndex; 27 | 28 | - (void)dismiss; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/View/YXCPhotoListCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPhotoListCell.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/24. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YXCPhotoListCell : UITableViewCell 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | + (instancetype)cellWithTableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/View/YXCPhotoListImageCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPhotoListImageCell.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/25. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class YXCAssetModel; 12 | 13 | @protocol YXCPhotoListImageCellDelegate; 14 | 15 | 16 | #define kPhotoListImageCellIdentifier @"YXCPhotoListImageCellIdentifier" 17 | 18 | @interface YXCPhotoListImageCell : UICollectionViewCell 19 | 20 | #pragma mark - Property 21 | 22 | @property (nonatomic, copy) NSString *selectedTitle; /**< 选中照片索引 */ 23 | @property (nonatomic, weak) id delegate; /**< 代理 */ 24 | @property (nonatomic, strong) YXCAssetModel *assetModel; 25 | 26 | 27 | #pragma mark - Method 28 | 29 | @end 30 | 31 | 32 | #pragma mark - ================ YXCPhotoListImageCellDelegate ================ 33 | 34 | @protocol YXCPhotoListImageCellDelegate 35 | 36 | @optional 37 | 38 | - (void)listImageCell:(YXCPhotoListImageCell *)cell didSelectedWithAssetModel:(YXCAssetModel *)assetModel; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /YXCTools/PhotoKit/View/YXCPhotoView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPhotoView.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/22. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /// 相册访问 12 | @interface YXCPhotoView : UIView 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | + (instancetype)photoViewWithOwner:(UIViewController *)owner; 20 | 21 | - (instancetype)initWithOwner:(UIViewController *)owner; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /YXCTools/Scan/Controller/YXCScanQRCodeController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCScanQRCodeController.h 3 | // YXCTools 4 | // 5 | // Created by guogt on 2022/5/13. 6 | // Copyright © 2022 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// 二维码扫描控制器 14 | @interface YXCScanQRCodeController : YXCBaseController 15 | 16 | #pragma mark - Property 17 | 18 | 19 | #pragma mark - Method 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /YXCTools/Scan/Tools/YXCScanTools.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCScanTools.h 3 | // YXCTools 4 | // 5 | // Created by guogt on 2022/5/13. 6 | // Copyright © 2022 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | typedef void(^AVAuthorizationSuccess)(BOOL success); 13 | 14 | NS_ASSUME_NONNULL_BEGIN 15 | 16 | @interface YXCScanTools : NSObject 17 | 18 | #pragma mark - Property 19 | 20 | 21 | #pragma mark - Method 22 | 23 | /// 获取相机授权状态 24 | + (AVAuthorizationStatus)getAuthorizationStatus; 25 | 26 | /// 请求授权 27 | + (void)requestAuthorization:(AVAuthorizationSuccess)success; 28 | 29 | /// 跳转到系统本app访问设置 30 | + (void)jumpSystemSelfAppAccessSettings; 31 | 32 | @end 33 | 34 | NS_ASSUME_NONNULL_END 35 | -------------------------------------------------------------------------------- /YXCTools/Scan/View/YXCScanView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCScanView.h 3 | // YXCTools 4 | // 5 | // Created by guogt on 2022/5/13. 6 | // Copyright © 2022 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// 扫描二维码界面 14 | @interface YXCScanView : UIView 15 | 16 | #pragma mark - Property 17 | 18 | 19 | #pragma mark - Method 20 | 21 | /// 开始动画 22 | - (void)startAnimation; 23 | 24 | /// 暂停动画 25 | - (void)pauseAnimation; 26 | 27 | /// 结束动画 28 | - (void)stopAnimation; 29 | 30 | /// 添加返回事件 31 | - (void)addBackAction:(_Nonnull SEL)action target:(_Nonnull id)target; 32 | 33 | /// 添加前往相册事件 34 | - (void)addPhotoButtonAction:(_Nonnull SEL)action target:(_Nonnull id)target; 35 | 36 | @end 37 | 38 | NS_ASSUME_NONNULL_END 39 | -------------------------------------------------------------------------------- /YXCTools/Test/View/YXCBannerCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBannerCell.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/13. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCBannerCell : UICollectionViewCell 14 | 15 | #pragma mark - Property 16 | 17 | @property (nonatomic, copy) NSString *text; 18 | 19 | 20 | #pragma mark - Method 21 | 22 | /// 动画 23 | - (void)yxc_animationWithScrollView:(UIScrollView *)scrollView layout:(UICollectionViewFlowLayout *)layout; 24 | 25 | 26 | @end 27 | 28 | NS_ASSUME_NONNULL_END 29 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCBannerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBannerController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/13. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// 仿照华为音乐Banner动画 14 | @interface YXCBannerController : YXCBaseController 15 | 16 | #pragma mark - Property 17 | 18 | 19 | #pragma mark - Method 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCImageSynthesisController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCImageSynthesisController.h 3 | // YXCTools 4 | // 5 | // Created by guogt on 2024/8/23. 6 | // Copyright © 2024 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCImageSynthesisController : YXCBaseController 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCObserverController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCObserverController.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/17. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// 观察者使用 14 | @interface YXCObserverController : YXCBaseController 15 | 16 | #pragma mark - Property 17 | 18 | 19 | #pragma mark - Method 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCObserverHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCObserverHandler.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/17. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCObserverHandler : NSObject 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCObserverHandler.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCObserverHandler.m 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/17. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCObserverHandler.h" 10 | 11 | @implementation YXCObserverHandler 12 | 13 | 14 | #pragma mark - Lifecycle 15 | 16 | - (void)dealloc { 17 | 18 | 19 | } 20 | 21 | 22 | #pragma mark - Custom Accessors (Setter 方法) 23 | 24 | 25 | #pragma mark - Public 26 | 27 | 28 | #pragma mark - Private 29 | 30 | - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 31 | NSLog(@"Person外部监听name:%@", change[NSKeyValueChangeNewKey]); 32 | } 33 | 34 | 35 | 36 | #pragma mark - Protocol 37 | 38 | 39 | #pragma mark - Lazy 40 | 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCPerson.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPerson.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/17. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCPerson : NSObject 14 | 15 | #pragma mark - Property 16 | 17 | @property (nonatomic, strong) NSString *name; 18 | @property (nonatomic, assign) NSInteger age; 19 | 20 | 21 | #pragma mark - Method 22 | 23 | //+ (instancetype)shareInstance; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCTestController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCTestController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2021/2/3. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | @interface YXCTestController : YXCBaseController 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCTestViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCTestViewModel.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/16. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCTestViewModel : NSObject 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | - (void)requestData:(dispatch_block_t)completion; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCTestViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCTestViewModel.m 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/16. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCTestViewModel.h" 10 | 11 | @implementation YXCTestViewModel 12 | 13 | 14 | #pragma mark - Lifecycle 15 | 16 | - (void)dealloc { 17 | 18 | 19 | } 20 | 21 | 22 | #pragma mark - Custom Accessors (Setter 方法) 23 | 24 | 25 | #pragma mark - Public 26 | 27 | - (void)requestData:(dispatch_block_t)completion { 28 | 29 | if (completion) { 30 | completion(); 31 | } 32 | } 33 | 34 | 35 | #pragma mark - Private 36 | 37 | 38 | #pragma mark - Protocol 39 | 40 | 41 | #pragma mark - Lazy 42 | 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /YXCTools/Test/YXCTouchController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCTouchController.h 3 | // YXCTools 4 | // 5 | // Created by guogt on 2024/6/4. 6 | // Copyright © 2024 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface YXCTouchController : YXCBaseController 14 | 15 | #pragma mark - Property 16 | 17 | 18 | #pragma mark - Method 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/Tools/YXCPushHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPushHandler.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/19. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class YXCControllerModel; 12 | 13 | /// 控制器跳转路由 14 | @interface YXCPushHandler : NSObject 15 | 16 | #pragma mark - Property 17 | 18 | 19 | #pragma mark - Method 20 | 21 | 22 | /// 以 push 的方式跳转控制器 23 | /// @param controller 上一层控制器 24 | /// @param model 需要跳转控制器的模型数据 25 | + (void)pushController:(UIViewController *)controller model:(YXCControllerModel *)model; 26 | 27 | /// 以 Present 的方式跳转控制器 28 | /// @param controller 上一层控制器 29 | /// @param model 需要跳转控制器的模型数据 30 | + (void)presentController:(UIViewController *)controller model:(YXCControllerModel *)model; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /YXCTools/UIKit/Controller/YXCLaunchImagesController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCLaunchImagesController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/20. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// 创建启动图 12 | @interface YXCLaunchImagesController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/UIKit/Controller/YXCTableViewEditController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCTableViewEditController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/28. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// tableView 编辑状态的使用 12 | @interface YXCTableViewEditController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/UIKit/Controller/YXCUIBezierPathController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCUIBezierPathController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/2. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// UIBezierPath 的使用 12 | @interface YXCUIBezierPathController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/UIKit/Controller/YXCUIBezierPathController.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCUIBezierPathController.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/2. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCUIBezierPathController.h" 10 | #import "YXCBezierPathView.h" 11 | 12 | @interface YXCUIBezierPathController () 13 | 14 | 15 | 16 | @end 17 | 18 | @implementation YXCUIBezierPathController 19 | 20 | #pragma mark - Lifecycle 21 | 22 | /// 刷新UI 23 | - (void)injected { 24 | 25 | [self.view yxc_removeAllSubView]; 26 | 27 | [self setupUI]; 28 | [self setupConstraints]; 29 | } 30 | 31 | - (void)viewDidLoad { 32 | [super viewDidLoad]; 33 | 34 | [self setupUI]; 35 | [self setupConstraints]; 36 | } 37 | 38 | 39 | 40 | 41 | #pragma mark - Custom Accessors (Setter 与 Getter 方法) 42 | 43 | 44 | #pragma mark - IBActions 45 | 46 | 47 | #pragma mark - Public 48 | 49 | 50 | #pragma mark - Private 51 | 52 | 53 | #pragma mark - Protocol 54 | 55 | 56 | #pragma mark - UI 57 | 58 | - (void)setupUI { 59 | 60 | YXCBezierPathView *blackView = [YXCBezierPathView new]; 61 | blackView.width = 100; 62 | blackView.height = 100; 63 | blackView.center = self.view.center; 64 | blackView.backgroundColor = UIColor.blackColor; 65 | [self.view addSubview:blackView]; 66 | } 67 | 68 | 69 | #pragma mark - Constraints 70 | 71 | - (void)setupConstraints { 72 | 73 | 74 | } 75 | 76 | 77 | #pragma mark - 懒加载 78 | 79 | @end 80 | -------------------------------------------------------------------------------- /YXCTools/UIKit/View/YXCBezierPathView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBezierPathView.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/2. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YXCBezierPathView : UIView 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/UIKit/View/YXCBezierPathView.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCBezierPathView.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/2. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBezierPathView.h" 10 | #import "UIView+YXC_Category.h" 11 | 12 | @interface YXCBezierPathView () 13 | 14 | @end 15 | 16 | @implementation YXCBezierPathView 17 | 18 | #pragma mark - Lifecycle 19 | 20 | /// 刷新UI 21 | - (void)injected { 22 | 23 | [self yxc_removeAllSubView]; 24 | 25 | [self setupUI]; 26 | [self setupConstraints]; 27 | } 28 | 29 | - (instancetype)initWithFrame:(CGRect)frame { 30 | 31 | if (self = [super initWithFrame:frame]) { 32 | 33 | [self setupUI]; 34 | [self setupConstraints]; 35 | } 36 | 37 | return self; 38 | } 39 | 40 | 41 | 42 | #pragma mark - Custom Accessors (Setter 与 Getter 方法) 43 | 44 | 45 | #pragma mark - IBActions 46 | 47 | 48 | #pragma mark - Public 49 | 50 | 51 | #pragma mark - Private 52 | 53 | 54 | #pragma mark - Protocol 55 | 56 | 57 | #pragma mark - UI 58 | 59 | - (void)setupUI { 60 | 61 | 62 | } 63 | 64 | 65 | #pragma mark - Constraints 66 | 67 | - (void)setupConstraints { 68 | 69 | 70 | } 71 | 72 | 73 | #pragma mark - 懒加载 74 | 75 | @end 76 | -------------------------------------------------------------------------------- /YXCTools/UIKit/View/YXCTableViewEditCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCTableViewEditCell.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/28. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /// tableView 编辑 Cell 12 | @interface YXCTableViewEditCell : UITableViewCell 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | + (instancetype)cellWithTableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /YXCTools/YXCTool.pch: -------------------------------------------------------------------------------- 1 | // 2 | // YXCTool.pch 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #ifndef YXCTool_pch 10 | #define YXCTool_pch 11 | 12 | #pragma mark - Header 13 | 14 | #import "YXCToolHeader.h" 15 | #import "Masonry.h" 16 | #import "YXCPushHandler.h" 17 | #import "YXCControllerModel.h" 18 | 19 | #endif /* YXCTool_pch */ 20 | -------------------------------------------------------------------------------- /YXCTools/YXCTools.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.com.hpplay.YXCTools.share 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/NSObject/NSArray+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSArray (YXC_Category) 14 | 15 | /// 通过函数式编程,将数组的每个元素,进行拼接 16 | - (NSString *(^)(NSString *separator))yxc_joinedByString; 17 | 18 | /// 通过链式编程,添加另外一个数组 19 | - (NSArray *(^)(NSArray *array))yxc_addObjects; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/NSObject/NSDictionary+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+Crash.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSDictionary (Crash) 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/NSObject/NSMutableArray+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableArray+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/7. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSMutableArray (YXC_Category) 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/NSObject/NSMutableAttributedString+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableAttributedString+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2021/4/13. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSMutableAttributedString (YXC_Category) 14 | 15 | /// 属性字符串拼接字符串 16 | - (NSMutableAttributedString *(^)(NSString * _Nullable string, NSDictionary * _Nullable attributes))yxc_appendString; 17 | 18 | /// 属性字符串拼接属性字符串 19 | - (NSMutableAttributedString *(^)(NSAttributedString * _Nullable attributedString))yxc_appendAttributedString; 20 | 21 | /// 属性字符串根据某个字符串修改属性 22 | - (NSMutableAttributedString *(^)(NSString * _Nullable string, NSDictionary *_Nullable attributes))yxc_modifyAttributedString; 23 | 24 | /// 给整个属性字符串增加属性 25 | - (NSMutableAttributedString *(^)(NSDictionary * _Nullable attributes))yxc_addAttributed; 26 | 27 | /// 通过图片名称和字体大小设置图片 28 | - (NSMutableAttributedString *(^)(NSString *imageName, UIFont *font))yxc_addImageAttributedWithNameAndFont; 29 | 30 | /// 通过图片名称和字体大小设置图片 31 | - (NSMutableAttributedString *(^)(NSString *imageName, CGFloat fontSize))yxc_addImageAttributedWithNameAndFontSize; 32 | 33 | /// 通过图片和字体大小设置图片 34 | - (NSMutableAttributedString *(^)(UIImage *image, UIFont *font))yxc_addImageAttributedAndFont; 35 | 36 | /// 通过图片名称和字体大小设置图片 37 | - (NSMutableAttributedString *(^)(UIImage *image, CGFloat fontSize))yxc_addImageAttributedAndFontSize; 38 | 39 | 40 | @end 41 | 42 | NS_ASSUME_NONNULL_END 43 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/NSObject/NSMutableDictionary+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableDictionary+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/7. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSMutableDictionary (YXC_Category) 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/NSObject/NSMutableDictionary+YXC_Category.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableDictionary+YXC_Category.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/11/7. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "NSMutableDictionary+YXC_Category.h" 10 | #import "NSObject+YXC_Category.h" 11 | 12 | @implementation NSMutableDictionary (YXC_Category) 13 | 14 | + (void)load { 15 | 16 | [self hookInstanceMethodWithTargetCls:NSClassFromString(@"__NSDictionaryM") 17 | currentCls:[self class] 18 | targetSelector:@selector(setObject:forKey:) 19 | currentSelector:@selector(yxc_setObject:forKey:)]; 20 | 21 | [self hookInstanceMethodWithTargetCls:NSClassFromString(@"__NSDictionaryM") 22 | currentCls:[self class] 23 | targetSelector:@selector(removeObjectForKey:) 24 | currentSelector:@selector(yxc_NSDictionaryM_removeObjectForKey:)]; 25 | } 26 | 27 | - (void)yxc_setObject:(id)anObject forKey:(id)aKey { 28 | 29 | if (anObject == nil) return; 30 | if (aKey == nil) return; 31 | 32 | [self yxc_setObject:anObject forKey:aKey]; 33 | } 34 | 35 | - (void)yxc_NSDictionaryM_removeObjectForKey:(id)aKey { 36 | 37 | if (aKey == nil) return; 38 | 39 | [self yxc_NSDictionaryM_removeObjectForKey:aKey]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/NSObject/NSObject+YXCObserver.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+YXCObserver.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/9/17. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void(^YXCKVOChangeBlock)(NSObject * _Nullable object, NSDictionary * _Nullable change); 12 | typedef void(^YXCKVONewOldChangeBlock)(NSObject * _Nullable object, _Nullable id newValue, _Nullable id oldValue); 13 | 14 | NS_ASSUME_NONNULL_BEGIN 15 | 16 | /// 观察者模式 17 | @interface NSObject (YXCObserver) 18 | 19 | /// 添加监听 20 | /// @param observer 监听对象 21 | /// @param keyPath 被监听的对象 22 | /// @param options 监听回调属性 23 | /// @param handler 监听回调 24 | - (void)yxc_addOberser:(NSObject *)observer 25 | forKeyPath:(NSString *)keyPath 26 | options:(NSKeyValueObservingOptions)options 27 | change:(YXCKVOChangeBlock)handler; 28 | 29 | /// 添加监听 30 | /// @param observer 监听对象 31 | /// @param keyPath 被监听的对象 32 | /// @param handler 监听回调 33 | - (void)yxc_addOberser:(NSObject *)observer 34 | forKeyPath:(NSString *)keyPath 35 | newOldChange:(YXCKVONewOldChangeBlock)handler; 36 | 37 | @end 38 | 39 | NS_ASSUME_NONNULL_END 40 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/NSObject/NSURL+YXCCategory.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSURL+YXCCategory.h 3 | // MacCommand 4 | // 5 | // Created by guogt on 2023/5/8. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface NSURL (YXCCategory) 13 | 14 | /// URL 解析对象 15 | @property (nonatomic, nullable, strong, readonly) NSURLComponents *yxc_components; 16 | /// URL 参数字典 17 | @property (nonatomic, nullable, strong, readonly) NSDictionary *yxc_queryItemsDictionary; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/NSObject/NSURL+YXCCategory.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSURL+YXCCategory.m 3 | // MacCommand 4 | // 5 | // Created by guogt on 2023/5/8. 6 | // 7 | 8 | #import "NSURL+YXCCategory.h" 9 | #import 10 | 11 | @implementation NSURL (YXCCategory) 12 | 13 | - (NSDictionary *)yxc_queryItemsDictionary { 14 | 15 | NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 16 | 17 | [self.yxc_components.queryItems enumerateObjectsUsingBlock:^(NSURLQueryItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 18 | [dictionary setValue:obj.value forKey:obj.name]; 19 | }]; 20 | 21 | return dictionary; 22 | } 23 | 24 | - (NSURLComponents *)yxc_components { 25 | 26 | NSURLComponents *components = objc_getAssociatedObject(self, @selector(yxc_components)); 27 | 28 | if (components == nil) { 29 | components = [[NSURLComponents alloc] initWithString:self.absoluteString]; 30 | objc_setAssociatedObject(self, @selector(yxc_components), components, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 31 | } 32 | 33 | return components; 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UIColor+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/25. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface UIColor (YXC_Category) 14 | 15 | /// 设置亮色与暗黑模式下的颜色 16 | /// @param lightColor 亮色 17 | /// @param darkColor 暗黑模式下的颜色 18 | + (UIColor *)yxc_colorWithLightColor:(UIColor *)lightColor darkColor:(UIColor *)darkColor; 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UIColor+YXC_Category.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+YXC_Category.m 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/10/25. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "UIColor+YXC_Category.h" 10 | 11 | @implementation UIColor (YXC_Category) 12 | 13 | /// 设置亮色与暗黑模式下的颜色 14 | /// @param lightColor 亮色 15 | /// @param darkColor 暗黑模式下的颜色 16 | + (UIColor *)yxc_colorWithLightColor:(UIColor *)lightColor darkColor:(UIColor *)darkColor { 17 | 18 | if (@available(iOS 13.0, *)) { 19 | return [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) { 20 | if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) { 21 | return darkColor; 22 | } else { 23 | return lightColor; 24 | } 25 | }]; 26 | } else { 27 | return lightColor; 28 | } 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UIControl+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIControl+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface UIControl (YXC_Category) 13 | 14 | @property (nonatomic, assign) CGFloat yxc_eventInterval; /**< 按钮防止重复点击 */ 15 | @property (nonatomic, assign) CGFloat yxc_expandSize; /**< 需要扩大的范围大小 */ 16 | @property (nonatomic, assign) CGFloat yxc_horizontalSize; /**< 横向扩大范围大小 */ 17 | @property (nonatomic, assign) CGFloat yxc_verticalSize; /**< 垂直扩大范围大小 */ 18 | 19 | @end 20 | 21 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UIDevice+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIDevice+YXC_Category.h 3 | // UIDeviceHandler 4 | // 5 | // Created by GGT on 2020/7/2. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "UIDeviceName.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | /// 点设置 15 | #define kYXCPT(num) [UIDevice fitWithPt:(num)] 16 | 17 | /// 像素设置 18 | #define kYXCPX(num) [UIDevice fitWithPx:(num)] 19 | 20 | @interface UIDevice (YXC_Category) 21 | 22 | @property (nonatomic, assign, readonly, class, getter=isBangsScreen) BOOL bangsScreen; /**< 是否是刘海屏 */ 23 | @property (nonatomic, assign, readonly, class) CGFloat statusBarHeight; /**< 状态栏高度 */ 24 | @property (nonatomic, assign, readonly, class) CGFloat navigationBarHeight; /**< 导航栏高度 */ 25 | @property (nonatomic, assign, readonly, class) CGFloat navigationAndStatusHeight; /**< 导航栏和状态栏高度 */ 26 | @property (nonatomic, assign, readonly, class) CGFloat bottomBarHeight; /**< 底部栏高度 */ 27 | @property (nonatomic, assign, readonly, class) CGFloat tabbarHeight; /**< tabbar 高度 */ 28 | @property (nonatomic, assign, readonly, class) CGFloat navigationBarCenterY; /**< 导航栏 CenterY */ 29 | 30 | 31 | /// 获取到机型 32 | - (NSString *)platform; 33 | 34 | /// 获取到机型名称 35 | - (NSString *)platformName; 36 | 37 | /// 根据像素设置实际值 38 | /// @param px 设计稿具体值 39 | + (CGFloat)fitWithPx:(CGFloat)px; 40 | 41 | /// 根据点设置实际值 42 | /// @param pt 点具体值 43 | + (CGFloat)fitWithPt:(CGFloat)pt; 44 | 45 | @end 46 | 47 | NS_ASSUME_NONNULL_END 48 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UIFont+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIFont+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/7/13. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface UIFont (YXC_Category) 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UIFont+YXC_Category.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIFont+YXC_Category.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/7/13. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "UIFont+YXC_Category.h" 10 | #import "NSObject+YXC_Category.h" 11 | #import 12 | 13 | #define DESIGN_SCREEN_WIDTH 750 14 | 15 | @implementation UIFont (YXC_Category) 16 | 17 | + (void)load { 18 | 19 | [self hookClassMethodWithTargetCls:[self class] 20 | currentCls:[self class] 21 | targetSelector:@selector(systemFontOfSize:) 22 | currentSelector:@selector(yxc_systemFontOfSize:)]; 23 | 24 | [self hookClassMethodWithTargetCls:[self class] 25 | currentCls:[self class] 26 | targetSelector:@selector(systemFontOfSize:weight:) 27 | currentSelector:@selector(yxc_systemFontOfSize:weight:)]; 28 | } 29 | 30 | + (UIFont *)yxc_systemFontOfSize:(CGFloat)fontSize { 31 | 32 | return [UIFont yxc_systemFontOfSize:[self yxc_fontSizeWithSize:fontSize]]; 33 | } 34 | 35 | + (CGFloat)yxc_fontSizeWithSize:(CGFloat)fontSize { 36 | 37 | return [UIScreen mainScreen].bounds.size.width / DESIGN_SCREEN_WIDTH * 2 * fontSize; 38 | } 39 | 40 | + (UIFont *)yxc_systemFontOfSize:(CGFloat)fontSize weight:(UIFontWeight)weight { 41 | 42 | return [UIFont yxc_systemFontOfSize:[self yxc_fontSizeWithSize:fontSize] 43 | weight:weight]; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UIImageView+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2021/2/3. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface UIImageView (YXC_Category) 14 | 15 | /// 设置图片 16 | /// @param imageName 图片名称 17 | - (void)yxc_setImageWithName:(NSString *)imageName; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UIImageView+YXC_Category.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+YXC_Category.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2021/2/3. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import "UIImageView+YXC_Category.h" 10 | 11 | @implementation UIImageView (YXC_Category) 12 | 13 | /// 设置图片 14 | /// @param imageName 图片名称 15 | - (void)yxc_setImageWithName:(NSString *)imageName { 16 | 17 | UIImage *image = [UIImage imageNamed:imageName]; 18 | self.image = image; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UITextField+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // UITextField+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol UITextFieldTextMaxLengthDelegate; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface UITextField (YXC_Category) 16 | 17 | @property (nonatomic, weak) id yxc_delegate; /**< 代理 */ 18 | @property (nonatomic, assign) NSInteger textMaxLength; /**< 文本最大字数限制 */ 19 | @property (nonatomic, assign) BOOL yxc_usingSystemKeyboard; /**< 使用系统键盘 */ 20 | 21 | 22 | #pragma mark - Method 23 | 24 | /// 键盘控制在 AppDelegate 中的 application:shouldAllowExtensionPointIdentifier: 调用 25 | + (BOOL)yxc_shouldAllowExtensionPointIdentifier:(UIApplicationExtensionPointIdentifier)extensionPointIdentifier; 26 | 27 | @end 28 | 29 | 30 | #pragma mark - ================ UITextFieldTextMaxLengthDelegate ================ 31 | 32 | @protocol UITextFieldTextMaxLengthDelegate 33 | 34 | @optional 35 | 36 | /// UITextField 文本发生改变代理方法 37 | /// @param textField UITextField输入框 38 | /// @param text 当前文本字符串 39 | /// @param textLength 当前文本字符串长度 40 | /// @param textMaxLength 当前输入框限制最大字符长度 41 | - (void)textField:(UITextField *)textField 42 | textDidChange:(NSString *)text 43 | textLength:(NSInteger)textLength 44 | textMaxLength:(NSInteger)textMaxLength; 45 | 46 | @end 47 | 48 | 49 | 50 | NS_ASSUME_NONNULL_END 51 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/Category/UIKit/UITextView+YXC_Category.h: -------------------------------------------------------------------------------- 1 | // 2 | // UITextView+YXC_Category.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol UITextViewTextMaxLengthDelegate; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface UITextView (YXC_Category) 16 | 17 | @property (nonatomic, weak) id yxc_delegate; /**< 代理 */ 18 | @property (nonatomic, assign) NSInteger textMaxLength; /**< 文本最大字数限制 默认为0,代表无限制输入*/ 19 | @property (nonatomic, copy) NSString *yxc_placeHolder; /**< 占位文字,如果textView还有初始值,请在设置 yxc_delegate, textMaxLength 属性之前,设置 yxc_placeHolder 和 text 属性 */ 20 | 21 | 22 | @end 23 | 24 | #pragma mark - ================ UITextViewTextMaxLengthDelegate ================ 25 | 26 | @protocol UITextViewTextMaxLengthDelegate 27 | 28 | @optional 29 | 30 | /// TextView 文本发生改变代理方法 31 | /// @param textView TextView输入框 32 | /// @param text 当前文本字符串 33 | /// @param textLength 当前文本字符串长度 34 | /// @param textMaxLength 当前输入框限制最大字符长度 35 | - (void)textView:(UITextView *)textView 36 | textDidChange:(NSString *)text 37 | textLength:(NSInteger)textLength 38 | textMaxLength:(NSInteger)textMaxLength; 39 | 40 | @end 41 | 42 | NS_ASSUME_NONNULL_END 43 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/NSObject/YXCDayLogHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCDayLogHandler.h 3 | // YXCTools 4 | // 5 | // Created by lbkj on 2021/11/10. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// 日志保存 14 | @interface YXCDayLogHandler : NSObject 15 | 16 | #pragma mark - Property 17 | 18 | 19 | #pragma mark - Method 20 | 21 | /// 日志保存 22 | + (void)redirectLEBLogToDocumentFolder; 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/NSObject/YXCImagePickerHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCImagePickerHandler.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/8/28. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | /// image - 图片 info - 图片信息 13 | typedef void(^YXCImagePickerComplete)(UIImage *image, NSDictionary *info); 14 | 15 | @interface YXCImagePickerHandler : NSObject 16 | 17 | #pragma mark - Property 18 | 19 | 20 | #pragma mark - Method 21 | 22 | /// 创建一个单例对象 23 | + (instancetype)shareImagePicker; 24 | 25 | /// 选择相片或者拍照 26 | /// @param owner 拥有者(利用 owner 跳转到 UIImagePickerController) 27 | /// @param allowsEditing 是否允许编辑 28 | /// @param complete 编辑或者选择照片/完成拍照回调 29 | - (void)choosePhotoOrCameraWithController:(UIViewController *)owner 30 | allowsEditing:(BOOL)allowsEditing 31 | complete:(YXCImagePickerComplete)complete; 32 | 33 | 34 | /// 弹窗提示 35 | /// @param title 提示标题 36 | /// @param message 提示信息 37 | - (void)showAlertWithTitle:(NSString *)title message:(NSString *)message; 38 | 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/NSObject/YXCRunLoopHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCRunLoopHandler.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2021/7/27. 6 | // Copyright © 2021 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YXCRunLoopHandler : NSObject 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | /// 创建一个运行循环 19 | /// @param mode 运行循环模式 20 | /// @param timeInterval 时间间隔 21 | /// @param handler 需要处理的事件 22 | + (instancetype)handlerForMode:(NSRunLoopMode)mode 23 | timeInterval:(CGFloat)timeInterval 24 | handler:(dispatch_block_t)handler; 25 | 26 | /// 创建一个运行循环 27 | /// @param mode 运行循环模式 28 | /// @param timeInterval 时间间隔 29 | /// @param handler 需要处理的事件 30 | - (instancetype)initForMode:(NSRunLoopMode)mode 31 | timeInterval:(CGFloat)timeInterval 32 | handler:(dispatch_block_t)handler; 33 | 34 | /// 运行循环开始工作 35 | - (void)start; 36 | 37 | /// 运行循环停止工作 38 | - (void)stop; 39 | 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/UIKit/YXCMarqueeLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCMarqueeLabel.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/26. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /// 跑马灯 Label 12 | @interface YXCMarqueeLabel : UIView 13 | 14 | #pragma mark - Property 15 | 16 | @property (nonatomic, assign) CGFloat scrollVelocity; /**< 滚动速度,必须大于 0 否则无效,设置该属性, duration 属性失效 */ 17 | @property (nonatomic, assign) NSTimeInterval duration; /**< 动画时长,默认 5s */ 18 | @property (nonatomic, assign) NSTimeInterval beginDelay; /**< 第一次动画延长时间,只有当 autoBeginScroll 为 YES 有效,默认为 0 */ 19 | @property (nonatomic, assign) NSTimeInterval pauseDelay; /**< 暂时间隔时间,默认为 0 */ 20 | @property (nonatomic, assign) CGFloat spacingBetweenLabels; /**< label 之间的间距,默认 20 */ 21 | @property (nonatomic, assign) BOOL autoBeginScroll; /**< 自动开始滚动 默认 YES */ 22 | @property (nonatomic, assign, getter=isScrolling) BOOL scrolling; /**< 是否正在滚动 */ 23 | @property (nonatomic, strong) UIColor *textColor; /**< 文本颜色 */ 24 | @property (nonatomic, assign) CGFloat fontSize; /**< 字体大小 */ 25 | @property (nonatomic, copy) NSString *text; /**< 文本,设置了文本之后开始滚动,所以在设置文本之前,请先把其他的属性设置好 */ 26 | 27 | 28 | #pragma mark - Method 29 | 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /YXCTools/YXCTools/UIKit/YXCPopOverView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPopOverView.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/23. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YXCPopOverView : UIView 12 | 13 | #pragma mark - Property 14 | 15 | @property (nonatomic, strong) UIColor *yxc_backgroundColor; /**< 背景颜色 */ 16 | @property (nonatomic, assign) CGFloat triangleWidth; /**< 三角形宽度 */ 17 | @property (nonatomic, assign) CGFloat triangleHeight; /**< 三角形高度 */ 18 | 19 | 20 | #pragma mark - Method 21 | 22 | /// 从 view 展示弹窗 23 | /// @param view 被点击的 view 24 | - (void)showFrom:(UIView *)view; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /YXCTools/iOS14/Controller/YXCDatePickerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCDatePickerController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/19. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | /// UIDatePicker 问题 12 | @interface YXCDatePickerController : YXCBaseController 13 | 14 | #pragma mark - Property 15 | 16 | 17 | #pragma mark - Method 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /YXCTools/iOS14/Controller/YXCPHPickerViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCPHPickerViewController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/10/12. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | @interface YXCPHPickerViewController : YXCBaseController 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/iOS14/Controller/YXCUIPageControlController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCUIPageControlController.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/21. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | @interface YXCUIPageControlController : YXCBaseController 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/iOS14/Controller/YXCiOS14Controller.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCiOS14Controller.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/19. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | @interface YXCiOS14Controller : YXCBaseController 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/iOS14/View/YXCDatePickerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCDatePickerView.h 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/9/19. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YXCDatePickerView : UIView 12 | 13 | #pragma mark - Property 14 | 15 | 16 | #pragma mark - Method 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /YXCTools/iOS16/Controller/YXCLaunchScreenController.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCLaunchScreenController.h 3 | // YXCTools 4 | // 5 | // Created by guogt on 2022/9/8. 6 | // Copyright © 2022 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// 横竖屏适配 14 | @interface YXCLaunchScreenController : YXCBaseController 15 | 16 | #pragma mark - Property 17 | 18 | 19 | #pragma mark - Method 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /YXCTools/iOS16/Controller/YXCiOS16Controller.h: -------------------------------------------------------------------------------- 1 | // 2 | // YXCiOS16Controller.h 3 | // YXCTools 4 | // 5 | // Created by guogt on 2022/9/8. 6 | // Copyright © 2022 GGT. All rights reserved. 7 | // 8 | 9 | #import "YXCBaseController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | 14 | /// iOS16 适配模块 15 | @interface YXCiOS16Controller : YXCBaseController 16 | 17 | #pragma mark - Property 18 | 19 | 20 | #pragma mark - Method 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /YXCTools/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // YXCTools 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | NSString * appDelegateClassName; 14 | @autoreleasepool { 15 | // Setup code that might create autoreleased objects goes here. 16 | appDelegateClassName = NSStringFromClass([AppDelegate class]); 17 | } 18 | return UIApplicationMain(argc, argv, nil, appDelegateClassName); 19 | } 20 | -------------------------------------------------------------------------------- /YXCToolsTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /YXCToolsTests/YXCToolsTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // YXCToolsTests.m 3 | // YXCToolsTests 4 | // 5 | // Created by GGT on 2020/4/17. 6 | // Copyright © 2020 GGT. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YXCToolsTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation YXCToolsTests 16 | 17 | - (void)setUp { 18 | // Put setup code here. This method is called before the invocation of each test method in the class. 19 | } 20 | 21 | - (void)tearDown { 22 | // Put teardown code here. This method is called after the invocation of each test method in the class. 23 | } 24 | 25 | - (void)testExample { 26 | // This is an example of a functional test case. 27 | // Use XCTAssert and related functions to verify your tests produce the correct results. 28 | } 29 | 30 | - (void)testPerformanceExample { 31 | // This is an example of a performance test case. 32 | [self measureBlock:^{ 33 | // Put the code you want to measure the time of here. 34 | }]; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /YXCToolsUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | --------------------------------------------------------------------------------