├── .gitignore
├── EHenTaiViewer.xcodeproj
├── project.pbxproj
└── project.xcworkspace
│ └── contents.xcworkspacedata
├── EHenTaiViewer.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── EHenTaiViewer
├── AppDelegate.h
├── AppDelegate.m
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── App Store-1024.png
│ │ ├── CarPlay-60@2x.png
│ │ ├── CarPlay-60@3x.png
│ │ ├── Contents.json
│ │ ├── iPad App-76.png
│ │ ├── iPad App-76@2x.png
│ │ ├── iPad Notifications-20.png
│ │ ├── iPad Notifications-20@2x.png
│ │ ├── iPad Pro App-83.5@2x.png
│ │ ├── iPad Settings-29.png
│ │ ├── iPad Settings-29@2x.png
│ │ ├── iPad Spotlight-40.png
│ │ ├── iPad Spotlight-40@2x.png
│ │ ├── iPhone Notification-20@2x.png
│ │ ├── iPhone Notification-20@3x.png
│ │ ├── iPhone Settings-29@2x.png
│ │ ├── iPhone Settings-29@3x.png
│ │ ├── iPhone Spotlight-40@2x.png
│ │ └── iPhone Spotlight-40@3x.png
│ ├── Bookmark
│ │ ├── Contents.json
│ │ ├── bookmark_all.imageset
│ │ │ ├── Contents.json
│ │ │ └── bookmark_all.png
│ │ └── bookmark_collect.imageset
│ │ │ ├── Contents.json
│ │ │ └── bookmark_collect.png
│ ├── Contents.json
│ ├── Info
│ │ ├── Contents.json
│ │ └── ic_share.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ic_share@2x.png
│ │ │ └── ic_share@3x.png
│ ├── Setting
│ │ ├── Contents.json
│ │ ├── checkbox.imageset
│ │ │ ├── Contents.json
│ │ │ ├── checkbox@2x.png
│ │ │ └── checkbox@3x.png
│ │ └── checkbox_unchecked.imageset
│ │ │ ├── Contents.json
│ │ │ ├── checkbox_unchecked@2x.png
│ │ │ └── checkbox_unchecked@3x.png
│ ├── Star
│ │ ├── Contents.json
│ │ ├── star_gray.imageset
│ │ │ ├── Contents.json
│ │ │ └── b27_icon_star_gray@2x.png
│ │ └── star_yellow.imageset
│ │ │ ├── Contents.json
│ │ │ └── b27_icon_star_yellow@2x.png
│ ├── TabBar
│ │ ├── Contents.json
│ │ ├── ic_favorite.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ic_favorite@2x.png
│ │ │ └── ic_favorite@3x.png
│ │ ├── ic_favorite_border.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ic_favorite_border@2x.png
│ │ │ └── ic_favorite_border@3x.png
│ │ ├── ic_format_list_bulleted.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ic_format_list_bulleted@2x.png
│ │ │ └── ic_format_list_bulleted@3x.png
│ │ ├── ic_notifications.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ic_notifications@2x.png
│ │ │ └── ic_notifications@3x.png
│ │ ├── ic_settings.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ic_settings@2x.png
│ │ │ └── ic_settings@3x.png
│ │ └── ic_whatshot.imageset
│ │ │ ├── Contents.json
│ │ │ ├── ic_whatshot@2x.png
│ │ │ └── ic_whatshot@3x.png
│ ├── arrow_right.imageset
│ │ ├── Contents.json
│ │ └── arrow_right.png
│ ├── home_logo.imageset
│ │ ├── Contents.json
│ │ └── home_logo.png
│ ├── mutSelect.imageset
│ │ ├── Contents.json
│ │ ├── mutSelect.png
│ │ ├── mutSelect@2x.png
│ │ └── mutSelect@3x.png
│ ├── sift.imageset
│ │ ├── Contents.json
│ │ └── sift.png
│ ├── thumb.imageset
│ │ ├── Contents.json
│ │ └── thumb.jpg
│ ├── toplist.imageset
│ │ ├── Contents.json
│ │ ├── toplist.png
│ │ ├── toplist@2x.png
│ │ └── toplist@3x.png
│ ├── touchid.imageset
│ │ ├── Contents.json
│ │ └── touchid.png
│ └── unlike.imageset
│ │ ├── Contents.json
│ │ └── collect@2x.png
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── EhTag_CN.json
├── Gallery+CoreDataClass.h
├── Gallery+CoreDataClass.m
├── Gallery+CoreDataProperties.h
├── Gallery+CoreDataProperties.m
├── GalleryPage+CoreDataClass.h
├── GalleryPage+CoreDataClass.m
├── GalleryPage+CoreDataProperties.h
├── GalleryPage+CoreDataProperties.m
├── Info.plist
├── NJKWebViewProgress.h
├── NJKWebViewProgress.m
├── NJKWebViewProgressView.h
├── NJKWebViewProgressView.m
├── NSString+StringHeight.h
├── NSString+StringHeight.m
├── PrefixHeader.pch
├── QJAddMytagsSearchController.h
├── QJAddMytagsSearchController.m
├── QJAllCommentController.h
├── QJAllCommentController.m
├── QJBigImageItem.h
├── QJBigImageItem.m
├── QJBrowerCollectManager.h
├── QJBrowerCollectManager.m
├── QJBrowerSettingPopView.h
├── QJBrowerSettingPopView.m
├── QJBrowerSettingPopView.xib
├── QJBrowserBookMarkPopView.h
├── QJBrowserBookMarkPopView.m
├── QJBrowserBookMarkPopView.xib
├── QJBrowserBookMarkPopViewCell.h
├── QJBrowserBookMarkPopViewCell.m
├── QJBrowserBookMarkPopViewCell.xib
├── QJButton.h
├── QJButton.m
├── QJCollectionViewFlowLayout.h
├── QJCollectionViewFlowLayout.m
├── QJColorPickBoard.h
├── QJColorPickBoard.m
├── QJColorPickProtocol.h
├── QJColorPickShowView.h
├── QJColorPickShowView.m
├── QJColorPickSlider.h
├── QJColorPickSlider.m
├── QJColorPickUtils.h
├── QJColorPickUtils.m
├── QJCommentCell.h
├── QJCommentCell.m
├── QJCommentCell.xib
├── QJContentSplitViewController.h
├── QJContentSplitViewController.m
├── QJCustomTabbarSettingController.h
├── QJCustomTabbarSettingController.m
├── QJFavoritesSelectCell.h
├── QJFavoritesSelectCell.m
├── QJFavoritesSelectCell.xib
├── QJFavoritesSelectController.h
├── QJFavoritesSelectController.m
├── QJFavouriteViewController.h
├── QJFavouriteViewController.m
├── QJFavouriteViewController.xib
├── QJGalleryItem.h
├── QJGalleryItem.m
├── QJGlobalInfo.h
├── QJGlobalInfo.m
├── QJGoCommentController.h
├── QJGoCommentController.m
├── QJGoCommentController.xib
├── QJHeadFreshingView.h
├── QJHeadFreshingView.m
├── QJHenTaiParser.h
├── QJHenTaiParser.m
├── QJHomeViewController.h
├── QJHomeViewController.m
├── QJHotAndLikeViewController.h
├── QJHotAndLikeViewController.m
├── QJImageCollectionViewCell.h
├── QJImageCollectionViewCell.m
├── QJImageCollectionViewCell.xib
├── QJLabel.h
├── QJLabel.m
├── QJLanguageOutCell.h
├── QJLanguageOutCell.m
├── QJLanguageOutCell.xib
├── QJLanguageOutHeadView.h
├── QJLanguageOutHeadView.m
├── QJLanguageOutHeadView.xib
├── QJLanguageOutViewController.h
├── QJLanguageOutViewController.m
├── QJLikeButton.h
├── QJLikeButton.m
├── QJLikeSearchBar.h
├── QJLikeSearchBar.m
├── QJLikeSearchBar.xib
├── QJListCell.h
├── QJListCell.m
├── QJListCell.xib
├── QJListItem.h
├── QJListItem.m
├── QJListTableView.h
├── QJListTableView.m
├── QJLoginViewController.h
├── QJLoginViewController.m
├── QJLoginViewController.xib
├── QJMainSettingListCell.h
├── QJMainSettingListCell.m
├── QJMainSettingListCell.xib
├── QJMainSplitViewController.h
├── QJMainSplitViewController.m
├── QJMangaImageDownloader.h
├── QJMangaImageDownloader.m
├── QJMangaImageModel.h
├── QJMangaImageModel.m
├── QJMangaImageParser.h
├── QJMangaImageParser.m
├── QJMangaManager.h
├── QJMangaManager.m
├── QJMangaTorrentActivity.h
├── QJMangaTorrentActivity.m
├── QJNetworkTool.h
├── QJNetworkTool.m
├── QJNewBrowerImageCell.h
├── QJNewBrowerImageCell.m
├── QJNewBrowerImageCell.xib
├── QJNewBrowerViewController.h
├── QJNewBrowerViewController.m
├── QJNewBrowerViewController.xib
├── QJNewCommentCell.h
├── QJNewCommentCell.m
├── QJNewCommentCell.xib
├── QJNewInfoViewController.h
├── QJNewInfoViewController.m
├── QJNewInfoViewController.xib
├── QJNewSearchViewController.h
├── QJNewSearchViewController.m
├── QJNowViewController.h
├── QJNowViewController.m
├── QJOrientationManager.h
├── QJOrientationManager.m
├── QJPasteManager.h
├── QJPasteManager.m
├── QJProtectTool.h
├── QJProtectTool.m
├── QJRankingHeadInfoCell.h
├── QJRankingHeadInfoCell.m
├── QJRankingHeadInfoCell.xib
├── QJRankingInfoCell.h
├── QJRankingInfoCell.m
├── QJRankingInfoCell.xib
├── QJRankingUploadCell.h
├── QJRankingUploadCell.m
├── QJRankingUploadCell.xib
├── QJRankingViewController.h
├── QJRankingViewController.m
├── QJRankingViewController.xib
├── QJScrollView.h
├── QJScrollView.m
├── QJSearchBar.h
├── QJSearchBar.m
├── QJSearchBar.xib
├── QJSearchClassifyCell.h
├── QJSearchClassifyCell.m
├── QJSearchClassifyCell.xib
├── QJSearchController.h
├── QJSearchController.m
├── QJSearchSettingSubViewController.h
├── QJSearchSettingSubViewController.m
├── QJSearchSettingTagSearchViewController.h
├── QJSearchSettingTagSearchViewController.m
├── QJSearchSettingViewController.h
├── QJSearchSettingViewController.m
├── QJSearchSiftHeadView.h
├── QJSearchSiftHeadView.m
├── QJSearchSoreCell.h
├── QJSearchSoreCell.m
├── QJSearchSoreCell.xib
├── QJSearchViewController.h
├── QJSearchViewController.m
├── QJSecretBgTool.h
├── QJSecretBgTool.m
├── QJSettingHightOtherController.h
├── QJSettingHightOtherController.m
├── QJSettingInfo.xib
├── QJSettingItem.h
├── QJSettingItem.m
├── QJSettingListCell.h
├── QJSettingListCell.m
├── QJSettingListCell.xib
├── QJSettingLoginCell.h
├── QJSettingLoginCell.m
├── QJSettingLoginCell.xib
├── QJSettingModel.h
├── QJSettingModel.m
├── QJSettingModel.plist
├── QJSettingMyTagsCell.h
├── QJSettingMyTagsCell.m
├── QJSettingMyTagsCell.xib
├── QJSettingMyTagsController.h
├── QJSettingMyTagsController.m
├── QJSettingMytagsEditController.h
├── QJSettingMytagsEditController.m
├── QJSettingMytagsEditController.xib
├── QJSettingViewController.h
├── QJSettingViewController.m
├── QJSettingWatchSettingController.h
├── QJSettingWatchSettingController.m
├── QJTabBarController.h
├── QJTabBarController.m
├── QJTableViewCell.h
├── QJTableViewCell.m
├── QJTagModel.h
├── QJTagModel.m
├── QJTagView.h
├── QJTagView.m
├── QJTipViewController.h
├── QJTipViewController.m
├── QJToast.h
├── QJToast.m
├── QJTool.h
├── QJTool.m
├── QJToplistUploaderItem.h
├── QJToplistUploaderItem.m
├── QJTorrentInfoCell.h
├── QJTorrentInfoCell.m
├── QJTorrentInfoCell.xib
├── QJTorrentInfoController.h
├── QJTorrentInfoController.m
├── QJTorrentItem.h
├── QJTorrentItem.m
├── QJTouchIDViewController.h
├── QJTouchIDViewController.m
├── QJTouchIDViewController.xib
├── QJViewController.h
├── QJViewController.m
├── QJWatchedViewController.h
├── QJWatchedViewController.m
├── QJWebViewController.h
├── QJWebViewController.m
├── QJWebViewController.xib
├── Reachability.h
├── Reachability.m
├── TBCityIconFont.h
├── TBCityIconFont.m
├── TBCityIconInfo.h
├── TBCityIconInfo.m
├── TFHpple.h
├── TFHpple.m
├── TFHppleElement.h
├── TFHppleElement.m
├── Tag+CoreDataClass.h
├── Tag+CoreDataClass.m
├── Tag+CoreDataProperties.h
├── Tag+CoreDataProperties.m
├── UIDevice+QJDevice.h
├── UIDevice+QJDevice.m
├── UIImage+TBCityIconFont.h
├── UIImage+TBCityIconFont.m
├── UITableViewCell+QJAddition.h
├── UITableViewCell+QJAddition.m
├── UITextView+Addition.h
├── UITextView+Addition.m
├── UIView+Layer.h
├── UIView+Layer.m
├── XHStarRateView
│ ├── XHStarRateView.h
│ └── XHStarRateView.m
├── XPathQuery.h
├── XPathQuery.m
├── iconfont.ttf
├── launch.png
├── loading.gif
└── main.m
├── EhCoreData.xcdatamodeld
└── EhCoreData.xcdatamodel
│ └── contents
├── LICENSE
├── Podfile
├── Podfile.lock
├── Pods
├── MagicalRecord
│ ├── LICENSE
│ ├── MagicalRecord
│ │ ├── Categories
│ │ │ ├── DataImport
│ │ │ │ ├── MagicalImportFunctions.h
│ │ │ │ ├── MagicalImportFunctions.m
│ │ │ │ ├── NSAttributeDescription+MagicalDataImport.h
│ │ │ │ ├── NSAttributeDescription+MagicalDataImport.m
│ │ │ │ ├── NSEntityDescription+MagicalDataImport.h
│ │ │ │ ├── NSEntityDescription+MagicalDataImport.m
│ │ │ │ ├── NSNumber+MagicalDataImport.h
│ │ │ │ ├── NSNumber+MagicalDataImport.m
│ │ │ │ ├── NSObject+MagicalDataImport.h
│ │ │ │ ├── NSObject+MagicalDataImport.m
│ │ │ │ ├── NSRelationshipDescription+MagicalDataImport.h
│ │ │ │ ├── NSRelationshipDescription+MagicalDataImport.m
│ │ │ │ ├── NSString+MagicalDataImport.h
│ │ │ │ └── NSString+MagicalDataImport.m
│ │ │ ├── NSManagedObject
│ │ │ │ ├── NSManagedObject+MagicalAggregation.h
│ │ │ │ ├── NSManagedObject+MagicalAggregation.m
│ │ │ │ ├── NSManagedObject+MagicalDataImport.h
│ │ │ │ ├── NSManagedObject+MagicalDataImport.m
│ │ │ │ ├── NSManagedObject+MagicalFinders.h
│ │ │ │ ├── NSManagedObject+MagicalFinders.m
│ │ │ │ ├── NSManagedObject+MagicalRecord.h
│ │ │ │ ├── NSManagedObject+MagicalRecord.m
│ │ │ │ ├── NSManagedObject+MagicalRequests.h
│ │ │ │ └── NSManagedObject+MagicalRequests.m
│ │ │ ├── NSManagedObjectContext
│ │ │ │ ├── NSManagedObjectContext+MagicalChainSave.h
│ │ │ │ ├── NSManagedObjectContext+MagicalChainSave.m
│ │ │ │ ├── NSManagedObjectContext+MagicalObserving.h
│ │ │ │ ├── NSManagedObjectContext+MagicalObserving.m
│ │ │ │ ├── NSManagedObjectContext+MagicalRecord.h
│ │ │ │ ├── NSManagedObjectContext+MagicalRecord.m
│ │ │ │ ├── NSManagedObjectContext+MagicalSaves.h
│ │ │ │ ├── NSManagedObjectContext+MagicalSaves.m
│ │ │ │ ├── NSManagedObjectContext+MagicalThreading.h
│ │ │ │ └── NSManagedObjectContext+MagicalThreading.m
│ │ │ ├── NSManagedObjectModel+MagicalRecord.h
│ │ │ ├── NSManagedObjectModel+MagicalRecord.m
│ │ │ ├── NSPersistentStore+MagicalRecord.h
│ │ │ ├── NSPersistentStore+MagicalRecord.m
│ │ │ ├── NSPersistentStoreCoordinator+MagicalRecord.h
│ │ │ └── NSPersistentStoreCoordinator+MagicalRecord.m
│ │ ├── Core
│ │ │ ├── MagicalRecord+Actions.h
│ │ │ ├── MagicalRecord+Actions.m
│ │ │ ├── MagicalRecord+ErrorHandling.h
│ │ │ ├── MagicalRecord+ErrorHandling.m
│ │ │ ├── MagicalRecord+Options.h
│ │ │ ├── MagicalRecord+Options.m
│ │ │ ├── MagicalRecord+Setup.h
│ │ │ ├── MagicalRecord+Setup.m
│ │ │ ├── MagicalRecord+ShorthandMethods.h
│ │ │ ├── MagicalRecord+ShorthandMethods.m
│ │ │ ├── MagicalRecord+iCloud.h
│ │ │ ├── MagicalRecord+iCloud.m
│ │ │ ├── MagicalRecordDeprecationMacros.h
│ │ │ ├── MagicalRecordInternal.h
│ │ │ ├── MagicalRecordInternal.m
│ │ │ ├── MagicalRecordLogging.h
│ │ │ └── MagicalRecordXcode7CompatibilityMacros.h
│ │ └── MagicalRecord.h
│ └── README.md
├── Manifest.lock
├── Masonry
│ ├── LICENSE
│ ├── 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
│ └── README.md
├── Pods.xcodeproj
│ └── project.pbxproj
├── Target Support Files
│ ├── MagicalRecord
│ │ ├── Info.plist
│ │ ├── MagicalRecord-Info.plist
│ │ ├── MagicalRecord-dummy.m
│ │ ├── MagicalRecord-prefix.pch
│ │ ├── MagicalRecord-umbrella.h
│ │ ├── MagicalRecord.modulemap
│ │ └── MagicalRecord.xcconfig
│ ├── Masonry
│ │ ├── Masonry-Info.plist
│ │ ├── Masonry-dummy.m
│ │ ├── Masonry-prefix.pch
│ │ ├── Masonry-umbrella.h
│ │ ├── Masonry.modulemap
│ │ └── Masonry.xcconfig
│ ├── Pods-EHenTaiViewer
│ │ ├── Info.plist
│ │ ├── Pods-EHenTaiViewer-Info.plist
│ │ ├── Pods-EHenTaiViewer-acknowledgements.markdown
│ │ ├── Pods-EHenTaiViewer-acknowledgements.plist
│ │ ├── Pods-EHenTaiViewer-dummy.m
│ │ ├── Pods-EHenTaiViewer-frameworks.sh
│ │ ├── Pods-EHenTaiViewer-resources.sh
│ │ ├── Pods-EHenTaiViewer-umbrella.h
│ │ ├── Pods-EHenTaiViewer.debug.xcconfig
│ │ ├── Pods-EHenTaiViewer.modulemap
│ │ └── Pods-EHenTaiViewer.release.xcconfig
│ ├── YYCache
│ │ ├── Info.plist
│ │ ├── YYCache-Info.plist
│ │ ├── YYCache-dummy.m
│ │ ├── YYCache-prefix.pch
│ │ ├── YYCache-umbrella.h
│ │ ├── YYCache.modulemap
│ │ └── YYCache.xcconfig
│ ├── YYImage
│ │ ├── Info.plist
│ │ ├── YYImage-Info.plist
│ │ ├── YYImage-dummy.m
│ │ ├── YYImage-prefix.pch
│ │ ├── YYImage-umbrella.h
│ │ ├── YYImage.modulemap
│ │ └── YYImage.xcconfig
│ └── YYWebImage
│ │ ├── Info.plist
│ │ ├── YYWebImage-Info.plist
│ │ ├── YYWebImage-dummy.m
│ │ ├── YYWebImage-prefix.pch
│ │ ├── YYWebImage-umbrella.h
│ │ ├── YYWebImage.modulemap
│ │ └── YYWebImage.xcconfig
├── YYCache
│ ├── LICENSE
│ ├── README.md
│ └── YYCache
│ │ ├── YYCache.h
│ │ ├── YYCache.m
│ │ ├── YYDiskCache.h
│ │ ├── YYDiskCache.m
│ │ ├── YYKVStorage.h
│ │ ├── YYKVStorage.m
│ │ ├── YYMemoryCache.h
│ │ └── YYMemoryCache.m
├── YYImage
│ ├── LICENSE
│ ├── README.md
│ └── YYImage
│ │ ├── YYAnimatedImageView.h
│ │ ├── YYAnimatedImageView.m
│ │ ├── YYFrameImage.h
│ │ ├── YYFrameImage.m
│ │ ├── YYImage.h
│ │ ├── YYImage.m
│ │ ├── YYImageCoder.h
│ │ ├── YYImageCoder.m
│ │ ├── YYSpriteSheetImage.h
│ │ └── YYSpriteSheetImage.m
└── YYWebImage
│ ├── LICENSE
│ ├── README.md
│ └── YYWebImage
│ ├── Categories
│ ├── CALayer+YYWebImage.h
│ ├── CALayer+YYWebImage.m
│ ├── MKAnnotationView+YYWebImage.h
│ ├── MKAnnotationView+YYWebImage.m
│ ├── UIButton+YYWebImage.h
│ ├── UIButton+YYWebImage.m
│ ├── UIImage+YYWebImage.h
│ ├── UIImage+YYWebImage.m
│ ├── UIImageView+YYWebImage.h
│ ├── UIImageView+YYWebImage.m
│ ├── _YYWebImageSetter.h
│ └── _YYWebImageSetter.m
│ ├── YYImageCache.h
│ ├── YYImageCache.m
│ ├── YYWebImage.h
│ ├── YYWebImageManager.h
│ ├── YYWebImageManager.m
│ ├── YYWebImageOperation.h
│ └── YYWebImageOperation.m
├── README.md
└── docs
└── issue_template.md
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | .DS_Store
3 | /xcuserdata/
4 | .xcscmblueprint
5 |
6 | # Xcode
7 | #
8 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
9 |
10 | ## Build generated
11 | build/
12 | DerivedData
13 |
14 | ## Various settings
15 | *.pbxuser
16 | !default.pbxuser
17 | *.mode1v3
18 | !default.mode1v3
19 | *.mode2v3
20 | !default.mode2v3
21 | *.perspectivev3
22 | !default.perspectivev3
23 | xcuserdata
24 |
25 | ## Other
26 | *.xccheckout
27 | *.moved-aside
28 | *.xcuserstate
29 | *.xcscmblueprint
30 | *.xcscheme
31 |
32 | ## Obj-C/Swift specific
33 | *.hmap
34 | *.ipa
--------------------------------------------------------------------------------
/EHenTaiViewer.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/EHenTaiViewer.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/EHenTaiViewer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/EHenTaiViewer/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/17.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 | // 一些参数设置
16 | @property (nonatomic, assign) UIInterfaceOrientationMask orientation; // 控制横竖屏
17 |
18 | @end
19 |
20 |
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/App Store-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/App Store-1024.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/CarPlay-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/CarPlay-60@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/CarPlay-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/CarPlay-60@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad App-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad App-76.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad App-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad App-76@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Notifications-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Notifications-20.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Notifications-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Notifications-20@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Pro App-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Pro App-83.5@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Settings-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Settings-29.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Settings-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Settings-29@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Spotlight-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Spotlight-40.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Spotlight-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPad Spotlight-40@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Notification-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Notification-20@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Notification-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Notification-20@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Settings-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Settings-29@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Settings-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Settings-29@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight-40@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/AppIcon.appiconset/iPhone Spotlight-40@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Bookmark/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Bookmark/bookmark_all.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "bookmark_all.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Bookmark/bookmark_all.imageset/bookmark_all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Bookmark/bookmark_all.imageset/bookmark_all.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Bookmark/bookmark_collect.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "universal",
13 | "filename" : "bookmark_collect.png",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Bookmark/bookmark_collect.imageset/bookmark_collect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Bookmark/bookmark_collect.imageset/bookmark_collect.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Info/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Info/ic_share.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "ic_share@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "ic_share@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Info/ic_share.imageset/ic_share@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Info/ic_share.imageset/ic_share@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Info/ic_share.imageset/ic_share@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Info/ic_share.imageset/ic_share@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Setting/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Setting/checkbox.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "checkbox@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "checkbox@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Setting/checkbox.imageset/checkbox@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Setting/checkbox.imageset/checkbox@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Setting/checkbox.imageset/checkbox@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Setting/checkbox.imageset/checkbox@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Setting/checkbox_unchecked.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "checkbox_unchecked@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "checkbox_unchecked@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Setting/checkbox_unchecked.imageset/checkbox_unchecked@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Setting/checkbox_unchecked.imageset/checkbox_unchecked@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Setting/checkbox_unchecked.imageset/checkbox_unchecked@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Setting/checkbox_unchecked.imageset/checkbox_unchecked@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Star/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Star/star_gray.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "b27_icon_star_gray@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Star/star_gray.imageset/b27_icon_star_gray@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Star/star_gray.imageset/b27_icon_star_gray@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Star/star_yellow.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "b27_icon_star_yellow@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/Star/star_yellow.imageset/b27_icon_star_yellow@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/Star/star_yellow.imageset/b27_icon_star_yellow@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "ic_favorite@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "ic_favorite@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite.imageset/ic_favorite@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite.imageset/ic_favorite@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite.imageset/ic_favorite@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite.imageset/ic_favorite@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite_border.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "ic_favorite_border@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "ic_favorite_border@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite_border.imageset/ic_favorite_border@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite_border.imageset/ic_favorite_border@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite_border.imageset/ic_favorite_border@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_favorite_border.imageset/ic_favorite_border@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_format_list_bulleted.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "ic_format_list_bulleted@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "ic_format_list_bulleted@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_format_list_bulleted.imageset/ic_format_list_bulleted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_format_list_bulleted.imageset/ic_format_list_bulleted@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_format_list_bulleted.imageset/ic_format_list_bulleted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_format_list_bulleted.imageset/ic_format_list_bulleted@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_notifications.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "ic_notifications@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "ic_notifications@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_notifications.imageset/ic_notifications@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_notifications.imageset/ic_notifications@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_notifications.imageset/ic_notifications@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_notifications.imageset/ic_notifications@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_settings.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "ic_settings@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "ic_settings@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_settings.imageset/ic_settings@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_settings.imageset/ic_settings@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_settings.imageset/ic_settings@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_settings.imageset/ic_settings@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_whatshot.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "ic_whatshot@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "ic_whatshot@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_whatshot.imageset/ic_whatshot@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_whatshot.imageset/ic_whatshot@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/TabBar/ic_whatshot.imageset/ic_whatshot@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/TabBar/ic_whatshot.imageset/ic_whatshot@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/arrow_right.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "arrow_right.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/arrow_right.imageset/arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/arrow_right.imageset/arrow_right.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/home_logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "home_logo.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/home_logo.imageset/home_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/home_logo.imageset/home_logo.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/mutSelect.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "mutSelect.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "mutSelect@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "mutSelect@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/mutSelect.imageset/mutSelect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/mutSelect.imageset/mutSelect.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/mutSelect.imageset/mutSelect@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/mutSelect.imageset/mutSelect@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/mutSelect.imageset/mutSelect@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/mutSelect.imageset/mutSelect@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/sift.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "sift.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/sift.imageset/sift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/sift.imageset/sift.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/thumb.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "thumb.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/thumb.imageset/thumb.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/thumb.imageset/thumb.jpg
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/toplist.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "toplist.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "toplist@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "toplist@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/toplist.imageset/toplist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/toplist.imageset/toplist.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/toplist.imageset/toplist@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/toplist.imageset/toplist@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/toplist.imageset/toplist@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/toplist.imageset/toplist@3x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/touchid.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "touchid.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/touchid.imageset/touchid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/touchid.imageset/touchid.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/unlike.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "collect@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/EHenTaiViewer/Assets.xcassets/unlike.imageset/collect@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/Assets.xcassets/unlike.imageset/collect@2x.png
--------------------------------------------------------------------------------
/EHenTaiViewer/Gallery+CoreDataClass.h:
--------------------------------------------------------------------------------
1 | //
2 | // Gallery+CoreDataClass.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/13.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 | //
9 |
10 | #import
11 | #import
12 |
13 | @class GalleryPage;
14 |
15 | NS_ASSUME_NONNULL_BEGIN
16 |
17 | @interface Gallery : NSManagedObject
18 |
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
23 | #import "Gallery+CoreDataProperties.h"
24 |
--------------------------------------------------------------------------------
/EHenTaiViewer/Gallery+CoreDataClass.m:
--------------------------------------------------------------------------------
1 | //
2 | // Gallery+CoreDataClass.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/13.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 | //
9 |
10 | #import "Gallery+CoreDataClass.h"
11 |
12 | @implementation Gallery
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/EHenTaiViewer/Gallery+CoreDataProperties.h:
--------------------------------------------------------------------------------
1 | //
2 | // Gallery+CoreDataProperties.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/13.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 | //
9 |
10 | #import "Gallery+CoreDataClass.h"
11 |
12 |
13 | NS_ASSUME_NONNULL_BEGIN
14 |
15 | @interface Gallery (CoreDataProperties)
16 |
17 | + (NSFetchRequest *)fetchRequest;
18 |
19 | @property (nullable, nonatomic, copy) NSString *galleryid;
20 | @property (nullable, nonatomic, retain) NSSet *galleryPage;
21 |
22 | @end
23 |
24 | @interface Gallery (CoreDataGeneratedAccessors)
25 |
26 | - (void)addGalleryPageObject:(GalleryPage *)value;
27 | - (void)removeGalleryPageObject:(GalleryPage *)value;
28 | - (void)addGalleryPage:(NSSet *)values;
29 | - (void)removeGalleryPage:(NSSet *)values;
30 |
31 | @end
32 |
33 | NS_ASSUME_NONNULL_END
34 |
--------------------------------------------------------------------------------
/EHenTaiViewer/Gallery+CoreDataProperties.m:
--------------------------------------------------------------------------------
1 | //
2 | // Gallery+CoreDataProperties.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/13.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 | //
9 |
10 | #import "Gallery+CoreDataProperties.h"
11 |
12 | @implementation Gallery (CoreDataProperties)
13 |
14 | + (NSFetchRequest *)fetchRequest {
15 | return [NSFetchRequest fetchRequestWithEntityName:@"Gallery"];
16 | }
17 |
18 | @dynamic galleryid;
19 | @dynamic galleryPage;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/GalleryPage+CoreDataClass.h:
--------------------------------------------------------------------------------
1 | //
2 | // GalleryPage+CoreDataClass.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/13.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 | //
9 |
10 | #import
11 | #import
12 |
13 | @class Gallery;
14 |
15 | NS_ASSUME_NONNULL_BEGIN
16 |
17 | @interface GalleryPage : NSManagedObject
18 |
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
23 | #import "GalleryPage+CoreDataProperties.h"
24 |
--------------------------------------------------------------------------------
/EHenTaiViewer/GalleryPage+CoreDataClass.m:
--------------------------------------------------------------------------------
1 | //
2 | // GalleryPage+CoreDataClass.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/13.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 | //
9 |
10 | #import "GalleryPage+CoreDataClass.h"
11 |
12 | @implementation GalleryPage
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/EHenTaiViewer/GalleryPage+CoreDataProperties.h:
--------------------------------------------------------------------------------
1 | //
2 | // GalleryPage+CoreDataProperties.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/13.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 | //
9 |
10 | #import "GalleryPage+CoreDataClass.h"
11 |
12 |
13 | NS_ASSUME_NONNULL_BEGIN
14 |
15 | @interface GalleryPage (CoreDataProperties)
16 |
17 | + (NSFetchRequest *)fetchRequest;
18 |
19 | @property (nonatomic) int64_t page;
20 | @property (nullable, nonatomic, copy) NSString *smallImageUrl;
21 | @property (nullable, nonatomic, retain) Gallery *gallery;
22 |
23 | @end
24 |
25 | NS_ASSUME_NONNULL_END
26 |
--------------------------------------------------------------------------------
/EHenTaiViewer/GalleryPage+CoreDataProperties.m:
--------------------------------------------------------------------------------
1 | //
2 | // GalleryPage+CoreDataProperties.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/13.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 | //
9 |
10 | #import "GalleryPage+CoreDataProperties.h"
11 |
12 | @implementation GalleryPage (CoreDataProperties)
13 |
14 | + (NSFetchRequest *)fetchRequest {
15 | return [NSFetchRequest fetchRequestWithEntityName:@"GalleryPage"];
16 | }
17 |
18 | @dynamic page;
19 | @dynamic smallImageUrl;
20 | @dynamic gallery;
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/EHenTaiViewer/NJKWebViewProgress.h:
--------------------------------------------------------------------------------
1 | //
2 | // NJKWebViewProgress.h
3 | //
4 | // Created by Satoshi Aasano on 4/20/13.
5 | // Copyright (c) 2013 Satoshi Asano. All rights reserved.
6 | //
7 |
8 | #import
9 | #import
10 |
11 | #undef njk_weak
12 | #if __has_feature(objc_arc_weak)
13 | #define njk_weak weak
14 | #else
15 | #define njk_weak unsafe_unretained
16 | #endif
17 |
18 | extern const float NJKInitialProgressValue;
19 | extern const float NJKInteractiveProgressValue;
20 | extern const float NJKFinalProgressValue;
21 |
22 | typedef void (^NJKWebViewProgressBlock)(float progress);
23 | @protocol NJKWebViewProgressDelegate;
24 | @interface NJKWebViewProgress : NSObject
25 | @property (nonatomic, njk_weak) idprogressDelegate;
26 | @property (nonatomic, njk_weak) idwebViewProxyDelegate;
27 | @property (nonatomic, copy) NJKWebViewProgressBlock progressBlock;
28 | @property (nonatomic, readonly) float progress; // 0.0..1.0
29 |
30 | - (void)reset;
31 | @end
32 |
33 | @protocol NJKWebViewProgressDelegate
34 | - (void)webViewProgress:(NJKWebViewProgress *)webViewProgress updateProgress:(float)progress;
35 | @end
36 |
37 |
--------------------------------------------------------------------------------
/EHenTaiViewer/NJKWebViewProgressView.h:
--------------------------------------------------------------------------------
1 | //
2 | // NJKWebViewProgressView.h
3 | // iOS 7 Style WebView Progress Bar
4 | //
5 | // Created by Satoshi Aasano on 11/16/13.
6 | // Copyright (c) 2013 Satoshi Asano. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NJKWebViewProgressView : UIView
12 | @property (nonatomic) float progress;
13 |
14 | @property (nonatomic) UIView *progressBarView;
15 | @property (nonatomic) NSTimeInterval barAnimationDuration; // default 0.1
16 | @property (nonatomic) NSTimeInterval fadeAnimationDuration; // default 0.27
17 | @property (nonatomic) NSTimeInterval fadeOutDelay; // default 0.1
18 |
19 | - (void)setProgress:(float)progress animated:(BOOL)animated;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/NSString+StringHeight.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+StringHeight.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/26.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NSString (StringHeight)
12 |
13 | //获取高度
14 | - (CGFloat)StringHeightWithFontSize:(UIFont *)font maxWidth:(CGFloat)maxWidth;
15 | //获取宽度
16 | - (CGFloat)StringWidthWithFontSize:(UIFont *)font;
17 | //编码
18 | - (NSString *)urlEncode;
19 | //截取字符串,去除[]()【】等内容
20 | - (NSString *)handleString;
21 | //去除html标签
22 | - (NSString *)removeHtmlString;
23 | // 文本md5
24 | - (NSString *)MD5;
25 | // 根据字符串数组获取一个标签的富文本
26 | + (NSAttributedString *)convertStringsWithArray:(NSArray *)array;
27 | // 将html转义字符转为iOS可显示
28 | - (NSString *)digitalHTMLToUnicode;
29 | // 根据正则表示式传回适配的字符串
30 | - (NSString *)matchFristObjWithRegex:(NSString *)regex;
31 | - (NSArray *)matchWithRegex:(NSString *)regex;
32 | // 获取中文标签,如果有的话
33 | - (NSString *)getCHTagName;
34 |
35 | @end
36 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJAddMytagsSearchController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJAddMytagsSearchController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/26.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface QJAddMytagsSearchController : QJViewController
14 |
15 | @property (strong, nonatomic) NSString *apikey;
16 | @property (strong, nonatomic) NSString *apiuid;
17 |
18 | @end
19 |
20 | NS_ASSUME_NONNULL_END
21 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJAllCommentController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJAllCommentController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/24.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJAllCommentController : QJViewController
12 |
13 | @property (nonatomic, strong) NSArray *allComments;
14 | @property (nonatomic, assign) NSInteger index;
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJBigImageItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJBigImageItem.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/3.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef void (^SuccessHandler)(NSString *url);
12 |
13 | @interface QJBigImageItem : NSObject
14 |
15 | @property (nonatomic, assign) NSInteger page;
16 | @property (nonatomic, strong) NSString *realImageUrl;
17 | @property (nonatomic, strong) NSString *x;
18 | @property (nonatomic, strong) NSString *y;
19 |
20 | - (void)getReallyImageUrl:(SuccessHandler)successHandler;
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJBigImageItem.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJBigImageItem.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/3.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJBigImageItem.h"
10 |
11 | @interface QJBigImageItem ()
12 |
13 | @property (nonatomic, strong) SuccessHandler block;
14 |
15 | @end
16 |
17 | @implementation QJBigImageItem
18 |
19 | - (void)getReallyImageUrl:(SuccessHandler)successHandler {
20 | if (self.realImageUrl) {
21 | successHandler(self.realImageUrl);
22 | }
23 | self.block = successHandler;
24 | }
25 |
26 | #pragma mark -setter
27 | - (void)setRealImageUrl:(NSString *)realImageUrl {
28 | _realImageUrl = realImageUrl;
29 | if (self.block) {
30 | self.block(_realImageUrl);
31 | }
32 | }
33 |
34 | @end
35 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJBrowerCollectManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJBrowerCollectManager.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/13.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 |
9 | // 管理书签相关
10 |
11 | #import
12 |
13 | @class GalleryPage;
14 |
15 | @interface QJBrowerCollectManager : NSObject
16 |
17 | /** 获取全部书签
18 | @param gid 画廊的唯一标识符
19 | */
20 | + (NSArray *)getAllCollectPagesWithGid:(NSString *)gid;
21 |
22 | /** 添加一个书签
23 | @param gid 画廊的唯一标识符
24 | @param pageIndex 书签信息,页码
25 | @param smallImageUrl 书签信息,缩略图url
26 | */
27 | + (void)saveOnePageWithGid:(NSString *)gid pageIndex:(NSInteger)pageIndex smallImageUrl:(NSString *)smallImageUrl;
28 |
29 | /** 删除一个书签
30 | @param gid 画廊的唯一标识符
31 | @param pageIndex 书签信息,页码
32 | @param smallImageUrl 书签信息,缩略图url
33 | */
34 | + (void)deleteOnePageWithGid:(NSString *)gid pageIndex:(NSInteger)pageIndex smallImageUrl:(NSString *)smallImageUrl;
35 |
36 | @end
37 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJBrowerSettingPopView.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJBrowerSettingPopView.h
3 | // EHenTaiViewer
4 | //
5 | // Created by kayanouriko on 2018/6/27.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol QJBrowerSettingPopViewDelegate
12 |
13 | /** 返回当前屏幕方向设置
14 | @return 0.竖屏 1.横屏 2.跟随系统
15 | */
16 | - (NSInteger)currentOrientationSegSelectedIndex;
17 |
18 | /** 返回当前滚动方向设置
19 | @return 0.水平滚动 1.上下滚动
20 | */
21 | - (NSInteger)currentDirectionSegSelectedIndex;
22 |
23 | /** 返回当前系统亮度
24 | @return brightness 系统亮度
25 | */
26 | - (CGFloat)currentBrightness;
27 |
28 | @optional
29 | /** 旋转方式响应事件
30 | @param selectedIndex 选中的Seg下标
31 | */
32 | - (void)orientationSegDidClickBtnWithSelectedIndex:(NSInteger)selectedIndex;
33 |
34 | /** 滚动方向响应事件
35 | @param selectedIndex 选中的Seg下标
36 | */
37 | - (void)directionSegDidClickBtnWithSelectedIndex:(NSInteger)selectedIndex;
38 |
39 | /** 亮度调节响应事件
40 | @param value 改变的亮度值
41 | */
42 | - (void)brightnessSliderDidChangeValue:(CGFloat)value;
43 |
44 | @end
45 |
46 | @interface QJBrowerSettingPopView : UIView
47 |
48 | @property (nonatomic, weak) id delegate;
49 | @property (nonatomic, assign, getter=isShowed) BOOL showed;
50 |
51 | + (instancetype)new NS_UNAVAILABLE;
52 | - (instancetype)init NS_UNAVAILABLE;
53 | + (QJBrowerSettingPopView *)initWithDelegate:(id)theDelegate;
54 |
55 | /** 呈现弹出框 */
56 | - (void)show;
57 | /** 刷新布局,这里采用了比较笨的方法,直接重新布局 */
58 | - (void)changeFrameIfNeed;
59 |
60 | @end
61 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJBrowserBookMarkPopView.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJBrowserBookMarkPopView.h
3 | // AnimatedTransitioningDemo
4 | //
5 | // Created by zedmacbook on 2018/7/24.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJMangaManager;
12 |
13 | @protocol QJBrowserBookMarkPopViewDelegate
14 |
15 | @optional
16 | - (void)didSelectImageWithIndex:(NSInteger)index;
17 |
18 | @end
19 |
20 | @interface QJBrowserBookMarkPopView : UIView
21 |
22 | @property (nonatomic, weak) id delegate;
23 | @property (nonatomic, assign, getter=isShowed) BOOL showed;
24 |
25 | + (QJBrowserBookMarkPopView *)creatPopViewWithDelegate:(id)theDelagate manager:(QJMangaManager *)manager gid:(NSString *)gid;
26 |
27 | - (void)showWithIndexPath:(NSIndexPath *)indexPath;
28 | - (void)changeFrameIfNeedWithIndexPath:(NSIndexPath *)indexPath;
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJBrowserBookMarkPopViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJBrowserBookMarkPopViewCell.h
3 | // AnimatedTransitioningDemo
4 | //
5 | // Created by zedmacbook on 2018/7/24.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJMangaImageModel, GalleryPage;
12 |
13 | @interface QJBrowserBookMarkPopViewCell : UICollectionViewCell
14 |
15 | @property (nonatomic, strong) QJMangaImageModel *model;
16 | @property (nonatomic, strong) GalleryPage *galleryPage;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJBrowserBookMarkPopViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJBrowserBookMarkPopViewCell.m
3 | // AnimatedTransitioningDemo
4 | //
5 | // Created by zedmacbook on 2018/7/24.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJBrowserBookMarkPopViewCell.h"
10 | #import "QJMangaImageModel.h"
11 | #import "GalleryPage+CoreDataClass.h"
12 |
13 | @interface QJBrowserBookMarkPopViewCell()
14 |
15 | @property (weak, nonatomic) IBOutlet UIImageView *thumbImageView;
16 | @property (weak, nonatomic) IBOutlet UILabel *pageLabel;
17 |
18 | @end
19 |
20 | @implementation QJBrowserBookMarkPopViewCell
21 |
22 | - (void)awakeFromNib {
23 | [super awakeFromNib];
24 | self.layer.cornerRadius = 5.f;
25 | self.layer.borderWidth = 0.5f;
26 | self.layer.borderColor = [UIColor groupTableViewBackgroundColor].CGColor;
27 | self.layer.masksToBounds = YES;
28 | }
29 |
30 | #pragma mark - Setter
31 | - (void)setModel:(QJMangaImageModel *)model {
32 | _model = model;
33 | self.pageLabel.text = [NSString stringWithFormat:@"%ld", (long)model.page];
34 | self.thumbImageView.image = nil;
35 | [model getSmallUrlWithBlock:^{
36 | [self.thumbImageView yy_setImageWithURL:[NSURL URLWithString:model.smallImageUrl] options:YYWebImageOptionProgressiveBlur | YYWebImageOptionSetImageWithFadeAnimation | YYWebImageOptionHandleCookies];
37 | }];
38 | }
39 |
40 | - (void)setGalleryPage:(GalleryPage *)galleryPage {
41 | _galleryPage = galleryPage;
42 | self.pageLabel.text = [NSString stringWithFormat:@"%ld", (long)galleryPage.page + 1];
43 | [self.thumbImageView yy_setImageWithURL:[NSURL URLWithString:galleryPage.smallImageUrl] options:YYWebImageOptionProgressiveBlur | YYWebImageOptionSetImageWithFadeAnimation | YYWebImageOptionHandleCookies];
44 | }
45 |
46 | @end
47 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJButton.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJButton.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/9.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | IB_DESIGNABLE
12 |
13 | @interface QJButton : UIButton
14 |
15 | //本身具备一个存储值
16 | @property (nonatomic, strong) IBInspectable NSString *value;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJButton.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJButton.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/9.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJButton.h"
10 |
11 | @implementation QJButton
12 |
13 | /*
14 | // Only override drawRect: if you perform custom drawing.
15 | // An empty implementation adversely affects performance during animation.
16 | - (void)drawRect:(CGRect)rect {
17 | // Drawing code
18 | }
19 | */
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJCollectionViewFlowLayout.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJCollectionViewFlowLayout.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/15.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJCollectionViewFlowLayout : UICollectionViewFlowLayout
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJColorPickBoard.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJColorPickBoard.h
3 | // QJColorPicker
4 | //
5 | // Created by QinJ on 2019/4/28.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "QJColorPickProtocol.h"
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface QJColorPickBoard : UIView
15 |
16 | @property (weak, nonatomic) iddelegate;
17 | @property (strong, nonatomic) UIColor *currentColor;
18 |
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJColorPickProtocol.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJColorPickProtocol.h
3 | // QJColorPicker
4 | //
5 | // Created by QinJ on 2019/4/28.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJColorPickBoard, QJColorPickSlider;
12 |
13 | @protocol QJColorPickBoardDelegate
14 |
15 | @optional
16 | - (void)colorPickBoard:(QJColorPickBoard *)colorPickBoard didChangeColor:(UIColor *)color;
17 |
18 | @end
19 |
20 | @protocol QJColorPickSliderDelegate
21 |
22 | @optional
23 | - (void)colorPickSlider:(QJColorPickSlider *)colorPickSlider didChangeColor:(UIColor *)color;
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJColorPickShowView.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJColorPickShowView.h
3 | // QJColorPicker
4 | //
5 | // Created by QinJ on 2019/4/28.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface QJColorPickShowView : UIView
14 |
15 | @property (strong, nonatomic) UIColor *showColor;
16 | @property (strong, nonatomic) NSString *hexColor;
17 |
18 | @end
19 |
20 | NS_ASSUME_NONNULL_END
21 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJColorPickSlider.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJColorPickSlider.h
3 | // QJColorPicker
4 | //
5 | // Created by QinJ on 2019/4/28.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "QJColorPickProtocol.h"
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface QJColorPickSlider : UIView
15 |
16 | @property (weak, nonatomic) iddelegate;
17 | @property (strong, nonatomic) UIColor *showColor; // 从board获取的颜色
18 | @property (strong, nonatomic) UIColor *currentColor; // 修改后的颜色
19 |
20 | @end
21 |
22 | NS_ASSUME_NONNULL_END
23 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJColorPickUtils.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJColorPickUtils.h
3 | // QJColorPicker
4 | //
5 | // Created by QinJ on 2019/4/28.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface QJColorPickUtils : NSObject
14 |
15 | // UIColor --> Hex
16 | + (NSString *)hexStringWithColor:(UIColor *)color hasAlpha:(BOOL)hasAlpha;
17 | // change alpha
18 | + (UIColor *)changeColorAlpha:(UIColor *)color alpha:(CGFloat)alpha;
19 | // Point --> UIColor
20 | + (UIColor *)getColorWithPoint:(CGPoint)point layer:(CALayer *)layer;
21 |
22 | @end
23 |
24 | NS_ASSUME_NONNULL_END
25 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJColorPickUtils.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJColorPickUtils.m
3 | // QJColorPicker
4 | //
5 | // Created by QinJ on 2019/4/28.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJColorPickUtils.h"
10 |
11 | @implementation QJColorPickUtils
12 |
13 | + (NSString *)hexStringWithColor:(UIColor *)color hasAlpha:(BOOL)hasAlpha {
14 | CGFloat r, g, b, a;
15 | [color getRed:&r green:&g blue:&b alpha:&a];
16 | int rgb = (int)(r * 255.0f)<<16 | (int)(g * 255.0f)<<8 | (int)(b * 255.0f)<<0;
17 | if (hasAlpha) {
18 | rgb = (int)(a * 255.0f)<<24 | (int)(r * 255.0f)<<16 | (int)(g * 255.0f)<<8 | (int)(b * 255.0f)<<0;
19 | }
20 | return [[NSString stringWithFormat:@"%06x", rgb] uppercaseString];
21 | }
22 |
23 | + (UIColor *)changeColorAlpha:(UIColor *)color alpha:(CGFloat)alpha {
24 | const CGFloat *component = CGColorGetComponents(color.CGColor);
25 | return [UIColor colorWithRed:component[0] green:component[1] blue:component[2] alpha:alpha];
26 | }
27 |
28 | + (UIColor *)getColorWithPoint:(CGPoint)point layer:(CALayer *)layer {
29 | unsigned char pixel[4] = {0};
30 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
31 | CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);
32 | CGContextTranslateCTM(context, -point.x, -point.y);
33 | [layer renderInContext:context];
34 | CGContextRelease(context);
35 | CGColorSpaceRelease(colorSpace);
36 | return [UIColor colorWithRed:pixel[0] / 255.f green:pixel[1] / 255.f blue:pixel[2] / 255.f alpha:pixel[3] / 255.f];
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJCommentCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJCommentCell.h
3 | // ExReadViewer
4 | //
5 | // Created by 覃江 on 2016/12/31.
6 | // Copyright © 2016年 茅野瓜子. All rights reserved.
7 | //
8 |
9 | #import "QJTableViewCell.h"
10 |
11 | @class QJCommentCell;
12 |
13 | @protocol QJCommentCellDelegate
14 |
15 | @optional
16 | // 点击了用户的名字
17 | - (void)commentCell:(QJCommentCell *)cell didClickUserImageWithUserName:(NSString *)userName;
18 | // 点击了评论内容的url
19 | - (void)commentCell:(QJCommentCell *)cell didClickContentUrlWithURL:(NSURL *)URL;
20 |
21 | @end
22 |
23 | @interface QJCommentCell : QJTableViewCell
24 |
25 | @property (weak, nonatomic) iddelegate;
26 |
27 | - (void)refreshUI:(NSDictionary *)dict;
28 |
29 | @end
30 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJContentSplitViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJContentSplitViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/5/6.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | // 第二个SplitViewController,控制着列表和画廊内容
10 |
11 | #import
12 |
13 | NS_ASSUME_NONNULL_BEGIN
14 |
15 | @interface QJContentSplitViewController : UISplitViewController
16 |
17 | @property(nonatomic, assign) CGFloat maximumPrimaryColumnWidth NS_AVAILABLE_IOS(8_0);
18 |
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJContentSplitViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJContentSplitViewController.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/5/6.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJContentSplitViewController.h"
10 |
11 | @interface QJContentSplitViewController ()
12 |
13 | @end
14 |
15 | @implementation QJContentSplitViewController
16 |
17 | @dynamic maximumPrimaryColumnWidth;
18 |
19 | - (void)viewDidLoad {
20 | [super viewDidLoad];
21 | self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
22 | self.preferredPrimaryColumnWidthFraction = 1.f;
23 | self.maximumPrimaryColumnWidth = self.view.bounds.size.width;
24 | }
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJCustomTabbarSettingController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJCustomTabbarSettingController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/7/23.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJCustomTabbarSettingController : QJViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJFavoritesSelectCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJFavoritesSelectCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/12.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJFavoritesSelectCell : UITableViewCell
12 |
13 | @property (weak, nonatomic) IBOutlet UIView *colorView;
14 | @property (weak, nonatomic) IBOutlet UILabel *titleNameLabel;
15 | @property (weak, nonatomic) IBOutlet UILabel *countLabel;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJFavoritesSelectCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJFavoritesSelectCell.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/12.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJFavoritesSelectCell.h"
10 |
11 | @implementation QJFavoritesSelectCell
12 |
13 | - (void)awakeFromNib {
14 | [super awakeFromNib];
15 | // Initialization code
16 | }
17 |
18 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
19 | [super setSelected:selected animated:animated];
20 |
21 | // Configure the view for the selected state
22 | }
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJFavoritesSelectController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJFavoritesSelectController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/12.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @protocol QJFavoritesSelectControllerDelegate
12 |
13 | @optional
14 | - (void)didSelectFavFolderNameWithArr:(NSArray *)array index:(NSInteger)index;
15 |
16 | @end
17 |
18 | @interface QJFavoritesSelectController : QJViewController
19 |
20 | @property (weak, nonatomic) iddelegate;
21 | //判断是不是从收藏界面来的
22 | //如果是收藏界面来的,则显示'全部收藏'这个选项,否则是隐藏该选项
23 | @property (nonatomic, assign, getter=isLikeVCJump) BOOL likeVCJump;
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJFavouriteViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJFavouriteViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/16.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @protocol QJFavouriteViewControllerDelagate
12 |
13 | @optional
14 | - (void)didSelectFolder:(NSInteger)index content:(NSString *)content;
15 |
16 | @end
17 |
18 | @interface QJFavouriteViewController : QJViewController
19 |
20 | @property (weak, nonatomic) iddelegate;
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJGalleryItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJGalleryItem.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class TFHpple;
12 |
13 | @interface QJGalleryTagItem : NSObject
14 |
15 | @property (nonatomic, strong) NSString *name;
16 | @property (nonatomic, strong) NSString *cname;//汉化标签
17 | @property (nonatomic, strong) NSString *searchKey;//用于在搜索页面显示
18 | @property (nonatomic, strong) NSString *url;
19 | //日语的位置
20 | @property (nonatomic, assign) CGFloat buttonWidth;
21 | @property (nonatomic, assign) CGFloat buttonX;
22 | @property (nonatomic, assign) CGFloat buttonY;
23 | //中文的位置
24 | @property (nonatomic, assign) CGFloat buttonWidthCN;
25 | @property (nonatomic, assign) CGFloat buttonXCN;
26 | @property (nonatomic, assign) CGFloat buttonYCN;
27 |
28 | @end
29 |
30 | @interface QJGalleryItem : NSObject
31 |
32 | @property (nonatomic, strong) NSDictionary *baseInfoDic;//基础信息
33 | @property (nonatomic, strong) NSArray *smallImages;//缩略图合集
34 | @property (nonatomic, strong) NSArray *imageUrls;//图片的url
35 | @property (nonatomic, strong) NSArray *comments;//评论
36 | @property (nonatomic, strong) NSArray *tagArr;//tag
37 | @property (nonatomic, assign) BOOL isFavorite;//是否收藏
38 | @property (nonatomic, assign) CGFloat customSore;//用户评分
39 | @property (nonatomic, strong) NSString *testUrl;//获取showkey的链接
40 | @property (nonatomic, strong) NSString *showkey;//24小时变换的token
41 | @property (nonatomic, strong) NSString *apiuid;
42 | @property (nonatomic, strong) NSString *apikey;
43 |
44 | - (instancetype)initWithHpple:(TFHpple *)xpathParser;
45 |
46 | @end
47 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJGoCommentController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJGoCommentController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/1.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJGoCommentController : QJViewController
12 |
13 | @property (nonatomic, strong) NSString *url;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJHeadFreshingView.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJHeadFreshingView.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/12.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJHeadFreshingView;
12 |
13 | @protocol QJHeadFreshingViewDelagate
14 |
15 | - (void)didBeginReFreshingWithFreshingView:(QJHeadFreshingView *)headFreshingView;
16 |
17 | @end
18 |
19 | @interface QJHeadFreshingView : UIView
20 |
21 | @property (weak, nonatomic) iddelegate;
22 |
23 | @property (nonatomic, assign, getter=isReFreshing) BOOL refreshing;
24 |
25 | - (void)beginReFreshing;
26 | - (void)endRefreshing;
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJHomeViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJHomeViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/18.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJHomeViewController : QJViewController
12 |
13 | @property (nonatomic, strong) NSString *navTitle;
14 | @property (nonatomic, strong) NSString *url;
15 |
16 | - (void)scrollToTop;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJHotAndLikeViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJHotAndLikeViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/17.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJHotAndLikeViewController : QJViewController
12 |
13 | - (void)scrollToTop;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJImageCollectionViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJImageCollectionViewCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJImageCollectionViewCell : UICollectionViewCell
12 |
13 | @property (weak, nonatomic) IBOutlet UIImageView *thumbImageView;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJImageCollectionViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJImageCollectionViewCell.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJImageCollectionViewCell.h"
10 |
11 | @implementation QJImageCollectionViewCell
12 |
13 | - (void)awakeFromNib {
14 | [super awakeFromNib];
15 | self.thumbImageView.layer.cornerRadius = 5.f;
16 | self.thumbImageView.layer.borderWidth = 0.5f;
17 | self.thumbImageView.layer.borderColor = [UIColor groupTableViewBackgroundColor].CGColor;
18 | self.thumbImageView.layer.masksToBounds = YES;
19 | }
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLabel.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJLabel.h
3 | // EHenTaiViewer
4 | //
5 | // Created by zedmacbook on 2018/6/28.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | IB_DESIGNABLE
12 | @interface QJLabel : UILabel
13 |
14 | /** 设置内边距自适应高度 */
15 | @property (nonatomic, assign, getter=isCusRadiusInsets) IBInspectable BOOL cusRadiusInsets;
16 |
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLabel.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJLabel.m
3 | // EHenTaiViewer
4 | //
5 | // Created by zedmacbook on 2018/6/28.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJLabel.h"
10 |
11 | @interface QJLabel()
12 |
13 | @property (nonatomic, assign) UIEdgeInsets edgeInsets;
14 |
15 | @end
16 |
17 | @implementation QJLabel
18 |
19 | - (void)setCusRadiusInsets:(BOOL)cusRadiusInsets {
20 | _cusRadiusInsets = cusRadiusInsets;
21 |
22 | self.edgeInsets = UIEdgeInsetsMake(2, 8 + 2, 2, 8 + 2);
23 | [self sizeToFit];
24 |
25 | // CGRect rect = self.frame;
26 | self.layer.cornerRadius = 5.f;
27 | self.layer.masksToBounds = YES;
28 | }
29 |
30 | - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
31 | UIEdgeInsets insets = self.edgeInsets;
32 | CGRect rect = [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, insets) limitedToNumberOfLines:numberOfLines];
33 | rect.origin.x -= insets.left;
34 | rect.origin.y -= insets.top;
35 | rect.size.width += (insets.left + insets.right);
36 | rect.size.height += (insets.top + insets.bottom);
37 | return rect;
38 | }
39 |
40 | - (void)drawRect:(CGRect)rect {
41 | [super drawRect:UIEdgeInsetsInsetRect(rect, self.edgeInsets)];
42 | }
43 |
44 |
45 | @end
46 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLanguageOutCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJLanguageOutCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJSettingLanguageItem;
12 |
13 | @protocol QJLanguageOutCellDelagate
14 |
15 | @optional
16 | - (void)didClickBtn;
17 |
18 | @end
19 |
20 | @interface QJLanguageOutCell : UITableViewCell
21 |
22 | @property (weak, nonatomic) iddelegate;
23 | @property (nonatomic, strong) QJSettingLanguageItem *model;
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLanguageOutHeadView.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJLanguageOutHeadView.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJLanguageOutHeadView : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLanguageOutHeadView.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJLanguageOutHeadView.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJLanguageOutHeadView.h"
10 |
11 | @implementation QJLanguageOutHeadView
12 |
13 | - (void)awakeFromNib {
14 | [super awakeFromNib];
15 | // Initialization code
16 | }
17 |
18 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
19 | [super setSelected:selected animated:animated];
20 |
21 | // Configure the view for the selected state
22 | }
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLanguageOutViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJLanguageOutViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @class QJSettingItem;
12 |
13 | @interface QJLanguageOutViewController : QJViewController
14 |
15 | @property (nonatomic, strong) QJSettingItem *model;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLikeButton.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJLikeButton.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/1.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef NS_ENUM(NSInteger, QJLikeButtonState) {
12 | QJLikeButtonStateUnLike,
13 | QJLikeButtonStateLike,
14 | QJLikeButtonStateLoading,
15 | };
16 |
17 | @interface QJLikeButton : UIButton
18 |
19 | @property (nonatomic, assign) QJLikeButtonState likeState;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLikeSearchBar.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJLikeSearchBar.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/15.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJLikeSearchBar : UIView
12 |
13 | @property (weak, nonatomic) IBOutlet UITextField *searchTextF;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLikeSearchBar.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJLikeSearchBar.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/15.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJLikeSearchBar.h"
10 |
11 | @interface QJLikeSearchBar ()
12 |
13 | @property (weak, nonatomic) IBOutlet UIView *searchBgView;
14 |
15 | @end
16 |
17 | @implementation QJLikeSearchBar
18 |
19 | - (void)awakeFromNib {
20 | [super awakeFromNib];
21 | self.searchBgView.layer.cornerRadius = 18.f;
22 | }
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJListCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJListCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/19.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJListItem;
12 |
13 | @interface QJListCell : UITableViewCell
14 |
15 | - (void)refreshUI:(QJListItem *)item;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJListItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJListItem.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/19.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface QJListItem : NSObject
13 |
14 | @property (nonatomic, strong) NSString *url;//链接
15 | @property (nonatomic, strong) NSString *thumb;//封面
16 | @property (nonatomic, strong) NSString *title;//标题
17 | @property (nonatomic, strong) NSString *title_jpn;//日语标题
18 | @property (nonatomic, strong) NSString *similarKey;//类似画廊关键字
19 | @property (nonatomic, strong) NSString *category;//分类
20 | @property (nonatomic, strong) UIColor *categoryColor;//分类颜色
21 | @property (nonatomic, strong) NSString *language;//语言
22 | @property (nonatomic, strong) NSString *uploader;//上传人
23 | @property (nonatomic, assign) NSInteger filecount;//文件数
24 | @property (nonatomic, strong) NSString *filesize;//文件大小
25 | @property (nonatomic, assign) CGFloat rating;//评分
26 | @property (nonatomic, strong) NSString *posted;//上传时间
27 | @property (nonatomic, assign) BOOL expunged;//是否被删除????
28 | @property (nonatomic, assign) NSInteger torrentcount;//种子数
29 | @property (nonatomic, strong) NSArray *tags;//tag数组
30 | @property (strong, nonatomic) NSArray *chTags; // 中文数组
31 | @property (strong, nonatomic) NSArray *listTags; // 列表中显示的tag
32 | @property (strong, nonatomic) NSArray *listChTags;
33 | @property (nonatomic, assign) NSInteger page;//所在的页码
34 | //下面两个为接口请求所需的参数
35 | @property (nonatomic, strong) NSString *gid;
36 | @property (nonatomic, strong) NSString *token;
37 |
38 | - (instancetype)initWithDict:(NSDictionary *)dict classifyArr:(NSArray *)classifyArr colorArr:(NSArray *)colorArr;
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJListTableView.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJListTableView.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/25.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJListTableView : UITableView
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJListTableView.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJListTableView.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/25.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJListTableView.h"
10 | #import "QJListCell.h"
11 |
12 | @implementation QJListTableView
13 |
14 | - (instancetype)init
15 | {
16 | self = [super init];
17 | if (self) {
18 | self.translatesAutoresizingMaskIntoConstraints = NO;
19 | self.rowHeight = UITableViewAutomaticDimension;
20 | self.estimatedRowHeight = UIScreenHeight();
21 | self.tableFooterView = [UIView new];
22 | [self registerNib:[UINib nibWithNibName:NSStringFromClass([QJListCell class]) bundle:nil] forCellReuseIdentifier:NSStringFromClass([QJListCell class])];
23 | }
24 | return self;
25 | }
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJLoginViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJLoginViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/22.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJLoginViewController : QJViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJMainSettingListCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJMainSettingListCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/9/2.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface QJMainSettingListCell : UITableViewCell
14 |
15 | @property (weak, nonatomic) IBOutlet UILabel *funcNameLabel;
16 |
17 | @end
18 |
19 | NS_ASSUME_NONNULL_END
20 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJMainSettingListCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJMainSettingListCell.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/9/2.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJMainSettingListCell.h"
10 |
11 | @interface QJMainSettingListCell ()
12 |
13 | @property (weak, nonatomic) IBOutlet UIView *contentBgView;
14 |
15 |
16 | @end
17 |
18 | @implementation QJMainSettingListCell
19 |
20 | - (void)awakeFromNib {
21 | [super awakeFromNib];
22 | // self.contentBgView.layer.cornerRadius = 5.f;
23 | // self.contentBgView.layer.borderWidth = 1.f;
24 | // self.contentBgView.layer.borderColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.1f].CGColor;
25 | // self.contentBgView.clipsToBounds = YES;
26 | }
27 |
28 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
29 | [super setSelected:selected animated:animated];
30 | }
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJMainSplitViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJMainSplitViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/5/6.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | // 第一个SplitViewController,控制着边缘按钮和内容
10 |
11 | #import
12 |
13 | NS_ASSUME_NONNULL_BEGIN
14 |
15 | @interface QJMainSplitViewController : UISplitViewController
16 |
17 | @property(nonatomic, assign) CGFloat maximumPrimaryColumnWidth NS_AVAILABLE_IOS(8_0);
18 |
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJMainSplitViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJMainSplitViewController.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/5/6.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJMainSplitViewController.h"
10 |
11 | @interface QJMainSplitViewController ()
12 |
13 | @end
14 |
15 | @implementation QJMainSplitViewController
16 |
17 | @dynamic maximumPrimaryColumnWidth;
18 |
19 | - (void)viewDidLoad {
20 | [super viewDidLoad];
21 | self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
22 |
23 | self.maximumPrimaryColumnWidth = 80.f;
24 | self.splitViewController.maximumPrimaryColumnWidth = self.maximumPrimaryColumnWidth;
25 | }
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJMangaImageDownloader.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJMangaImageDownloader.h
3 | // EHenTaiViewer
4 | //
5 | // Created by kayanouriko on 2018/6/12.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJMangaImageModel, QJMangaImageDownloader;
12 |
13 | @protocol QJMangaImageDownloaderDelegate
14 |
15 | @optional
16 | - (void)imageDownloadFinishWithLoader:(QJMangaImageDownloader *)loader;
17 |
18 | @end
19 |
20 | @interface QJMangaImageDownloader : NSOperation
21 |
22 | @property (nonatomic, strong) id delegate;
23 | // 持有的对象
24 | @property (nonatomic, strong) QJMangaImageModel *model;
25 | // indexPath
26 | @property (nonatomic, strong, readonly) NSIndexPath *indexPathInTableView;
27 |
28 | // 初始化
29 | - (instancetype)initWithModel:(QJMangaImageModel *)model atIndexPath:(NSIndexPath *)indexPath showKey:(NSString *)showkey gid:(NSString *)gid thdelegate:(id)delegate;
30 |
31 | - (void)cancelTask;
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJMangaImageModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJMangaImageModel.h
3 | // EHenTaiViewer
4 | //
5 | // Created by kayanouriko on 2018/6/12.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJMangaImageModel;
12 |
13 | typedef void(^smallImageUrlBlock)();
14 |
15 | @protocol QJMangaImageModelDelegate
16 |
17 | @optional
18 | - (void)imageDidDownloadFinshWithModel:(QJMangaImageModel *)model;
19 | - (void)imageDidDownloadFailWithModel:(QJMangaImageModel *)model;
20 | - (void)imageDidChangeRateWithModel:(QJMangaImageModel *)model;
21 |
22 | @end
23 |
24 | @interface QJMangaImageModel : NSObject
25 |
26 | @property (nonatomic, weak) id delegate;
27 | // 页码
28 | @property (nonatomic, assign) NSInteger page;
29 | // 大图url
30 | @property (nonatomic, strong) NSString *imageUrl;
31 | // 小图url
32 | @property (nonatomic, strong) NSString *smallImageUrl;
33 | // url
34 | @property (nonatomic, strong) NSString *url;
35 | // 已经下载的data,用于恢复下载用
36 | @property (nonatomic, strong) NSData *currentData;
37 | // 进度
38 | @property (nonatomic, assign) CGFloat rate;
39 | // image本地存储路径
40 | @property (nonatomic, strong) NSString *imagePath;
41 | // image缩放度为1的size
42 | @property (nonatomic, assign) CGSize size;
43 | // 是否有图片url
44 | @property (nonatomic, assign, readonly) BOOL hasImage;
45 | // 是否已经解析出图片url
46 | @property (nonatomic, assign, getter=isParser) BOOL parser;
47 | // 是否失败
48 | @property (nonatomic, assign, getter=isFailed) BOOL failed;
49 | // 获取smallurl
50 | - (void)getSmallUrlWithBlock:(smallImageUrlBlock)block;
51 |
52 |
53 | @end
54 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJMangaImageParser.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJMangaImageParser.h
3 | // EHenTaiViewer
4 | //
5 | // Created by kayanouriko on 2018/6/13.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJMangaImageParser;
12 |
13 | @protocol QJMangaImageParserDelegate
14 |
15 | @optional
16 | /**
17 | 解析出来的图片url
18 | urls:链接数组
19 | beginIndex:图片起始下标
20 | */
21 | - (void)imageUrlDidParserWithArray:(NSArray *)urls smallUrls:(NSArray *)smallUrls page:(NSInteger)page parser:(QJMangaImageParser *)parser;
22 |
23 | @end
24 |
25 | @interface QJMangaImageParser : NSOperation
26 |
27 | // 这里需要主要,operation的代理在main函数里面就被释放了,所以要强引用,这里还没有理解原理,待处理
28 | // 临时处理,将dalegate设置为强引用,在线程完成时,在外部把delegate置nil
29 | @property (nonatomic, strong) id delegate;
30 |
31 | - (instancetype)initWithGalleryUrl:(NSString *)url pageCount:(NSInteger)count theDelegate:(id)delegate;
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJMangaTorrentActivity.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJMangaTorrentActivity.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/8.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJMangaTorrentActivity : UIActivity
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJMangaTorrentActivity.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJMangaTorrentActivity.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/8.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJMangaTorrentActivity.h"
10 |
11 | NSString *const UIActivityTypeQJTorrent = @"QJMangaTorrentActivity";
12 |
13 | @implementation QJMangaTorrentActivity
14 |
15 | - (NSString *)activityType {
16 | return UIActivityTypeQJTorrent;
17 | }
18 |
19 | - (NSString *)activityTitle {
20 | return @"复制画廊磁力链接";
21 | }
22 |
23 | - (UIImage *)activityImage {
24 | return [UIImage imageNamed:@"torrent"];
25 | }
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJNetworkTool.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJNetworkTool.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/24.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJNetworkTool : NSObject
12 |
13 | + (QJNetworkTool *)shareTool;
14 | /*
15 | * 监听网络变化
16 | */
17 | - (void)starNotifier;
18 |
19 | - (BOOL)isEnableNetwork;//判断是否有网
20 | - (BOOL)isEnableMobleNetwork;//判断是否为移动数据
21 |
22 | // 用于控制显示系统网络请求的菊花
23 | - (void)showNetworkActivity;
24 | - (void)hiddenNetworkActivity;
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJNewBrowerImageCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJNewBrowerImageCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/4/6.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJMangaImageModel;
12 |
13 | @protocol QJNewBrowerImageCellDelegate
14 |
15 | @optional
16 | - (void)collectionViewShouldRefreshWithModel:(QJMangaImageModel *)model;
17 | - (void)scrollViewInCellWillBeginDragging;
18 |
19 | @end
20 |
21 | @interface QJNewBrowerImageCell : UICollectionViewCell
22 |
23 | /** QJNewBrowerImageCell Delegate */
24 | @property (nonatomic, weak) id delegate;
25 | /** model */
26 | @property (nonatomic, strong) QJMangaImageModel *model;
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJNewBrowerViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJNewBrowerViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/7.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJNewBrowerViewController : QJViewController
12 |
13 | @property (nonatomic, strong) NSString *mangaName;
14 | @property (nonatomic, strong) NSString *showkey;
15 | @property (nonatomic, strong) NSString *url;
16 | @property (nonatomic, strong) NSString *gid;
17 | @property (nonatomic, assign) NSInteger count;
18 | @property (nonatomic, strong) NSArray *imageUrls;
19 | @property (nonatomic, strong) NSArray *smallImageUrls;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJNewCommentCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJNewCommentCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/23.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJNewCommentCell;
12 |
13 | @protocol QJNewCommentCellDelegate
14 |
15 | @optional
16 | - (void)didClickMoreBtnWithCell:(QJNewCommentCell *)cell;
17 |
18 | @end
19 |
20 | @interface QJNewCommentCell : UICollectionViewCell
21 |
22 | @property (weak, nonatomic) iddelegate;
23 | @property (nonatomic, strong) NSIndexPath *indexPath;
24 | - (void)refreshUIWithDict:(NSDictionary *)dict;
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJNewInfoViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJNewInfoViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/20.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @class QJListItem;
12 |
13 | @interface QJNewInfoViewController : QJViewController
14 |
15 | @property (nonatomic, strong) QJListItem *model;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJNewSearchViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJNewSearchViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/3/26.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | typedef NS_ENUM(NSInteger, QJNewSearchViewControllerType) {
14 | QJNewSearchViewControllerTypeSearch, // 普通搜索
15 | QJNewSearchViewControllerTypeFavorites, // 收藏夹搜索
16 | QJNewSearchViewControllerTypeTag, // 标签跳转
17 | QJNewSearchViewControllerTypeWatched, // 关注搜索
18 | };
19 |
20 | @interface QJNewSearchViewController : QJViewController
21 |
22 | @property (strong, nonatomic) NSString *searchKey; // 搜索关键词
23 | @property (strong, nonatomic) NSMutableArray *settings;
24 | @property (assign, nonatomic) QJNewSearchViewControllerType type;
25 | @property (strong, nonatomic) UINavigationController *nav;
26 |
27 | // 父类触发了搜索按钮的方法
28 | - (void)viewsShouldSearchBarSearchButtonClicked:(UISearchBar *)searchBar;
29 | // 父类触发了筛选按钮的方法
30 | - (void)viewsShouldSearchBarBookmarkButtonClicked:(UISearchBar *)searchBar;
31 |
32 | @end
33 |
34 | NS_ASSUME_NONNULL_END
35 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJNowViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJNowViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/9/20.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJNowViewController : QJViewController
12 |
13 | - (void)scrollToTop;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJOrientationManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJOrientationManager.h
3 | // EHenTaiViewer
4 | //
5 | // Created by kayanouriko on 2018/6/26.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | /**
10 | 该类主要控制一些杂项设置
11 | */
12 |
13 | #import
14 |
15 | @interface QJOrientationManager : NSObject
16 |
17 | /** 通过配置文件改变目前的屏幕方向 */
18 | + (void)changeOrientationFromSetting;
19 |
20 | /** 通过配置文件获取屏幕方向并转换为seg对应的index
21 | @return seg对应的index, 0. 竖屏 1. 横屏 2. 跟随系统
22 | */
23 | + (NSInteger)getOrientationSegSelected;
24 |
25 | /** 恢复竖屏方向 */
26 | + (void)recoverPortraitOrienttation;
27 |
28 | /** 根据seg的selectedIndex修改配置文件并修改屏幕方向
29 | @param selectedIndex seg的选中index
30 | */
31 | + (void)setOrientationWithSelected:(NSInteger)selectedIndex;
32 |
33 | /** 通过配置文件获取滚动方向并转换为seg对应的index
34 | @return seg对应的index, 0. 水平滚动 1. 上下滚动
35 | */
36 | + (NSInteger)getDiretionSegSelected;
37 |
38 | /** 根据seg的selectedIndex修改配置文件并修改滚动方向
39 | @param selectedIndex seg的选中index
40 | */
41 | + (void)setDiretionWithSelected:(NSInteger)selectedIndex;
42 |
43 | /** 保存目标图片到系统相册
44 | @param imagePath 沙盒图片路径
45 | */
46 | + (void)saveImageToSystemThumbWithImagePath:(NSString *)imagePath;
47 |
48 | @end
49 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJPasteManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJPasteManager.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/25.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | // 该类主要是检测粘贴板里面的内容
10 |
11 | #import
12 |
13 | NS_ASSUME_NONNULL_BEGIN
14 |
15 | @interface QJPasteManager : NSObject
16 |
17 | + (instancetype)sharedInstance;
18 |
19 | // 检测剪切板里面的url
20 | - (void)checkInfoFromPasteBoard;
21 | // 通过外部传入的url识别画廊
22 | - (BOOL)checkInfoWithUrl:(NSString *)url;
23 |
24 | @end
25 |
26 | NS_ASSUME_NONNULL_END
27 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJProtectTool.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJProtectTool.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/25.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | //感谢maltsugar,终于明白了系统密码调用的方法
10 |
11 | #import
12 |
13 | typedef NS_ENUM(NSInteger, QJProtectToolStatus) {
14 | QJProtectToolStatusSuccess,//成功
15 | QJProtectToolStatusCannel,//用户点击了退出
16 | };
17 |
18 | typedef void(^CompletBlock)(QJProtectToolStatus status);
19 |
20 | @interface QJProtectTool : NSObject
21 |
22 | + (QJProtectTool *)shareTool;
23 |
24 | - (BOOL)isEnableTouchID;
25 | - (void)showTouchID:(CompletBlock)completion;
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJProtectTool.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJProtectTool.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/25.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJProtectTool.h"
10 | #import
11 |
12 | @implementation QJProtectTool
13 |
14 | + (QJProtectTool *)shareTool {
15 | static QJProtectTool *sharedInstance = nil;
16 | static dispatch_once_t onceToken;
17 | dispatch_once(&onceToken, ^{
18 | sharedInstance = [QJProtectTool new];
19 | });
20 | return sharedInstance;
21 | }
22 |
23 | - (BOOL)isEnableTouchID {
24 | LAContext *laContext = [LAContext new];
25 | return [laContext canEvaluatePolicy:kLAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL];
26 | }
27 |
28 | //是否支持系统密码验证
29 | - (BOOL)isSupportDeviceOwnerAuth {
30 | if (@available(iOS 9.0, *)) {
31 | LAContext *laContext = [LAContext new];
32 | return [laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:NULL];
33 | } else {
34 | return NO;
35 | }
36 | return NO;
37 | }
38 |
39 | - (void)showTouchID:(CompletBlock)completion {
40 | LAContext *context = [LAContext new];
41 | NSString *des = @"验证用于打开应用";
42 | LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
43 | if (@available(iOS 9.0, *)) {
44 | policy = LAPolicyDeviceOwnerAuthentication;
45 | }
46 | [context evaluatePolicy:policy localizedReason:des reply:^(BOOL success, NSError *error) {
47 | dispatch_async(dispatch_get_main_queue(), ^{
48 | if (success) {
49 | completion(QJProtectToolStatusSuccess);
50 | } else {
51 | completion(QJProtectToolStatusCannel);
52 | }
53 | });
54 | }];
55 | }
56 |
57 | @end
58 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJRankingHeadInfoCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJRankingHeadInfoCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/15.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJListItem;
12 |
13 | @interface QJRankingHeadInfoCell : UICollectionViewCell
14 |
15 | @property (nonatomic, assign) NSInteger index;
16 | @property (nonatomic, strong) QJListItem *model;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJRankingInfoCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJRankingInfoCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/14.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJListItem;
12 |
13 | @interface QJRankingInfoCell : UICollectionViewCell
14 |
15 | @property (nonatomic, strong) QJListItem *model;
16 | @property (weak, nonatomic) IBOutlet UIView *underLine;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJRankingInfoCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJRankingInfoCell.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/14.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJRankingInfoCell.h"
10 | #import "QJListItem.h"
11 |
12 | @interface QJRankingInfoCell ()
13 |
14 | @property (weak, nonatomic) IBOutlet UIImageView *leftImageView;
15 | @property (weak, nonatomic) IBOutlet UILabel *titleNameLabel;
16 | @property (weak, nonatomic) IBOutlet UILabel *catgoryLabel;
17 | @property (weak, nonatomic) IBOutlet UILabel *langueLabel;
18 |
19 | @end
20 |
21 | @implementation QJRankingInfoCell
22 |
23 | - (void)awakeFromNib {
24 | [super awakeFromNib];
25 | self.backgroundColor = [UIColor whiteColor];
26 |
27 | self.leftImageView.layer.cornerRadius = 5.f;
28 | self.catgoryLabel.layer.cornerRadius = 3.f;
29 | self.catgoryLabel.clipsToBounds = YES;
30 | }
31 |
32 | - (void)setModel:(QJListItem *)model {
33 | _model = model;
34 |
35 | self.titleNameLabel.text = ([QJGlobalInfo isExHentaiTitleJnMode] && _model.title_jpn.length) ? _model.title_jpn : _model.title;
36 | self.catgoryLabel.text = [NSString stringWithFormat:@" %@ ",_model.category];
37 | self.catgoryLabel.backgroundColor = _model.categoryColor;
38 | self.langueLabel.text = _model.language;
39 | [self.leftImageView yy_setImageWithURL:[NSURL URLWithString:_model.thumb] options:YYWebImageOptionProgressiveBlur | YYWebImageOptionSetImageWithFadeAnimation | YYWebImageOptionHandleCookies];
40 | }
41 |
42 | @end
43 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJRankingUploadCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJRankingUploadCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/18.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJToplistUploaderItem;
12 |
13 | @interface QJRankingUploadCell : UICollectionViewCell
14 |
15 | - (void)refreshCellWithModel:(QJToplistUploaderItem *)model index:(NSInteger)index isHidden:(BOOL)isHidden;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJRankingViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJRankingViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/12/14.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJRankingViewController : QJViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJScrollView.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJScrollView.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/7/28.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJScrollView : UIScrollView
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJScrollView.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJScrollView.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/7/28.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJScrollView.h"
10 |
11 | @interface QJScrollView ()
12 |
13 | @end
14 |
15 | @implementation QJScrollView
16 |
17 | -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
18 | if(gestureRecognizer.state != 0) {
19 | return YES;
20 | }else {
21 | return NO;
22 | }
23 | }
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchBar.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchBar.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/6.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol QJSearchBarDelagate
12 |
13 | @optional
14 | - (void)didClickSiftBtn;
15 |
16 | @end
17 |
18 | @interface QJSearchBar : UIView
19 |
20 | @property (weak, nonatomic) iddelegate;
21 | @property (weak, nonatomic) IBOutlet UITextField *searchTextF;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchBar.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchBar.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/6.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJSearchBar.h"
10 |
11 | @interface QJSearchBar ()
12 |
13 | @property (weak, nonatomic) IBOutlet UIView *searchBgView;
14 |
15 | - (IBAction)btnAction:(UIButton *)sender;
16 |
17 | @end
18 |
19 | @implementation QJSearchBar
20 |
21 | - (void)awakeFromNib {
22 | [super awakeFromNib];
23 | self.searchBgView.layer.cornerRadius = 18.f;
24 | }
25 |
26 | - (IBAction)btnAction:(UIButton *)sender {
27 | if (self.delegate != nil && [self.delegate respondsToSelector:@selector(didClickSiftBtn)]) {
28 | [self.delegate didClickSiftBtn];
29 | }
30 | }
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchClassifyCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchClassifyCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/18.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJSearchClassifyCell : UITableViewCell
12 |
13 | - (void)saveButtonState;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/16.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface QJSearchController : UISearchController
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchController.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchController.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/16.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJSearchController.h"
10 |
11 | @interface QJSearchController ()
12 |
13 | @end
14 |
15 | @implementation QJSearchController
16 |
17 | - (instancetype)initWithSearchResultsController:(UIViewController *)searchResultsController {
18 | self = [super initWithSearchResultsController:searchResultsController];
19 | if (self) {
20 | [self.searchBar setImage:[UIImage imageNamed:@"sift"] forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];
21 | self.searchBar.enablesReturnKeyAutomatically = NO; // 设置无内容的时候可以点击搜索按钮
22 | }
23 | return self;
24 | }
25 |
26 | - (void)viewDidLoad {
27 | [super viewDidLoad];
28 | // Do any additional setup after loading the view.
29 | }
30 |
31 | @end
32 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchSettingSubViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchSettingSubViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/3/30.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | typedef NS_ENUM(NSInteger, QJSearchSettingSubViewControllerType) {
14 | QJSearchSettingSubViewControllerTypeNormal,
15 | QJSearchSettingSubViewControllerTypeSift,
16 | };
17 |
18 | @interface QJSearchSettingSubViewController : QJViewController
19 |
20 | @property (assign, nonatomic) QJSearchSettingSubViewControllerType type;
21 | @property (strong, nonatomic) NSArray *settings; // 高级筛选
22 |
23 | - (NSArray *)saveAndGetSettingInfo;
24 |
25 | @end
26 |
27 | NS_ASSUME_NONNULL_END
28 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchSettingTagSearchViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchSettingTagSearchViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/1.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @class QJSearchSettingTagSearchViewController;
14 |
15 | @protocol QJSearchSettingTagSearchViewControllerDelegate
16 |
17 | @optional
18 | - (void)tagSearchController:(QJSearchSettingTagSearchViewController *)controller tagName:(NSString *)tagName indexPath:(NSIndexPath *)indexPath;
19 |
20 | @end
21 |
22 | @interface QJSearchSettingTagSearchViewController : QJViewController
23 |
24 | @property (strong, nonatomic) NSIndexPath *indexPath;
25 | @property (weak, nonatomic) iddelegate;
26 |
27 | @end
28 |
29 | NS_ASSUME_NONNULL_END
30 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchSettingViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchSettingViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/3/30.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @class QJSearchSettingViewController;
14 |
15 | @protocol QJSearchSettingViewControllerDelegate
16 |
17 | @optional
18 | - (void)settingController:(QJSearchSettingViewController *)settingController changeSiftSettingWithArr:(NSArray *)settings;
19 |
20 | @end
21 |
22 | @interface QJSearchSettingViewController : QJViewController
23 |
24 | @property (weak, nonatomic) iddelegate;
25 | @property (strong, nonatomic) NSArray *settings; // 高级筛选
26 |
27 | @end
28 |
29 | NS_ASSUME_NONNULL_END
30 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchSiftHeadView.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchSiftHeadView.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/3/26.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @class QJSearchSiftHeadView;
14 |
15 | @protocol QJSearchSiftHeadViewDelegate
16 |
17 | @optional
18 | // 点击标签按钮
19 | - (void)didClickTagActionWithHeadView:(QJSearchSiftHeadView *)headView index:(NSInteger)index;
20 |
21 | @end
22 |
23 | @interface QJSearchSiftHeadView : UIVisualEffectView
24 |
25 | @property (strong, nonatomic) NSArray *keys;
26 | @property (weak, nonatomic) iddelegate;
27 |
28 | - (instancetype)initWithKeys:(NSArray *)keys theDelegate:(id)delegate;
29 |
30 |
31 | @end
32 |
33 | NS_ASSUME_NONNULL_END
34 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchSoreCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchSoreCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/18.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJSearchSoreCell : UITableViewCell
12 |
13 | @property (weak, nonatomic) IBOutlet UISegmentedControl *segController;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchSoreCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchSoreCell.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/18.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJSearchSoreCell.h"
10 |
11 | @interface QJSearchSoreCell ()
12 |
13 | - (IBAction)valueChange:(UISegmentedControl *)sender;
14 |
15 | @end
16 |
17 | @implementation QJSearchSoreCell
18 |
19 | - (void)awakeFromNib {
20 | [super awakeFromNib];
21 | }
22 |
23 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
24 | [super setSelected:selected animated:animated];
25 | }
26 |
27 | - (IBAction)valueChange:(UISegmentedControl *)sender {
28 | NSObjSetForKey(@"SearchSore", @(sender.selectedSegmentIndex));
29 | NSObjSynchronize();
30 | }
31 | @end
32 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSearchViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSearchViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/7/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @class QJGalleryTagItem;
12 |
13 | @interface QJSearchViewController : QJViewController
14 |
15 | @property (nonatomic, strong) QJGalleryTagItem *model;
16 |
17 | - (void)scrollToTop;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSecretBgTool.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSecretBgTool.h
3 | // EHenTaiViewer
4 | //
5 | // Created by zedmacbook on 2018/7/3.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJSecretBgTool : NSObject
12 |
13 | + (instancetype)sharedInstance;
14 |
15 | - (void)showSecretBackground;
16 | - (void)hiddenSecretBackground;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingHightOtherController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingHightOtherController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/9/1.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @class QJSettingItem;
12 |
13 | @interface QJSettingHightOtherController : QJViewController
14 |
15 | @property (nonatomic, strong) QJSettingItem *model;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingItem.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/24.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class TFHppleElement;
12 |
13 | @interface QJSettingLanguageCheckBoxItem : NSObject
14 |
15 | @property (nonatomic, strong) NSString *name;//名字
16 | @property (nonatomic, assign, getter=isChecked) BOOL checked;//是否被选中
17 |
18 | + (QJSettingLanguageCheckBoxItem *)creatModelWithHpple:(TFHppleElement *)hpple;
19 |
20 | @end
21 |
22 | @interface QJSettingLanguageItem : NSObject
23 |
24 | @property (nonatomic, strong) NSString *name;//语言名字
25 | @property (nonatomic, strong) NSArray *models;//是否被选中
26 |
27 | + (QJSettingLanguageItem *)creatModelWithHpple:(TFHppleElement *)hpple;
28 |
29 | @end
30 |
31 | @interface QJSettingCheckboxItem : NSObject
32 |
33 | @property (nonatomic, strong) NSString *title;
34 | @property (nonatomic, strong) NSString *name;
35 | @property (nonatomic, assign, getter=isChecked) BOOL checked;
36 |
37 | + (QJSettingCheckboxItem *)creatModelWithLabel:(TFHppleElement *)labelElement input:(TFHppleElement *)inputElement;
38 |
39 | @end
40 |
41 | @interface QJSettingItem : NSObject
42 |
43 | @property (nonatomic, strong) NSString *name;//名字
44 | @property (nonatomic, strong) NSArray *subModels;
45 |
46 | + (QJSettingItem *)creatModelWithHpple:(TFHppleElement *)hpple;
47 |
48 | @end
49 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingListCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingListCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/24.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJSettingModel;
12 |
13 | @protocol QJSettingListCellDelagate
14 |
15 | @optional
16 | - (void)valueChangeWithSwitch:(UISwitch *)switchBtn model:(QJSettingModel *)model;
17 |
18 | @end
19 |
20 | @interface QJSettingListCell : UITableViewCell
21 |
22 | @property (weak, nonatomic) iddelegate;
23 | @property (nonatomic, strong) QJSettingModel *model;
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingLoginCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingLoginCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/22.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJSettingLoginCell : UITableViewCell
12 |
13 | - (void)updateUserInfo;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingLoginCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingLoginCell.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/22.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJSettingLoginCell.h"
10 |
11 | @interface QJSettingLoginCell ()
12 |
13 | // 控件
14 | @property (weak, nonatomic) IBOutlet UILabel *loginNameLabel;
15 | @property (weak, nonatomic) IBOutlet UIImageView *leftImageView;
16 | @property (weak, nonatomic) IBOutlet UIView *leftImageBgView; // 封面阴影
17 | @property (weak, nonatomic) IBOutlet UILabel *desLabel; // 描述信息
18 |
19 | @end
20 |
21 | @implementation QJSettingLoginCell
22 |
23 | - (void)awakeFromNib {
24 | [super awakeFromNib];
25 |
26 | self.leftImageBgView.layer.shadowColor = [UIColor blackColor].CGColor;
27 | self.leftImageBgView.layer.cornerRadius = 30.f;
28 | self.leftImageBgView.layer.shadowOffset = CGSizeMake(0, 0);
29 | self.leftImageBgView.layer.shadowOpacity = 0.1f;
30 | self.leftImageBgView.layer.shadowRadius = 4.f;
31 | }
32 |
33 | - (void)updateUserInfo {
34 | NSString *imageUrl = [QJGlobalInfo getExHentaiUserImageUrl];
35 | if ([imageUrl containsString:@"http"]) {
36 | [self.leftImageView yy_setImageWithURL:[NSURL URLWithString:imageUrl] options:YYWebImageOptionProgressiveBlur | YYWebImageOptionSetImageWithFadeAnimation | YYWebImageOptionHandleCookies];
37 | }
38 | else {
39 | self.leftImageView.image = [UIImage imageNamed:imageUrl];
40 | }
41 |
42 | self.loginNameLabel.text = [QJGlobalInfo getExHentaiUserName];
43 | self.desLabel.text = [QJGlobalInfo getExHentaiUserDes];
44 | }
45 |
46 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
47 | [super setSelected:selected animated:animated];
48 |
49 | // Configure the view for the selected state
50 | }
51 |
52 | @end
53 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingModel.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/28.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJSettingModel : NSObject
12 |
13 | @property (nonatomic, strong) NSString *title;
14 | @property (nonatomic, strong) NSString *subTitle;
15 | @property (nonatomic, strong) NSString *subTitleSelected;
16 | @property (nonatomic, strong) NSString *value;
17 | @property (nonatomic, strong) NSString *type;
18 |
19 | + (QJSettingModel *)creatModelWithDict:(NSDictionary *)dict;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingModel.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/28.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJSettingModel.h"
10 |
11 | @implementation QJSettingModel
12 |
13 | + (QJSettingModel *)creatModelWithDict:(NSDictionary *)dict {
14 | QJSettingModel *model = [QJSettingModel new];
15 | [model setValuesForKeysWithDictionary:dict];
16 | return model;
17 | }
18 |
19 | - (instancetype)init
20 | {
21 | self = [super init];
22 | if (self) {
23 | self.value = @"";
24 | }
25 | return self;
26 | }
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingMyTagsCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingMyTagsCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/26.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @class QJTagModel;
14 |
15 | @interface QJSettingMyTagsCell : UITableViewCell
16 |
17 | @property (strong, nonatomic) QJTagModel *model;
18 |
19 | @end
20 |
21 | NS_ASSUME_NONNULL_END
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingMyTagsController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingMyTagsController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/26.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface QJSettingMyTagsController : QJViewController
14 |
15 | @end
16 |
17 | NS_ASSUME_NONNULL_END
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingMytagsEditController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingMytagsEditController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/26.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @class QJTagModel;
14 |
15 | @interface QJSettingMytagsEditController : QJViewController
16 |
17 | @property (strong, nonatomic) NSString *apikey;
18 | @property (strong, nonatomic) NSString *apiuid;
19 | @property (strong, nonatomic) QJTagModel *model;
20 |
21 | @end
22 |
23 | NS_ASSUME_NONNULL_END
24 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/22.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJSettingViewController : QJViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJSettingWatchSettingController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJSettingWatchSettingController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/16.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | typedef NS_ENUM(NSInteger, QJSettingWatchSettingControllerType) {
12 | QJSettingWatchSettingControllerTypeEH, // 常规设置
13 | QJSettingWatchSettingControllerTypeHight, // 高级设置
14 | QJSettingWatchSettingControllerTypeMyTags, // 我的标签,占位用
15 | QJSettingWatchSettingControllerTypeSuggest, // 建议
16 | QJSettingWatchSettingControllerTypeAbout, // 关于
17 | QJSettingWatchSettingControllerTypeAboutReference, // 参考
18 | QJSettingWatchSettingControllerTypeAboutFrame, // 框架
19 | };
20 |
21 | @interface QJSettingWatchSettingController : QJViewController
22 |
23 | @property (nonatomic, assign) QJSettingWatchSettingControllerType type;
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTabBarController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTabBarController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/19.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJTabBarController : UITabBarController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTableViewCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/7/26.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJTableViewCell.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/7/26.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJTableViewCell.h"
10 |
11 | @implementation QJTableViewCell
12 |
13 | - (void)layoutSubviews {
14 | [super layoutSubviews];
15 |
16 | }
17 |
18 | - (void)awakeFromNib {
19 | [super awakeFromNib];
20 | }
21 |
22 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
23 | [super setSelected:selected animated:animated];
24 |
25 | // Configure the view for the selected state
26 | }
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTagModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTagModel.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/26.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface QJTagModel : NSObject
14 |
15 | /**
16 | @"usertag": usertag,
17 | @"name": name,
18 | @"group": group,
19 | @"color": color,
20 | @"backgroundColor": backgroundColor,
21 | @"watched": watched,
22 | @"hidden": hidden,
23 | @"none": none,
24 | @"weight": weight,
25 | */
26 |
27 | @property (strong, nonatomic) NSString *usertag; // id
28 | @property (strong, nonatomic) NSString *group; // 所属分组
29 | @property (strong, nonatomic) NSString *name; // 标签名字
30 | @property (strong, nonatomic) NSString *name_ch; // 标签名字_中文
31 | @property (strong, nonatomic) NSString *color;
32 | @property (strong, nonatomic) NSString *backgroundColor;
33 | @property (assign, nonatomic) BOOL isWatched;
34 | @property (assign, nonatomic) BOOL isHidden;
35 | @property (assign, nonatomic) BOOL isNone;
36 | @property (strong, nonatomic) NSString *weight;
37 |
38 | // 从api获取的model
39 | + (QJTagModel *)creatModelWithUserTag:(NSString *)usertag dict:(NSDictionary *)dict;
40 | // 从解析的html回调获取的model
41 | + (QJTagModel *)creatModelWithDict:(NSDictionary *)dict;
42 |
43 | @end
44 |
45 | @interface QJTagListModel : NSObject
46 | /**
47 | @"apiuid": apiuid,
48 | @"apikey": apikey,
49 | @"tagset_name": tagset_name,
50 | @"usertags": usertags,
51 | */
52 | @property (strong, nonatomic) NSString *apiuid;
53 | @property (strong, nonatomic) NSString *apikey;
54 | @property (strong, nonatomic) NSString *tagset_name;
55 | @property (strong, nonatomic) NSArray *tags;
56 |
57 | + (QJTagListModel *)creatModelWithDict:(NSDictionary *)dict;
58 |
59 | @end
60 |
61 | NS_ASSUME_NONNULL_END
62 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTagView.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTagView.h
3 | // ExReadViewer
4 | //
5 | // Created by 覃江 on 2016/12/31.
6 | // Copyright © 2016年 茅野瓜子. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJTagView, QJGalleryTagItem;
12 |
13 | @protocol QJTagViewDelegate
14 |
15 | @optional
16 | - (void)tagView:(QJTagView *)tagView didClickTagWithModel:(QJGalleryTagItem *)model;
17 |
18 | @end
19 |
20 | @interface QJTagView : UIView
21 |
22 | @property (weak, nonatomic) iddelegate;
23 | /* array构成
24 | 数组分两个元素,第一个为分类名 第二个为tag模型,类名为QJCategoryButtonInfo
25 | */
26 | - (void)refreshUI:(NSArray *)array isCN:(BOOL)isCN;
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTipViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTipViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/30.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJTipViewController : UIViewController
12 |
13 | - (void)startAnimateWithTip:(NSString *)tip;
14 | - (void)stopAnimateWithTip:(NSString *)tip;
15 |
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJToast.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJToast.h
3 | // Nimingban
4 | //
5 | // Created by QinJ on 2017/6/30.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJToast : UILabel
12 |
13 | + (void)showWithTip:(NSString *)tip;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTool.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTool.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/4/17.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | // 存放一些工具方法
10 |
11 | #import
12 |
13 | NS_ASSUME_NONNULL_BEGIN
14 |
15 | @interface QJTool : NSObject
16 |
17 | // 是否为异形屏
18 | + (BOOL)isiPhoneXAfter;
19 |
20 | // 颜色获取
21 | + (UIColor *)colorWithHexString:(NSString *)color;
22 |
23 | // 获取当前控制器
24 | + (UIViewController *)visibleViewController;
25 | + (UINavigationController *)visibleNavigationController;
26 |
27 | @end
28 |
29 | NS_ASSUME_NONNULL_END
30 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJToplistUploaderItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJToplistUploaderItem.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/2.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJToplistUploaderItem : NSObject
12 |
13 | @property (nonatomic, strong) NSString *name;
14 | @property (nonatomic, strong) NSString *url;
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJToplistUploaderItem.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJToplistUploaderItem.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/8/2.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJToplistUploaderItem.h"
10 |
11 | @implementation QJToplistUploaderItem
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTorrentInfoCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTorrentInfoCell.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/9.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class QJTorrentItem;
12 |
13 | @interface QJTorrentInfoCell : UITableViewCell
14 |
15 | - (void)refreshUI:(QJTorrentItem *)item;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTorrentInfoCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJTorrentInfoCell.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/9.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJTorrentInfoCell.h"
10 | #import "QJTorrentItem.h"
11 |
12 | @interface QJTorrentInfoCell ()
13 |
14 | @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
15 | @property (weak, nonatomic) IBOutlet UILabel *uploaderLabel;
16 | @property (weak, nonatomic) IBOutlet UILabel *postedLabel;
17 | @property (weak, nonatomic) IBOutlet UILabel *sizeLabel;
18 | @property (weak, nonatomic) IBOutlet UILabel *seedsLabel;
19 | @property (weak, nonatomic) IBOutlet UILabel *peersLabel;
20 | @property (weak, nonatomic) IBOutlet UILabel *downloadsLabel;
21 |
22 | @end
23 |
24 | @implementation QJTorrentInfoCell
25 |
26 | - (void)refreshUI:(QJTorrentItem *)item {
27 | self.nameLabel.text = item.name;
28 | self.uploaderLabel.text = item.uploader;
29 | self.postedLabel.text = item.posted;
30 | self.sizeLabel.text = item.size;
31 | self.seedsLabel.text = item.seeds;
32 | self.peersLabel.text = item.peers;
33 | self.downloadsLabel.text = item.downloads;
34 | }
35 |
36 | - (void)awakeFromNib {
37 | [super awakeFromNib];
38 | // Initialization code
39 | }
40 |
41 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
42 | [super setSelected:selected animated:animated];
43 |
44 | // Configure the view for the selected state
45 | }
46 |
47 | @end
48 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTorrentInfoController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTorrentInfoController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/9.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJTorrentInfoController : QJViewController
12 |
13 | @property (nonatomic, strong) NSString *gid;
14 | @property (nonatomic, strong) NSString *token;
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTorrentItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTorrentItem.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/9.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJTorrentItem : NSObject
12 |
13 | @property (nonatomic, strong) NSString *posted;
14 | @property (nonatomic, strong) NSString *size;
15 | @property (nonatomic, strong) NSString *seeds;
16 | @property (nonatomic, strong) NSString *peers;
17 | @property (nonatomic, strong) NSString *downloads;
18 | @property (nonatomic, strong) NSString *uploader;
19 | @property (nonatomic, strong) NSString *name;
20 | @property (nonatomic, strong) NSString *magnet;
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTorrentItem.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJTorrentItem.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/6/9.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJTorrentItem.h"
10 |
11 | @implementation QJTorrentItem
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTouchIDViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJTouchIDViewController.h
3 | // ExReadViewer
4 | //
5 | // Created by 覃江 on 2017/1/9.
6 | // Copyright © 2017年 茅野瓜子. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef void(^TouchidBlock)(BOOL isSuccess);
12 |
13 | @interface QJTouchIDViewController : UIViewController
14 |
15 | @property (nonatomic, strong) TouchidBlock block;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJTouchIDViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // QJTouchIDViewController.m
3 | // ExReadViewer
4 | //
5 | // Created by 覃江 on 2017/1/9.
6 | // Copyright © 2017年 茅野瓜子. All rights reserved.
7 | //
8 |
9 | #import "QJTouchIDViewController.h"
10 | #import "QJProtectTool.h"
11 |
12 | @interface QJTouchIDViewController ()
13 |
14 | - (IBAction)btnAction:(UIButton *)sender;
15 |
16 | @end
17 |
18 | @implementation QJTouchIDViewController
19 |
20 | - (void)viewDidLoad {
21 | [super viewDidLoad];
22 | [self unlockWithTouchID];
23 | }
24 |
25 | - (IBAction)btnAction:(UIButton *)sender {
26 | [self unlockWithTouchID];
27 | }
28 |
29 | - (void)unlockWithTouchID {
30 | [[QJProtectTool shareTool] showTouchID:^(QJProtectToolStatus status) {
31 | if (status == QJProtectToolStatusSuccess) {
32 | [self dismissViewControllerAnimated:YES completion:^{
33 | if (self.block) {
34 | self.block(YES);
35 | }
36 | }];
37 | }
38 | }];
39 | }
40 |
41 | - (void)didReceiveMemoryWarning {
42 | [super didReceiveMemoryWarning];
43 | }
44 |
45 | @end
46 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/18.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface QJViewController : UIViewController
12 |
13 | //是否为刷新状态
14 | - (BOOL)isShowFreshingStatus;
15 | //显示菊花
16 | - (void)showFreshingViewWithTip:(NSString *)tip;
17 | //关闭菊花
18 | - (void)hiddenFreshingView;
19 | //显示错误
20 | - (void)showErrorViewWithTip:(NSString *)tip;
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJWatchedViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJWatchedViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2019/5/4.
6 | // Copyright © 2019 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface QJWatchedViewController : QJViewController
14 |
15 | - (void)scrollToTop;
16 |
17 | @end
18 |
19 | NS_ASSUME_NONNULL_END
20 |
--------------------------------------------------------------------------------
/EHenTaiViewer/QJWebViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // QJWebViewController.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/23.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "QJViewController.h"
10 |
11 | @interface QJWebViewController : QJViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/TBCityIconFont.h:
--------------------------------------------------------------------------------
1 | #import "UIImage+TBCityIconFont.h"
2 | #import "TBCityIconInfo.h"
3 |
4 | #define TBCityIconInfoMake(text, imageSize, imageColor) [TBCityIconInfo iconInfoWithText:text size:imageSize color:imageColor]
5 |
6 | @interface TBCityIconFont : NSObject
7 |
8 | + (UIFont *)fontWithSize: (CGFloat)size;
9 | + (void)setFontName:(NSString *)fontName;
10 |
11 | @end
--------------------------------------------------------------------------------
/EHenTaiViewer/TBCityIconFont.m:
--------------------------------------------------------------------------------
1 | #import "TBCityIconFont.h"
2 | #import
3 |
4 | @implementation TBCityIconFont
5 |
6 | static NSString *_fontName;
7 |
8 | + (void)registerFontWithURL:(NSURL *)url {
9 | NSAssert([[NSFileManager defaultManager] fileExistsAtPath:[url path]], @"Font file doesn't exist");
10 | CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);
11 | CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
12 | CGDataProviderRelease(fontDataProvider);
13 | CTFontManagerRegisterGraphicsFont(newFont, nil);
14 | CGFontRelease(newFont);
15 | }
16 |
17 | + (UIFont *)fontWithSize:(CGFloat)size {
18 | UIFont *font = [UIFont fontWithName:[self fontName] size:size];
19 | if (font == nil) {
20 | NSURL *fontFileUrl = [[NSBundle mainBundle] URLForResource:[self fontName] withExtension:@"ttf"];
21 | [self registerFontWithURL: fontFileUrl];
22 | font = [UIFont fontWithName:[self fontName] size:size];
23 | NSAssert(font, @"UIFont object should not be nil, check if the font file is added to the application bundle and you're using the correct font name.");
24 | }
25 | return font;
26 | }
27 |
28 | + (void)setFontName:(NSString *)fontName {
29 | _fontName = fontName;
30 |
31 | }
32 |
33 | + (NSString *)fontName {
34 | return _fontName ? : @"iconfont";
35 | }
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/EHenTaiViewer/TBCityIconInfo.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface TBCityIconInfo : NSObject
5 |
6 | @property (nonatomic, strong) NSString *text;
7 | @property (nonatomic, assign) NSInteger size;
8 | @property (nonatomic, strong) UIColor *color;
9 |
10 | - (instancetype)initWithText:(NSString *)text size:(NSInteger)size color:(UIColor *)color;
11 | + (instancetype)iconInfoWithText:(NSString *)text size:(NSInteger)size color:(UIColor *)color;
12 |
13 | @end
--------------------------------------------------------------------------------
/EHenTaiViewer/TBCityIconInfo.m:
--------------------------------------------------------------------------------
1 | #import "TBCityIconInfo.h"
2 |
3 | @implementation TBCityIconInfo
4 |
5 | - (instancetype)initWithText:(NSString *)text size:(NSInteger)size color:(UIColor *)color {
6 | if (self = [super init]) {
7 | self.text = text;
8 | self.size = size;
9 | self.color = color;
10 | }
11 | return self;
12 | }
13 |
14 | + (instancetype)iconInfoWithText:(NSString *)text size:(NSInteger)size color:(UIColor *)color {
15 | return [[TBCityIconInfo alloc] initWithText:text size:size color:color];
16 | }
17 |
18 | @end
--------------------------------------------------------------------------------
/EHenTaiViewer/Tag+CoreDataClass.h:
--------------------------------------------------------------------------------
1 | //
2 | // Tag+CoreDataClass.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/7/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface Tag : NSManagedObject
15 |
16 | @end
17 |
18 | NS_ASSUME_NONNULL_END
19 |
20 | #import "Tag+CoreDataProperties.h"
21 |
--------------------------------------------------------------------------------
/EHenTaiViewer/Tag+CoreDataClass.m:
--------------------------------------------------------------------------------
1 | //
2 | // Tag+CoreDataClass.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/7/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "Tag+CoreDataClass.h"
10 |
11 | @implementation Tag
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EHenTaiViewer/Tag+CoreDataProperties.h:
--------------------------------------------------------------------------------
1 | //
2 | // Tag+CoreDataProperties.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/7/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "Tag+CoreDataClass.h"
10 |
11 |
12 | NS_ASSUME_NONNULL_BEGIN
13 |
14 | @interface Tag (CoreDataProperties)
15 |
16 | + (NSFetchRequest *)fetchRequest;
17 |
18 | @property (nullable, nonatomic, copy) NSString *cname;
19 | @property (nullable, nonatomic, copy) NSString *info;
20 | @property (nullable, nonatomic, copy) NSString *name;
21 |
22 | @end
23 |
24 | NS_ASSUME_NONNULL_END
25 |
--------------------------------------------------------------------------------
/EHenTaiViewer/Tag+CoreDataProperties.m:
--------------------------------------------------------------------------------
1 | //
2 | // Tag+CoreDataProperties.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/7/31.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "Tag+CoreDataProperties.h"
10 |
11 | @implementation Tag (CoreDataProperties)
12 |
13 | + (NSFetchRequest *)fetchRequest {
14 | return [[NSFetchRequest alloc] initWithEntityName:@"Tag"];
15 | }
16 |
17 | @dynamic cname;
18 | @dynamic info;
19 | @dynamic name;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/EHenTaiViewer/UIDevice+QJDevice.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIDevice+QJDevice.h
3 | // EHenTaiViewer
4 | //
5 | // Created by zedmacbook on 2018/6/26.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | // https://www.jianshu.com/p/d6cb54d2eaa1
10 |
11 | #import
12 |
13 | @interface UIDevice (QJDevice)
14 |
15 | /**
16 | * @interfaceOrientation 输入要强制转屏的方向
17 | */
18 | + (void)switchNewOrientation:(UIInterfaceOrientation)interfaceOrientation;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/EHenTaiViewer/UIDevice+QJDevice.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIDevice+QJDevice.m
3 | // EHenTaiViewer
4 | //
5 | // Created by zedmacbook on 2018/6/26.
6 | // Copyright © 2018年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "UIDevice+QJDevice.h"
10 |
11 | @implementation UIDevice (QJDevice)
12 |
13 | + (void)switchNewOrientation:(UIInterfaceOrientation)interfaceOrientation {
14 | NSNumber *resetOrientationTarget = [NSNumber numberWithInt:UIInterfaceOrientationUnknown];
15 | [[UIDevice currentDevice] setValue:resetOrientationTarget forKey:@"orientation"];
16 | NSNumber *orientationTarget = [NSNumber numberWithInt:interfaceOrientation];
17 | [[UIDevice currentDevice] setValue:orientationTarget forKey:@"orientation"];
18 | }
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/EHenTaiViewer/UIImage+TBCityIconFont.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import "TBCityIconInfo.h"
3 |
4 | @interface UIImage (TBCityIconFont)
5 |
6 | + (UIImage *)iconWithInfo:(TBCityIconInfo *)info;
7 |
8 | @end
--------------------------------------------------------------------------------
/EHenTaiViewer/UIImage+TBCityIconFont.m:
--------------------------------------------------------------------------------
1 | #import "UIImage+TBCityIconFont.h"
2 | #import "TBCityIconFont.h"
3 | #import
4 |
5 | @implementation UIImage (TBCityIconFont)
6 |
7 | + (UIImage *)iconWithInfo:(TBCityIconInfo *)info {
8 | CGFloat size = info.size;
9 | CGFloat scale = [UIScreen mainScreen].scale;
10 | CGFloat realSize = size * scale;
11 | UIFont *font = [TBCityIconFont fontWithSize:realSize];
12 | UIGraphicsBeginImageContext(CGSizeMake(realSize, realSize));
13 | CGContextRef context = UIGraphicsGetCurrentContext();
14 |
15 | if ([info.text respondsToSelector:@selector(drawAtPoint:withAttributes:)]) {
16 | /**
17 | * 如果这里抛出异常,请打开断点列表,右击All Exceptions -> Edit Breakpoint -> All修改为Objective-C
18 | * See: http://stackoverflow.com/questions/1163981/how-to-add-a-breakpoint-to-objc-exception-throw/14767076#14767076
19 | */
20 | [info.text drawAtPoint:CGPointZero withAttributes:@{NSFontAttributeName:font, NSForegroundColorAttributeName: info.color}];
21 | } else {
22 |
23 | #pragma clang diagnostic push
24 | #pragma clang diagnostic ignored "-Wdeprecated-declarations"
25 | CGContextSetFillColorWithColor(context, info.color.CGColor);
26 | [info.text drawAtPoint:CGPointMake(0, 0) withFont:font];
27 | #pragma clang pop
28 | }
29 |
30 | UIImage *image = [UIImage imageWithCGImage:UIGraphicsGetImageFromCurrentImageContext().CGImage scale:scale orientation:UIImageOrientationUp];
31 | UIGraphicsEndImageContext();
32 |
33 | return image;
34 | }
35 |
36 | @end
37 |
--------------------------------------------------------------------------------
/EHenTaiViewer/UITableViewCell+QJAddition.h:
--------------------------------------------------------------------------------
1 | //
2 | // UITableViewCell+QJAddition.h
3 | // bangumitv
4 | //
5 | // Created by zedmacbook on 2018/11/5.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NS_ASSUME_NONNULL_BEGIN
12 |
13 | @interface UITableViewCell (QJAddition)
14 |
15 | /// 添加圆角设置
16 | - (void)addSectionCornerRadiusWithIndexPath:(NSIndexPath *)indexPath tableView:(UITableView *)tableView;
17 |
18 | @end
19 |
20 | NS_ASSUME_NONNULL_END
21 |
--------------------------------------------------------------------------------
/EHenTaiViewer/UITextView+Addition.h:
--------------------------------------------------------------------------------
1 | //
2 | // UITextView+Addition.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/26.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UITextView (Addition)
12 |
13 | - (BOOL)checkContentLength;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EHenTaiViewer/UITextView+Addition.m:
--------------------------------------------------------------------------------
1 | //
2 | // UITextView+Addition.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/11/26.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "UITextView+Addition.h"
10 |
11 | @implementation UITextView (Addition)
12 |
13 | - (BOOL)checkContentLength {
14 | CGFloat contentHeight = [self.text StringHeightWithFontSize:self.font maxWidth:self.contentSize.width];
15 | return contentHeight > self.contentSize.height;
16 | }
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EHenTaiViewer/UIView+Layer.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Layer.h
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/26.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 |
9 | /// 添加圆角样式
10 |
11 | #import
12 |
13 | IB_DESIGNABLE
14 | @interface UIView (Layer)
15 |
16 | /// 圆角
17 | @property (assign, nonatomic) IBInspectable CGFloat cornerRadius;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/EHenTaiViewer/UIView+Layer.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Layer.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2018/8/26.
6 | // Copyright © 2018 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import "UIView+Layer.h"
10 | #import
11 |
12 | static char *CornerRadiusKey = "CornerRadiusKey";
13 |
14 | @implementation UIView (Layer)
15 |
16 | #pragma mark - Setter
17 | - (void)setCornerRadius:(CGFloat)cornerRadius {
18 | objc_setAssociatedObject(self, CornerRadiusKey, @(cornerRadius), OBJC_ASSOCIATION_COPY_NONATOMIC);
19 | self.layer.cornerRadius = cornerRadius;
20 | self.layer.masksToBounds = YES;
21 | }
22 |
23 | #pragma mark - Getter
24 | - (CGFloat)cornerRadius {
25 | return [objc_getAssociatedObject(self, CornerRadiusKey) floatValue];
26 | }
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/EHenTaiViewer/XHStarRateView/XHStarRateView.h:
--------------------------------------------------------------------------------
1 | //
2 | // XHStarRateView.h
3 | // XHStarRateView
4 | //
5 | // Created by 江欣华 on 16/4/1.
6 | // Copyright © 2016年 jxh. All rights reserved.
7 | //
8 |
9 | #import
10 | @class XHStarRateView;
11 |
12 | typedef void(^finishBlock)(CGFloat currentScore);
13 |
14 | typedef NS_ENUM(NSInteger, RateStyle)
15 | {
16 | WholeStar = 0, //只能整星评论
17 | HalfStar = 1, //允许半星评论
18 | IncompleteStar = 2 //允许不完整星评论
19 | };
20 |
21 | @protocol XHStarRateViewDelegate
22 |
23 | -(void)starRateView:(XHStarRateView *)starRateView currentScore:(CGFloat)currentScore;
24 |
25 | @end
26 |
27 | @interface XHStarRateView : UIView
28 |
29 | @property (nonatomic,assign)BOOL isAnimation; //是否动画显示,默认NO
30 | @property (nonatomic,assign)RateStyle rateStyle; //评分样式 默认是WholeStar
31 | @property (nonatomic,assign)CGFloat currentScore; // 当前评分:0-5 默认0
32 | @property (nonatomic, weak) iddelegate;
33 |
34 |
35 | -(instancetype)initWithFrame:(CGRect)frame;
36 | -(instancetype)initWithFrame:(CGRect)frame numberOfStars:(NSInteger)numberOfStars rateStyle:(RateStyle)rateStyle isAnination:(BOOL)isAnimation delegate:(id)delegate;
37 |
38 |
39 | -(instancetype)initWithFrame:(CGRect)frame finish:(finishBlock)finish;
40 | -(instancetype)initWithFrame:(CGRect)frame numberOfStars:(NSInteger)numberOfStars rateStyle:(RateStyle)rateStyle isAnination:(BOOL)isAnimation finish:(finishBlock)finish;
41 |
42 | @end
43 |
--------------------------------------------------------------------------------
/EHenTaiViewer/XPathQuery.h:
--------------------------------------------------------------------------------
1 | //
2 | // XPathQuery.h
3 | // FuelFinder
4 | //
5 | // Created by Matt Gallagher on 4/08/08.
6 | // Copyright 2008 __MyCompanyName__. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | NSArray *PerformHTMLXPathQuery(NSData *document, NSString *query);
12 | NSArray *PerformHTMLXPathQueryWithEncoding(NSData *document, NSString *query,NSString *encoding);
13 | NSArray *PerformXMLXPathQuery(NSData *document, NSString *query);
14 | NSArray *PerformXMLXPathQueryWithEncoding(NSData *document, NSString *query,NSString *encoding);
15 |
--------------------------------------------------------------------------------
/EHenTaiViewer/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/iconfont.ttf
--------------------------------------------------------------------------------
/EHenTaiViewer/launch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/launch.png
--------------------------------------------------------------------------------
/EHenTaiViewer/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kayanouriko/E-HentaiViewer/3f954c3e1892a8eca1e2b0a2d3ac6049864abedb/EHenTaiViewer/loading.gif
--------------------------------------------------------------------------------
/EHenTaiViewer/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // EHenTaiViewer
4 | //
5 | // Created by QinJ on 2017/5/17.
6 | // Copyright © 2017年 kayanouriko. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "AppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 kayanouriko
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 | source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
2 | project 'EHenTaiViewer.xcodeproj'
3 |
4 | # Uncomment the next line to define a global platform for your project
5 | platform :ios, '8.0'
6 | inhibit_all_warnings!
7 |
8 | target 'EHenTaiViewer' do
9 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
10 | use_frameworks!
11 | # Pods for EHenTaiViewer
12 | pod 'YYWebImage'
13 | pod 'MagicalRecord'
14 | # 自动布局
15 | pod 'Masonry'
16 | end
17 |
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - MagicalRecord (2.3.2):
3 | - MagicalRecord/Core (= 2.3.2)
4 | - MagicalRecord/Core (2.3.2)
5 | - Masonry (1.1.0)
6 | - YYCache (1.0.4)
7 | - YYImage (1.0.4):
8 | - YYImage/Core (= 1.0.4)
9 | - YYImage/Core (1.0.4)
10 | - YYWebImage (1.0.5):
11 | - YYCache
12 | - YYImage
13 |
14 | DEPENDENCIES:
15 | - MagicalRecord
16 | - Masonry
17 | - YYWebImage
18 |
19 | SPEC REPOS:
20 | https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git:
21 | - MagicalRecord
22 | - Masonry
23 | - YYCache
24 | - YYImage
25 | - YYWebImage
26 |
27 | SPEC CHECKSUMS:
28 | MagicalRecord: 53bed74b4323b930992a725be713e53b37d19755
29 | Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
30 | YYCache: 8105b6638f5e849296c71f331ff83891a4942952
31 | YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
32 | YYWebImage: 5f7f36aee2ae293f016d418c7d6ba05c4863e928
33 |
34 | PODFILE CHECKSUM: bda02e66b2dd6f925682f6738ab778c8b849a5b2
35 |
36 | COCOAPODS: 1.6.1
37 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2010-2015, Magical Panda Software, LLC
2 |
3 | Permission is hereby granted, free of charge, to any person
4 | obtaining a copy of this software and associated documentation
5 | files (the "Software"), to deal in the Software without
6 | restriction, including without limitation the rights to use,
7 | copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the
9 | Software is furnished to do so, subject to the following
10 | conditions:
11 |
12 | * Link to the MagicalRecord Repository at https://github.com/magicalpanda/MagicalRecord in the credits section of your application
13 |
14 | The above copyright notice and this permission notice shall be
15 | included in all copies or substantial portions of the Software.
16 |
17 | This software license is in accordance with the standard MIT License.
18 |
19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
21 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
23 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 | OTHER DEALINGS IN THE SOFTWARE.
27 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h:
--------------------------------------------------------------------------------
1 | //
2 | // MagicalImportFunctions.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 3/7/12.
6 | // Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | NSDate * __MR_nonnull MR_adjustDateForDST(NSDate *__MR_nonnull date);
13 | NSDate * __MR_nonnull MR_dateFromString(NSString *__MR_nonnull value, NSString *__MR_nonnull format);
14 | NSDate * __MR_nonnull MR_dateFromNumber(NSNumber *__MR_nonnull value, BOOL milliseconds);
15 | NSNumber * __MR_nonnull MR_numberFromString(NSString *__MR_nonnull value);
16 | NSString * __MR_nonnull MR_attributeNameFromString(NSString *__MR_nonnull value);
17 | NSString * __MR_nonnull MR_primaryKeyNameFromString(NSString *__MR_nonnull value);
18 |
19 | #if TARGET_OS_IPHONE
20 | #import
21 | UIColor * __MR_nullable MR_colorFromString(NSString *__MR_nonnull serializedColor);
22 | #else
23 | #import
24 | NSColor * __MR_nullable MR_colorFromString(NSString *__MR_nonnull serializedColor);
25 | #endif
26 |
27 | NSInteger * __MR_nullable MR_newColorComponentsFromString(NSString *__MR_nonnull serializedColor);
28 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSAttributeDescription+MagicalDataImport.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 9/4/11.
6 | // Copyright 2011 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface NSAttributeDescription (MagicalRecord_DataImport)
13 |
14 | - (MR_nullable NSString *) MR_primaryKey;
15 | - (MR_nullable id) MR_valueForKeyPath:(MR_nonnull NSString *)keyPath fromObjectData:(MR_nonnull id)objectData;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSEntityDescription+MagicalDataImport.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 9/5/11.
6 | // Copyright 2011 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface NSEntityDescription (MagicalRecord_DataImport)
13 |
14 | - (MR_nullable NSAttributeDescription *) MR_primaryAttributeToRelateBy;
15 | - (MR_nonnull NSManagedObject *) MR_createInstanceInContext:(MR_nonnull NSManagedObjectContext *)context;
16 |
17 | /**
18 | * Safely returns an attribute description for the given name, otherwise returns nil. In certain circumstances, the keys of the dictionary returned by `attributesByName` are not standard NSStrings and won't match using object subscripting or standard `objectForKey:` lookups.
19 | *
20 | * There may be performance implications to using this method if your entity has hundreds or thousands of attributes.
21 | *
22 | * @param name Name of the attribute description in the `attributesByName` dictionary on this instance
23 | *
24 | * @return The attribute description for the given name, otherwise nil
25 | */
26 | - (MR_nullable NSAttributeDescription *) MR_attributeDescriptionForName:(MR_nonnull NSString *)name;
27 |
28 | @end
29 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSNumber+MagicalDataImport.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 9/4/11.
6 | // Copyright 2011 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | #import
12 |
13 | @interface NSNumber (MagicalRecord_DataImport)
14 |
15 | - (MR_nullable NSString *)MR_lookupKeyForAttribute:(MR_nonnull NSAttributeDescription *)attributeInfo;
16 | - (MR_nonnull id)MR_relatedValueForRelationship:(MR_nonnull NSRelationshipDescription *)relationshipInfo;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSNumber+MagicalDataImport.m
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 9/4/11.
6 | // Copyright 2011 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import "NSNumber+MagicalDataImport.h"
10 |
11 | @implementation NSNumber (MagicalRecord_DataImport)
12 |
13 | - (NSString *)MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo
14 | {
15 | return nil;
16 | }
17 |
18 | - (id)MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo
19 | {
20 | return self;
21 | }
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSDictionary+MagicalDataImport.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 9/4/11.
6 | // Copyright 2011 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | #import
12 |
13 | @interface NSObject (MagicalRecord_DataImport)
14 |
15 | - (MR_nullable NSString *) MR_lookupKeyForAttribute:(MR_nonnull NSAttributeDescription *)attributeInfo;
16 | - (MR_nullable id) MR_valueForAttribute:(MR_nonnull NSAttributeDescription *)attributeInfo;
17 |
18 | - (MR_nullable NSString *) MR_lookupKeyForRelationship:(MR_nonnull NSRelationshipDescription *)relationshipInfo;
19 | - (MR_nullable id) MR_relatedValueForRelationship:(MR_nonnull NSRelationshipDescription *)relationshipInfo;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSRelationshipDescription+MagicalDataImport.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 9/4/11.
6 | // Copyright 2011 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface NSRelationshipDescription (MagicalRecord_DataImport)
13 |
14 | - (MR_nonnull NSString *) MR_primaryKey;
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSRelationshipDescription+MagicalDataImport.m
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 9/4/11.
6 | // Copyright 2011 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import "NSRelationshipDescription+MagicalDataImport.h"
10 | #import "NSManagedObject+MagicalDataImport.h"
11 | #import "MagicalImportFunctions.h"
12 |
13 | @implementation NSRelationshipDescription (MagicalRecord_DataImport)
14 |
15 | - (NSString *) MR_primaryKey;
16 | {
17 | NSString *primaryKeyName = [[self userInfo] objectForKey:kMagicalRecordImportRelationshipLinkedByKey] ?:
18 | MR_primaryKeyNameFromString([[self destinationEntity] name]);
19 |
20 | return primaryKeyName;
21 | }
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+MagicalRecord_MagicalDataImport.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 12/10/11.
6 | // Copyright (c) 2011 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | #import
12 |
13 | @interface NSString (MagicalRecord_DataImport)
14 |
15 | - (MR_nonnull NSString *) MR_capitalizedFirstCharacterString;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+MagicalRecord_MagicalDataImport.m
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 12/10/11.
6 | // Copyright (c) 2011 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import "NSString+MagicalDataImport.h"
10 |
11 |
12 | @implementation NSString (MagicalRecord_DataImport)
13 |
14 | - (NSString *) MR_capitalizedFirstCharacterString;
15 | {
16 | if ([self length] > 0)
17 | {
18 | NSString *firstChar = [[self substringToIndex:1] capitalizedString];
19 | return [firstChar stringByAppendingString:[self substringFromIndex:1]];
20 | }
21 | return self;
22 | }
23 |
24 | - (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo
25 | {
26 | return self;
27 | }
28 |
29 | - (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo
30 | {
31 | return nil;
32 | }
33 |
34 | @end
35 |
36 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalChainSave.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSManagedObjectContext+MagicalChainSave.m
3 | // Magical Record
4 | //
5 | // Created by Lee on 8/27/14.
6 | // Copyright (c) 2014 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import "NSManagedObjectContext+MagicalChainSave.h"
10 | #import "NSManagedObjectContext+MagicalRecord.h"
11 |
12 | @implementation NSManagedObjectContext (MagicalRecord_ChainSave)
13 | - (void)MR_saveWithBlock:(void (^)(NSManagedObjectContext *localContext))block;
14 | {
15 | [self MR_saveWithBlock:block completion:nil];
16 | }
17 |
18 | - (void)MR_saveWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion;
19 | {
20 | NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:self];
21 |
22 | [localContext performBlock:^{
23 | [localContext MR_setWorkingName:NSStringFromSelector(_cmd)];
24 |
25 | if (block) {
26 | block(localContext);
27 | }
28 |
29 | [localContext MR_saveWithOptions:MRSaveParentContexts completion:completion];
30 | }];
31 | }
32 |
33 | #pragma mark - Synchronous saving
34 |
35 | - (void)MR_saveWithBlockAndWait:(void (^)(NSManagedObjectContext *localContext))block;
36 | {
37 | NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:self];
38 |
39 | [localContext performBlockAndWait:^{
40 | [localContext MR_setWorkingName:NSStringFromSelector(_cmd)];
41 |
42 | if (block) {
43 | block(localContext);
44 | }
45 |
46 | [localContext MR_saveWithOptions:MRSaveParentContexts|MRSaveSynchronously completion:nil];
47 | }];
48 | }
49 |
50 | @end
51 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSManagedObjectContext+MagicalThreading.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 3/9/12.
6 | // Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface NSManagedObjectContext (MagicalThreading)
13 |
14 | + (MR_nonnull NSManagedObjectContext *) MR_contextForCurrentThread __attribute((deprecated("This method will be removed in MagicalRecord 3.0")));
15 | + (void) MR_clearNonMainThreadContextsCache __attribute((deprecated("This method will be removed in MagicalRecord 3.0")));
16 | + (void) MR_resetContextForCurrentThread __attribute((deprecated("This method will be removed in MagicalRecord 3.0")));
17 | + (void) MR_clearContextForCurrentThread __attribute((deprecated("This method will be removed in MagicalRecord 3.0")));
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSManagedObjectModel+MagicalRecord.h
3 | //
4 | // Created by Saul Mora on 3/11/10.
5 | // Copyright 2010 Magical Panda Software, LLC All rights reserved.
6 | //
7 |
8 | #import
9 | #import
10 |
11 | @interface NSManagedObjectModel (MagicalRecord)
12 |
13 | + (MR_nullable NSManagedObjectModel *) MR_defaultManagedObjectModel;
14 |
15 | + (void) MR_setDefaultManagedObjectModel:(MR_nullable NSManagedObjectModel *)newDefaultModel;
16 |
17 | + (MR_nullable NSManagedObjectModel *) MR_mergedObjectModelFromMainBundle;
18 | + (MR_nullable NSManagedObjectModel *) MR_newManagedObjectModelNamed:(MR_nonnull NSString *)modelFileName NS_RETURNS_RETAINED;
19 | + (MR_nullable NSManagedObjectModel *) MR_managedObjectModelNamed:(MR_nonnull NSString *)modelFileName;
20 | + (MR_nullable NSManagedObjectModel *) MR_newModelNamed:(MR_nonnull NSString *) modelName inBundleNamed:(MR_nonnull NSString *) bundleName NS_RETURNS_RETAINED;
21 | + (MR_nullable NSManagedObjectModel *) MR_newModelNamed:(MR_nonnull NSString *) modelName inBundle:(MR_nonnull NSBundle*) bundle NS_RETURNS_RETAINED;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSPersistentStore+MagicalRecord.h
3 | //
4 | // Created by Saul Mora on 3/11/10.
5 | // Copyright 2010 Magical Panda Software, LLC All rights reserved.
6 | //
7 |
8 | #import
9 | #import
10 | #import "MagicalRecordDeprecationMacros.h"
11 |
12 | // option to autodelete store if it already exists
13 |
14 | OBJC_EXPORT NSString * __MR_nonnull const kMagicalRecordDefaultStoreFileName;
15 |
16 |
17 | @interface NSPersistentStore (MagicalRecord)
18 |
19 | + (MR_nonnull NSURL *) MR_defaultLocalStoreUrl;
20 |
21 | + (MR_nullable NSPersistentStore *) MR_defaultPersistentStore;
22 | + (void) MR_setDefaultPersistentStore:(MR_nullable NSPersistentStore *) store;
23 |
24 | + (MR_nullable NSURL *) MR_urlForStoreName:(MR_nonnull NSString *)storeFileName;
25 | + (MR_nullable NSURL *) MR_cloudURLForUbiquitousContainer:(MR_nonnull NSString *)bucketName;
26 | + (MR_nullable NSURL *) MR_cloudURLForUbiqutiousContainer:(MR_nonnull NSString *)bucketName MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE("4.0", "MR_cloudURLForUbiquitousContainer:");
27 |
28 | @end
29 |
30 |
31 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.h:
--------------------------------------------------------------------------------
1 | //
2 | // MagicalRecord+ErrorHandling.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 3/6/12.
6 | // Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface MagicalRecord (ErrorHandling)
13 |
14 | + (void) handleErrors:(MR_nonnull NSError *)error;
15 | - (void) handleErrors:(MR_nonnull NSError *)error;
16 |
17 | + (void) setErrorHandlerTarget:(MR_nullable id)target action:(MR_nonnull SEL)action;
18 | + (MR_nonnull SEL) errorHandlerAction;
19 | + (MR_nullable id) errorHandlerTarget;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.h:
--------------------------------------------------------------------------------
1 | //
2 | // MagicalRecord+Setup.h
3 | // Magical Record
4 | //
5 | // Created by Saul Mora on 3/7/12.
6 | // Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface MagicalRecord (Setup)
13 |
14 | + (void) setupCoreDataStack;
15 | + (void) setupCoreDataStackWithInMemoryStore;
16 | + (void) setupAutoMigratingCoreDataStack;
17 |
18 | + (void) setupCoreDataStackWithStoreNamed:(MR_nonnull NSString *)storeName;
19 | + (void) setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(MR_nonnull NSString *)storeName;
20 |
21 | + (void) setupCoreDataStackWithStoreAtURL:(MR_nonnull NSURL *)storeURL;
22 | + (void) setupCoreDataStackWithAutoMigratingSqliteStoreAtURL:(MR_nonnull NSURL *)storeURL;
23 |
24 |
25 | @end
26 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandMethods.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) 2015 Magical Panda Software LLC. All rights reserved.
3 |
4 | #import
5 |
6 | @interface MagicalRecord (ShorthandMethods)
7 |
8 | + (void)enableShorthandMethods;
9 |
10 | @end
11 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordDeprecationMacros.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Tony Arnold on 10/04/2014.
3 | // Copyright (c) 2014 Magical Panda Software LLC. All rights reserved.
4 | //
5 |
6 | #define MR_DEPRECATED_WILL_BE_REMOVED_IN(VERSION) __attribute__((deprecated("This method has been deprecated and will be removed in MagicalRecord " VERSION ".")))
7 | #define MR_DEPRECATED_WILL_BE_REMOVED_IN_PLEASE_USE(VERSION, METHOD) __attribute__((deprecated("This method has been deprecated and will be removed in MagicalRecord " VERSION ". Please use `" METHOD "` instead.")))
8 |
--------------------------------------------------------------------------------
/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordXcode7CompatibilityMacros.h:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright © 2015 Magical Panda Software LLC. All rights reserved.
3 | //
4 | // The following preprocessor macros can be used to adopt the new nullability annotations and generics
5 | // features available in Xcode 7, while maintaining backwards compatibility with earlier versions of
6 | // Xcode that do not support these features.
7 | //
8 | // Originally taken from https://gist.github.com/smileyborg/d513754bc1cf41678054
9 |
10 | #ifndef MagicalRecordXcode7CompatibilityMacros_h
11 | #define MagicalRecordXcode7CompatibilityMacros_h
12 |
13 | #if __has_feature(nullability)
14 | #define MR_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
15 | #define MR_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
16 | #define MR_nullable nullable
17 | #define MR_nonnull nonnull
18 | #define __MR_nullable __nullable
19 | #define __MR_nonnull __nonnull
20 | #else
21 | #define MR_ASSUME_NONNULL_BEGIN
22 | #define MR_ASSUME_NONNULL_END
23 | #define MR_nullable
24 | #define MR_nonnull
25 | #define __MR_nullable
26 | #define __MR_nonnull
27 | #endif
28 |
29 | #if __has_feature(objc_generics)
30 | #define MR_GENERIC(class, ...) class<__VA_ARGS__>
31 | #define MR_GENERIC_TYPE(type) type
32 | #define __MR_kindof(class) __kindof class
33 | #else
34 | #define MR_GENERIC(class, ...) class
35 | #define MR_GENERIC_TYPE(type) id
36 | #define __MR_kindof(class) id
37 | #endif
38 |
39 | #define MR_NSArrayOfNSManagedObjects MR_GENERIC(NSArray, __MR_kindof(NSManagedObject) *) *
40 |
41 | #endif /* MagicalRecordXcode7CompatibilityMacros_h */
42 |
--------------------------------------------------------------------------------
/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - MagicalRecord (2.3.2):
3 | - MagicalRecord/Core (= 2.3.2)
4 | - MagicalRecord/Core (2.3.2)
5 | - Masonry (1.1.0)
6 | - YYCache (1.0.4)
7 | - YYImage (1.0.4):
8 | - YYImage/Core (= 1.0.4)
9 | - YYImage/Core (1.0.4)
10 | - YYWebImage (1.0.5):
11 | - YYCache
12 | - YYImage
13 |
14 | DEPENDENCIES:
15 | - MagicalRecord
16 | - Masonry
17 | - YYWebImage
18 |
19 | SPEC REPOS:
20 | https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git:
21 | - MagicalRecord
22 | - Masonry
23 | - YYCache
24 | - YYImage
25 | - YYWebImage
26 |
27 | SPEC CHECKSUMS:
28 | MagicalRecord: 53bed74b4323b930992a725be713e53b37d19755
29 | Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
30 | YYCache: 8105b6638f5e849296c71f331ff83891a4942952
31 | YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
32 | YYWebImage: 5f7f36aee2ae293f016d418c7d6ba05c4863e928
33 |
34 | PODFILE CHECKSUM: bda02e66b2dd6f925682f6738ab778c8b849a5b2
35 |
36 | COCOAPODS: 1.6.1
37 |
--------------------------------------------------------------------------------
/Pods/Masonry/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Masonry/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 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MagicalRecord/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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 | 2.3.2
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MagicalRecord/MagicalRecord-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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 | 2.3.2
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MagicalRecord/MagicalRecord-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_MagicalRecord : NSObject
3 | @end
4 | @implementation PodsDummy_MagicalRecord
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MagicalRecord/MagicalRecord-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 | #import
14 | #import
15 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MagicalRecord/MagicalRecord.modulemap:
--------------------------------------------------------------------------------
1 | framework module MagicalRecord {
2 | umbrella header "MagicalRecord-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MagicalRecord/MagicalRecord.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MagicalRecord
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_LDFLAGS = $(inherited) -framework "CoreData"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MagicalRecord
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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.1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Masonry : NSObject
3 | @end
4 | @implementation PodsDummy_Masonry
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry-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/Masonry/Masonry-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "MASCompositeConstraint.h"
14 | #import "MASConstraint+Private.h"
15 | #import "MASConstraint.h"
16 | #import "MASConstraintMaker.h"
17 | #import "MASLayoutConstraint.h"
18 | #import "Masonry.h"
19 | #import "MASUtilities.h"
20 | #import "MASViewAttribute.h"
21 | #import "MASViewConstraint.h"
22 | #import "NSArray+MASAdditions.h"
23 | #import "NSArray+MASShorthandAdditions.h"
24 | #import "NSLayoutConstraint+MASDebugAdditions.h"
25 | #import "View+MASAdditions.h"
26 | #import "View+MASShorthandAdditions.h"
27 | #import "ViewController+MASAdditions.h"
28 |
29 | FOUNDATION_EXPORT double MasonryVersionNumber;
30 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[];
31 |
32 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry.modulemap:
--------------------------------------------------------------------------------
1 | framework module Masonry {
2 | umbrella header "Masonry-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Masonry
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-EHenTaiViewer/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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-EHenTaiViewer/Pods-EHenTaiViewer-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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-EHenTaiViewer/Pods-EHenTaiViewer-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_EHenTaiViewer : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_EHenTaiViewer
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-EHenTaiViewer/Pods-EHenTaiViewer-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_EHenTaiViewerVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_EHenTaiViewerVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-EHenTaiViewer/Pods-EHenTaiViewer.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_EHenTaiViewer {
2 | umbrella header "Pods-EHenTaiViewer-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYCache/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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.4
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYCache/YYCache-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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.4
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYCache/YYCache-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_YYCache : NSObject
3 | @end
4 | @implementation PodsDummy_YYCache
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYCache/YYCache-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/YYCache/YYCache-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "YYCache.h"
14 | #import "YYDiskCache.h"
15 | #import "YYKVStorage.h"
16 | #import "YYMemoryCache.h"
17 |
18 | FOUNDATION_EXPORT double YYCacheVersionNumber;
19 | FOUNDATION_EXPORT const unsigned char YYCacheVersionString[];
20 |
21 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYCache/YYCache.modulemap:
--------------------------------------------------------------------------------
1 | framework module YYCache {
2 | umbrella header "YYCache-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYCache/YYCache.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYCache
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CoreFoundation" -framework "QuartzCore" -framework "UIKit"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYCache
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYImage/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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.4
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYImage/YYImage-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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.4
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYImage/YYImage-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_YYImage : NSObject
3 | @end
4 | @implementation PodsDummy_YYImage
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYImage/YYImage-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/YYImage/YYImage-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "YYAnimatedImageView.h"
14 | #import "YYFrameImage.h"
15 | #import "YYImage.h"
16 | #import "YYImageCoder.h"
17 | #import "YYSpriteSheetImage.h"
18 |
19 | FOUNDATION_EXPORT double YYImageVersionNumber;
20 | FOUNDATION_EXPORT const unsigned char YYImageVersionString[];
21 |
22 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYImage/YYImage.modulemap:
--------------------------------------------------------------------------------
1 | framework module YYImage {
2 | umbrella header "YYImage-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYImage/YYImage.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYImage
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_LDFLAGS = $(inherited) -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "UIKit"
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYImage
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYWebImage/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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.5
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYWebImage/YYWebImage-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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.5
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYWebImage/YYWebImage-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_YYWebImage : NSObject
3 | @end
4 | @implementation PodsDummy_YYWebImage
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYWebImage/YYWebImage-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/YYWebImage/YYWebImage-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "YYImageCache.h"
14 | #import "YYWebImage.h"
15 | #import "YYWebImageManager.h"
16 | #import "YYWebImageOperation.h"
17 | #import "CALayer+YYWebImage.h"
18 | #import "MKAnnotationView+YYWebImage.h"
19 | #import "UIButton+YYWebImage.h"
20 | #import "UIImage+YYWebImage.h"
21 | #import "UIImageView+YYWebImage.h"
22 |
23 | FOUNDATION_EXPORT double YYWebImageVersionNumber;
24 | FOUNDATION_EXPORT const unsigned char YYWebImageVersionString[];
25 |
26 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYWebImage/YYWebImage.modulemap:
--------------------------------------------------------------------------------
1 | framework module YYWebImage {
2 | umbrella header "YYWebImage-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/YYWebImage/YYWebImage.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYWebImage
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/YYCache" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "UIKit"
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_ROOT = ${SRCROOT}
8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYWebImage
9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
10 | SKIP_INSTALL = YES
11 |
--------------------------------------------------------------------------------
/Pods/YYCache/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ibireme
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 |
23 |
--------------------------------------------------------------------------------
/Pods/YYImage/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ibireme
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 |
23 |
--------------------------------------------------------------------------------
/Pods/YYWebImage/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ibireme
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 |
23 |
--------------------------------------------------------------------------------
/docs/issue_template.md:
--------------------------------------------------------------------------------
1 | #### 机型 + 系统
2 | 例: iphone 7 plus / iOS10.2.6
3 |
4 | #### 运行网络环境
5 | 例: wifi + 有VPN
6 |
7 | #### 具体描述
8 | 例: 无法获取画廊列表
9 |
10 | #### 截图
11 | 例: 
12 |
--------------------------------------------------------------------------------