├── .gitignore ├── LICENSE ├── README.md ├── ScreenRotator.podspec ├── ScreenRotator ├── JPScreenRotator.h ├── JPScreenRotator.m ├── ScreenRotator.swift └── ScreenRotatorState.swift └── ScreenRotatorDemo ├── Podfile ├── Podfile.lock ├── Pods ├── FunnyButton │ ├── FunnyButton │ │ └── Classes │ │ │ ├── FunnyAction.swift │ │ │ ├── FunnyButton.API.swift │ │ │ ├── FunnyButton.Window.swift │ │ │ └── FunnyButton.swift │ ├── LICENSE │ └── README.md ├── Local Podspecs │ └── ScreenRotator.podspec.json ├── LookinServer │ ├── LICENSE │ ├── README.md │ └── Src │ │ ├── Base │ │ ├── LookinIvarTrace.h │ │ └── LookinIvarTrace.m │ │ └── Main │ │ ├── Server │ │ ├── Category │ │ │ ├── CALayer+LookinServer.h │ │ │ ├── CALayer+LookinServer.m │ │ │ ├── NSObject+LookinServer.h │ │ │ ├── NSObject+LookinServer.m │ │ │ ├── UIBlurEffect+LookinServer.h │ │ │ ├── UIBlurEffect+LookinServer.m │ │ │ ├── UIColor+LookinServer.h │ │ │ ├── UIColor+LookinServer.m │ │ │ ├── UIImage+LookinServer.h │ │ │ ├── UIImage+LookinServer.m │ │ │ ├── UIImageView+LookinServer.h │ │ │ ├── UIImageView+LookinServer.m │ │ │ ├── UILabel+LookinServer.h │ │ │ ├── UILabel+LookinServer.m │ │ │ ├── UITableView+LookinServer.h │ │ │ ├── UITableView+LookinServer.m │ │ │ ├── UITextField+LookinServer.h │ │ │ ├── UITextField+LookinServer.m │ │ │ ├── UITextView+LookinServer.h │ │ │ ├── UITextView+LookinServer.m │ │ │ ├── UIView+LookinServer.h │ │ │ ├── UIView+LookinServer.m │ │ │ ├── UIViewController+LookinServer.h │ │ │ ├── UIViewController+LookinServer.m │ │ │ ├── UIVisualEffectView+LookinServer.h │ │ │ └── UIVisualEffectView+LookinServer.m │ │ ├── Connection │ │ │ ├── LKS_ConnectionManager.h │ │ │ ├── LKS_ConnectionManager.m │ │ │ ├── LKS_RequestHandler.h │ │ │ ├── LKS_RequestHandler.m │ │ │ └── RequestHandler │ │ │ │ ├── LKS_AttrModificationPatchHandler.h │ │ │ │ ├── LKS_AttrModificationPatchHandler.m │ │ │ │ ├── LKS_CustomAttrModificationHandler.h │ │ │ │ ├── LKS_CustomAttrModificationHandler.m │ │ │ │ ├── LKS_HierarchyDetailsHandler.h │ │ │ │ ├── LKS_HierarchyDetailsHandler.m │ │ │ │ ├── LKS_InbuiltAttrModificationHandler.h │ │ │ │ └── LKS_InbuiltAttrModificationHandler.m │ │ ├── LookinServer.h │ │ └── Others │ │ │ ├── LKSConfigManager.h │ │ │ ├── LKSConfigManager.m │ │ │ ├── LKS_AttrGroupsMaker.h │ │ │ ├── LKS_AttrGroupsMaker.m │ │ │ ├── LKS_CustomAttrGroupsMaker.h │ │ │ ├── LKS_CustomAttrGroupsMaker.m │ │ │ ├── LKS_CustomAttrSetterManager.h │ │ │ ├── LKS_CustomAttrSetterManager.m │ │ │ ├── LKS_CustomDisplayItemsMaker.h │ │ │ ├── LKS_CustomDisplayItemsMaker.m │ │ │ ├── LKS_EventHandlerMaker.h │ │ │ ├── LKS_EventHandlerMaker.m │ │ │ ├── LKS_ExportManager.h │ │ │ ├── LKS_ExportManager.m │ │ │ ├── LKS_GestureTargetActionsSearcher.h │ │ │ ├── LKS_GestureTargetActionsSearcher.m │ │ │ ├── LKS_Helper.h │ │ │ ├── LKS_Helper.m │ │ │ ├── LKS_HierarchyDisplayItemsMaker.h │ │ │ ├── LKS_HierarchyDisplayItemsMaker.m │ │ │ ├── LKS_ObjectRegistry.h │ │ │ ├── LKS_ObjectRegistry.m │ │ │ ├── LKS_TraceManager.h │ │ │ ├── LKS_TraceManager.m │ │ │ └── LookinServerDefines.h │ │ └── Shared │ │ ├── Category │ │ ├── CALayer+Lookin.h │ │ ├── CALayer+Lookin.m │ │ ├── Color+Lookin.h │ │ ├── Color+Lookin.m │ │ ├── Image+Lookin.h │ │ ├── Image+Lookin.m │ │ ├── NSArray+Lookin.h │ │ ├── NSArray+Lookin.m │ │ ├── NSObject+Lookin.h │ │ ├── NSObject+Lookin.m │ │ ├── NSSet+Lookin.h │ │ ├── NSSet+Lookin.m │ │ ├── NSString+Lookin.h │ │ └── NSString+Lookin.m │ │ ├── LookinAppInfo.h │ │ ├── LookinAppInfo.m │ │ ├── LookinAttrIdentifiers.h │ │ ├── LookinAttrIdentifiers.m │ │ ├── LookinAttrType.h │ │ ├── LookinAttribute.h │ │ ├── LookinAttribute.m │ │ ├── LookinAttributeModification.h │ │ ├── LookinAttributeModification.m │ │ ├── LookinAttributesGroup.h │ │ ├── LookinAttributesGroup.m │ │ ├── LookinAttributesSection.h │ │ ├── LookinAttributesSection.m │ │ ├── LookinAutoLayoutConstraint.h │ │ ├── LookinAutoLayoutConstraint.m │ │ ├── LookinCodingValueType.h │ │ ├── LookinConnectionAttachment.h │ │ ├── LookinConnectionAttachment.m │ │ ├── LookinConnectionResponseAttachment.h │ │ ├── LookinConnectionResponseAttachment.m │ │ ├── LookinCustomAttrModification.h │ │ ├── LookinCustomAttrModification.m │ │ ├── LookinCustomDisplayItemInfo.h │ │ ├── LookinCustomDisplayItemInfo.m │ │ ├── LookinDashboardBlueprint.h │ │ ├── LookinDashboardBlueprint.m │ │ ├── LookinDefines.h │ │ ├── LookinDisplayItem.h │ │ ├── LookinDisplayItem.m │ │ ├── LookinDisplayItemDetail.h │ │ ├── LookinDisplayItemDetail.m │ │ ├── LookinEventHandler.h │ │ ├── LookinEventHandler.m │ │ ├── LookinHierarchyFile.h │ │ ├── LookinHierarchyFile.m │ │ ├── LookinHierarchyInfo.h │ │ ├── LookinHierarchyInfo.m │ │ ├── LookinObject.h │ │ ├── LookinObject.m │ │ ├── LookinStaticAsyncUpdateTask.h │ │ ├── LookinStaticAsyncUpdateTask.m │ │ ├── LookinTuple.h │ │ ├── LookinTuple.m │ │ ├── LookinWeakContainer.h │ │ ├── LookinWeakContainer.m │ │ └── Peertalk │ │ ├── Lookin_PTChannel.h │ │ ├── Lookin_PTChannel.m │ │ ├── Lookin_PTPrivate.h │ │ ├── Lookin_PTProtocol.h │ │ ├── Lookin_PTProtocol.m │ │ ├── Lookin_PTUSBHub.h │ │ ├── Lookin_PTUSBHub.m │ │ └── Peertalk.h ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ ├── aa.xcuserdatad │ │ └── xcschemes │ │ │ ├── FunnyButton.xcscheme │ │ │ ├── LookinServer.xcscheme │ │ │ ├── Pods-ScreenRotatorDemo.xcscheme │ │ │ ├── SnapKit.xcscheme │ │ │ └── xcschememanagement.plist │ │ └── zhoujianping.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist ├── SnapKit │ ├── LICENSE │ ├── README.md │ └── Sources │ │ ├── Constraint.swift │ │ ├── ConstraintAttributes.swift │ │ ├── ConstraintConfig.swift │ │ ├── ConstraintConstantTarget.swift │ │ ├── ConstraintDSL.swift │ │ ├── ConstraintDescription.swift │ │ ├── ConstraintDirectionalInsetTarget.swift │ │ ├── ConstraintDirectionalInsets.swift │ │ ├── ConstraintInsetTarget.swift │ │ ├── ConstraintInsets.swift │ │ ├── ConstraintItem.swift │ │ ├── ConstraintLayoutGuide+Extensions.swift │ │ ├── ConstraintLayoutGuide.swift │ │ ├── ConstraintLayoutGuideDSL.swift │ │ ├── ConstraintLayoutSupport.swift │ │ ├── ConstraintLayoutSupportDSL.swift │ │ ├── ConstraintMaker.swift │ │ ├── ConstraintMakerEditable.swift │ │ ├── ConstraintMakerExtendable.swift │ │ ├── ConstraintMakerFinalizable.swift │ │ ├── ConstraintMakerPrioritizable.swift │ │ ├── ConstraintMakerRelatable+Extensions.swift │ │ ├── ConstraintMakerRelatable.swift │ │ ├── ConstraintMultiplierTarget.swift │ │ ├── ConstraintOffsetTarget.swift │ │ ├── ConstraintPriority.swift │ │ ├── ConstraintPriorityTarget.swift │ │ ├── ConstraintRelatableTarget.swift │ │ ├── ConstraintRelation.swift │ │ ├── ConstraintView+Extensions.swift │ │ ├── ConstraintView.swift │ │ ├── ConstraintViewDSL.swift │ │ ├── Debugging.swift │ │ ├── LayoutConstraint.swift │ │ ├── LayoutConstraintItem.swift │ │ ├── PrivacyInfo.xcprivacy │ │ ├── Typealiases.swift │ │ └── UILayoutSupport+Extensions.swift └── Target Support Files │ ├── FunnyButton │ ├── FunnyButton-Info.plist │ ├── FunnyButton-dummy.m │ ├── FunnyButton-prefix.pch │ ├── FunnyButton-umbrella.h │ ├── FunnyButton.debug.xcconfig │ ├── FunnyButton.modulemap │ └── FunnyButton.release.xcconfig │ ├── LookinServer │ ├── LookinServer-Info.plist │ ├── LookinServer-dummy.m │ ├── LookinServer-prefix.pch │ ├── LookinServer-umbrella.h │ ├── LookinServer.debug.xcconfig │ ├── LookinServer.modulemap │ └── LookinServer.release.xcconfig │ ├── Pods-ScreenRotatorDemo │ ├── Pods-ScreenRotatorDemo-Info.plist │ ├── Pods-ScreenRotatorDemo-acknowledgements.markdown │ ├── Pods-ScreenRotatorDemo-acknowledgements.plist │ ├── Pods-ScreenRotatorDemo-dummy.m │ ├── Pods-ScreenRotatorDemo-frameworks-Debug-input-files.xcfilelist │ ├── Pods-ScreenRotatorDemo-frameworks-Debug-output-files.xcfilelist │ ├── Pods-ScreenRotatorDemo-frameworks-Release-input-files.xcfilelist │ ├── Pods-ScreenRotatorDemo-frameworks-Release-output-files.xcfilelist │ ├── Pods-ScreenRotatorDemo-frameworks.sh │ ├── Pods-ScreenRotatorDemo-umbrella.h │ ├── Pods-ScreenRotatorDemo.debug.xcconfig │ ├── Pods-ScreenRotatorDemo.modulemap │ └── Pods-ScreenRotatorDemo.release.xcconfig │ ├── ScreenRotator │ ├── ScreenRotator-Info.plist │ ├── ScreenRotator-dummy.m │ ├── ScreenRotator-prefix.pch │ ├── ScreenRotator-umbrella.h │ ├── ScreenRotator.debug.xcconfig │ ├── ScreenRotator.modulemap │ └── ScreenRotator.release.xcconfig │ └── SnapKit │ ├── ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist │ ├── SnapKit-Info.plist │ ├── SnapKit-dummy.m │ ├── SnapKit-prefix.pch │ ├── SnapKit-umbrella.h │ ├── SnapKit.debug.xcconfig │ ├── SnapKit.modulemap │ └── SnapKit.release.xcconfig ├── ScreenRotatorDemo.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── aa.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── xcshareddata │ └── xcschemes │ │ └── ScreenRotatorDemo.xcscheme └── xcuserdata │ ├── aa.xcuserdatad │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ │ └── xcschememanagement.plist │ └── zhoujianping.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── ScreenRotatorDemo.xcworkspace ├── contents.xcworkspacedata ├── xcshareddata │ └── IDEWorkspaceChecks.plist └── xcuserdata │ ├── aa.xcuserdatad │ ├── IDEFindNavigatorScopes.plist │ ├── UserInterfaceState.xcuserstate │ └── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ └── zhoujianping.xcuserdatad │ ├── IDEFindNavigatorScopes.plist │ ├── UserInterfaceState.xcuserstate │ └── xcdebugger │ └── Breakpoints_v2.xcbkptlist └── ScreenRotatorDemo ├── AppDelegate.swift ├── Assets.xcassets ├── AccentColor.colorset │ └── Contents.json ├── AppIcon.appiconset │ └── Contents.json ├── Contents.json └── screen_toggle.imageset │ ├── Contents.json │ ├── screen_toggle_black@2x.png │ ├── screen_toggle_black@3x.png │ ├── screen_toggle_while@2x.png │ └── screen_toggle_while@3x.png ├── Base.lproj └── LaunchScreen.storyboard ├── Base ├── BaseViewController.swift └── Function.swift ├── Extension └── UIColor.Extension.swift ├── Info.plist ├── Main.storyboard ├── Main ├── MainViewController.swift ├── MainWindow.swift ├── TestViewController.swift └── VideoViewController.swift ├── Modifiers ├── AnimatableModifiers.swift └── Modifiers.swift ├── Resources ├── IMG_6350.jpg ├── IMG_6351.jpg ├── IMG_6352.jpg ├── IMG_6353.jpg └── ali.mp4 ├── Rotator ├── RotatorView.swift └── RotatorViewController.swift ├── SceneDelegate.swift └── ScreenRotator-Bridging-Header.h /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 26 | # Carthage/Checkouts 27 | 28 | Carthage/Build 29 | 30 | # We recommend against adding the Pods directory to your .gitignore. However 31 | # you should judge for yourself, the pros and cons are mentioned at: 32 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 33 | # 34 | # Note: if you ignore the Pods directory, make sure to uncomment 35 | # `pod install` in .travis.yml 36 | # 37 | # Pods/ 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2024 Rogue24 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /ScreenRotator.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'ScreenRotator' 3 | s.version = '0.1.1' 4 | s.summary = 'A utility class that allows for rotating/locking screen orientation anytime, anywhere.' 5 | 6 | s.description = <<-DESC 7 | A utility class that allows for rotating/locking screen orientation anytime, anywhere. 8 | DESC 9 | 10 | s.homepage = 'https://github.com/Rogue24/ScreenRotator' 11 | s.license = { :type => 'MIT', :file => 'LICENSE' } 12 | s.author = { 'Rogue24' => 'zhoujianping24@hotmail.com' } 13 | s.source = { :git => 'https://github.com/Rogue24/ScreenRotator.git', :tag => s.version.to_s } 14 | 15 | s.ios.deployment_target = '11.0' 16 | 17 | s.source_files = 'ScreenRotator/*.{h,m}', 'ScreenRotator/*.swift' 18 | 19 | s.swift_version = '5.0' 20 | 21 | end 22 | -------------------------------------------------------------------------------- /ScreenRotator/ScreenRotatorState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScreenRotatorDemoState.swift 3 | // ScreenRotatorDemo 4 | // 5 | // Created by 周健平 on 2022/10/28. 6 | // 7 | 8 | import Foundation 9 | 10 | @available(iOS 13.0, *) 11 | public class ScreenRotatorState: ObservableObject { 12 | @Published public var orientation: ScreenRotator.Orientation = ScreenRotator.shared.orientation { 13 | didSet { ScreenRotator.shared.rotation(to: orientation) } 14 | } 15 | 16 | @Published public var isLockOrientation: Bool = ScreenRotator.shared.isLockOrientationWhenDeviceOrientationDidChange { 17 | didSet { ScreenRotator.shared.isLockOrientationWhenDeviceOrientationDidChange = isLockOrientation } 18 | } 19 | 20 | @Published public var isLockLandscape: Bool = ScreenRotator.shared.isLockLandscapeWhenDeviceOrientationDidChange { 21 | didSet { ScreenRotator.shared.isLockLandscapeWhenDeviceOrientationDidChange = isLockLandscape } 22 | } 23 | 24 | public init() { 25 | NotificationCenter.default.addObserver(self, selector: #selector(orientationDidChange), 26 | name: ScreenRotator.orientationDidChangeNotification, object: nil) 27 | NotificationCenter.default.addObserver(self, selector: #selector(lockOrientationWhenDeviceOrientationDidChange), 28 | name: ScreenRotator.lockOrientationWhenDeviceOrientationDidChangeNotification, object: nil) 29 | NotificationCenter.default.addObserver(self, selector: #selector(lockLandscapeWhenDeviceOrientationDidChange), 30 | name: ScreenRotator.lockLandscapeWhenDeviceOrientationDidChangeNotification, object: nil) 31 | } 32 | 33 | deinit { 34 | NotificationCenter.default.removeObserver(self) 35 | } 36 | 37 | @objc private func orientationDidChange() { 38 | orientation = ScreenRotator.shared.orientation 39 | } 40 | 41 | @objc private func lockOrientationWhenDeviceOrientationDidChange() { 42 | isLockOrientation = ScreenRotator.shared.isLockOrientationWhenDeviceOrientationDidChange 43 | } 44 | 45 | @objc private func lockLandscapeWhenDeviceOrientationDidChange() { 46 | isLockLandscape = ScreenRotator.shared.isLockLandscapeWhenDeviceOrientationDidChange 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '15.0' 2 | 3 | target 'ScreenRotatorDemo' do 4 | use_frameworks! 5 | 6 | pod 'ScreenRotator', :path => '../' 7 | 8 | pod 'SnapKit' 9 | pod 'FunnyButton' 10 | pod 'LookinServer', :configurations => ['Debug'] 11 | 12 | end 13 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FunnyButton (0.1.5) 3 | - LookinServer (1.2.7): 4 | - LookinServer/Core (= 1.2.7) 5 | - LookinServer/Core (1.2.7) 6 | - ScreenRotator (0.1.1) 7 | - SnapKit (5.7.1) 8 | 9 | DEPENDENCIES: 10 | - FunnyButton 11 | - LookinServer 12 | - ScreenRotator (from `../`) 13 | - SnapKit 14 | 15 | SPEC REPOS: 16 | trunk: 17 | - FunnyButton 18 | - LookinServer 19 | - SnapKit 20 | 21 | EXTERNAL SOURCES: 22 | ScreenRotator: 23 | :path: "../" 24 | 25 | SPEC CHECKSUMS: 26 | FunnyButton: e8202ece176aaa5f7ead1e5c8eb0f29d28fc5ad4 27 | LookinServer: 36f1a0ad280de34b9794cf8825867fcc2dd93e75 28 | ScreenRotator: 2ca2f074f144e12dc95f49ba18b91872d4a2a0d0 29 | SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a 30 | 31 | PODFILE CHECKSUM: b182cf5cddc3c65616d48ed31c855c8522efa157 32 | 33 | COCOAPODS: 1.15.2 34 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/FunnyButton/FunnyButton/Classes/FunnyAction.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FunnyAction.swift 3 | // FunnyButton 4 | // 5 | // Created by aa on 2022/9/17. 6 | // 7 | // 点击FunnyButton可执行的Action 8 | 9 | @objcMembers 10 | public class FunnyAction: NSObject { 11 | 12 | /// 名称(用于多个时展示以选择执行) 13 | let name: String? 14 | 15 | /// 执行动作 16 | let work: () -> () 17 | 18 | public init(name: String? = nil, work: @escaping () -> ()) { 19 | self.name = name 20 | self.work = work 21 | super.init() 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/FunnyButton/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022 zhoujianping 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Local Podspecs/ScreenRotator.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ScreenRotator", 3 | "version": "0.1.1", 4 | "summary": "A utility class that allows for rotating/locking screen orientation anytime, anywhere.", 5 | "description": "A utility class that allows for rotating/locking screen orientation anytime, anywhere.", 6 | "homepage": "https://github.com/Rogue24/ScreenRotator", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "Rogue24": "zhoujianping24@hotmail.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/Rogue24/ScreenRotator.git", 16 | "tag": "0.1.1" 17 | }, 18 | "platforms": { 19 | "ios": "11.0" 20 | }, 21 | "source_files": [ 22 | "ScreenRotator/*.{h,m}", 23 | "ScreenRotator/*.swift" 24 | ], 25 | "swift_versions": "5.0", 26 | "swift_version": "5.0" 27 | } 28 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [2023] [LI KAI] 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. -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Base/LookinIvarTrace.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinIvarTrace.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/4/30. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | extern NSString *const LookinIvarTraceRelationValue_Self; 14 | 15 | /// 如果 hostClassName 和 ivarName 均 equal,则认为两个 LookinIvarTrace 对象彼此 equal 16 | /// 比如 A 是 B 的 superview,且 A 的 "_stageView" 指向 B,则 B 会有一个 LookinIvarTrace:hostType 为 “superview”,hostClassName 为 A 的 class,ivarName 为 “_stageView” 17 | @interface LookinIvarTrace : NSObject 18 | 19 | /// 该值可能是 "superview"、"superlayer"、“self” 或 nil 20 | @property(nonatomic, copy) NSString *relation; 21 | 22 | @property(nonatomic, copy) NSString *hostClassName; 23 | 24 | @property(nonatomic, copy) NSString *ivarName; 25 | 26 | #pragma mark - No Coding 27 | 28 | #if TARGET_OS_IPHONE 29 | @property(nonatomic, weak) id hostObject; 30 | #endif 31 | 32 | @end 33 | 34 | @interface NSObject (LookinServerTrace) 35 | 36 | @property(nonatomic, copy) NSArray *lks_ivarTraces; 37 | 38 | @end 39 | 40 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 41 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Base/LookinIvarTrace.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinIvarTrace.m 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/4/30. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinIvarTrace.h" 12 | 13 | NSString *const LookinIvarTraceRelationValue_Self = @"self"; 14 | 15 | @implementation LookinIvarTrace 16 | 17 | #pragma mark - Equal 18 | 19 | - (NSUInteger)hash { 20 | return self.hostClassName.hash ^ self.ivarName.hash; 21 | } 22 | 23 | - (BOOL)isEqual:(id)object { 24 | if (self == object) { 25 | return YES; 26 | } 27 | if (![object isKindOfClass:[LookinIvarTrace class]]) { 28 | return NO; 29 | } 30 | LookinIvarTrace *comparedObj = object; 31 | if ([self.hostClassName isEqualToString:comparedObj.hostClassName] && [self.ivarName isEqualToString:comparedObj.ivarName]) { 32 | return YES; 33 | } 34 | return NO; 35 | } 36 | 37 | #pragma mark - 38 | 39 | - (id)copyWithZone:(NSZone *)zone { 40 | LookinIvarTrace *newTrace = [[LookinIvarTrace allocWithZone:zone] init]; 41 | newTrace.relation = self.relation; 42 | newTrace.hostClassName = self.hostClassName; 43 | newTrace.ivarName = self.ivarName; 44 | return newTrace; 45 | } 46 | 47 | #pragma mark - 48 | 49 | - (void)encodeWithCoder:(NSCoder *)aCoder { 50 | [aCoder encodeObject:self.relation forKey:@"relation"]; 51 | [aCoder encodeObject:self.hostClassName forKey:@"hostClassName"]; 52 | [aCoder encodeObject:self.ivarName forKey:@"ivarName"]; 53 | } 54 | 55 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 56 | if (self = [super init]) { 57 | self.relation = [aDecoder decodeObjectForKey:@"relation"]; 58 | self.hostClassName = [aDecoder decodeObjectForKey:@"hostClassName"]; 59 | self.ivarName = [aDecoder decodeObjectForKey:@"ivarName"]; 60 | } 61 | return self; 62 | } 63 | 64 | + (BOOL)supportsSecureCoding { 65 | return YES; 66 | } 67 | 68 | @end 69 | 70 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 71 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/CALayer+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIView+LookinMobile.h 5 | // WeRead 6 | // 7 | // Created by Li Kai on 2018/11/30. 8 | // Copyright © 2018 tencent. All rights reserved. 9 | // 10 | 11 | #import "LookinDefines.h" 12 | #import "TargetConditionals.h" 13 | #import 14 | 15 | @interface CALayer (LookinServer) 16 | 17 | /// 如果 myView.layer == myLayer,则 myLayer.lks_hostView 会返回 myView 18 | @property(nonatomic, readonly, weak) UIView *lks_hostView; 19 | 20 | - (UIWindow *)lks_window; 21 | 22 | - (CGRect)lks_frameInWindow:(UIWindow *)window; 23 | 24 | - (UIImage *)lks_groupScreenshotWithLowQuality:(BOOL)lowQuality; 25 | /// 当没有 sublayers 时,该方法返回 nil 26 | - (UIImage *)lks_soloScreenshotWithLowQuality:(BOOL)lowQuality; 27 | 28 | /// 获取和该对象有关的对象的 Class 层级树 29 | - (NSArray *> *)lks_relatedClassChainList; 30 | 31 | - (NSArray *)lks_selfRelation; 32 | 33 | @property(nonatomic, strong) UIColor *lks_backgroundColor; 34 | @property(nonatomic, strong) UIColor *lks_borderColor; 35 | @property(nonatomic, strong) UIColor *lks_shadowColor; 36 | @property(nonatomic, assign) CGFloat lks_shadowOffsetWidth; 37 | @property(nonatomic, assign) CGFloat lks_shadowOffsetHeight; 38 | 39 | @end 40 | 41 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 42 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/NSObject+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // NSObject+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/4/21. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinDefines.h" 12 | #import 13 | 14 | @class LookinIvarTrace; 15 | 16 | @interface NSObject (LookinServer) 17 | 18 | #pragma mark - oid 19 | 20 | /// 如果 oid 不存在则会创建新的 oid 21 | - (unsigned long)lks_registerOid; 22 | 23 | /// 0 表示不存在 24 | @property(nonatomic, assign) unsigned long lks_oid; 25 | 26 | + (NSObject *)lks_objectWithOid:(unsigned long)oid; 27 | 28 | #pragma mark - trace 29 | 30 | @property(nonatomic, copy) NSString *lks_specialTrace; 31 | 32 | + (void)lks_clearAllObjectsTraces; 33 | 34 | /** 35 | 获取当前对象的 Class 层级树,如 @[@"UIView", @"UIResponder", @"NSObject"]。未 demangle,有 Swift Module Name 36 | */ 37 | - (NSArray *)lks_classChainList; 38 | 39 | @end 40 | 41 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 42 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIBlurEffect+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIBlurEffect+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/10/8. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UIBlurEffect (LookinServer) 14 | 15 | /// 该 number 包装的对象是 UIBlurEffectStyle,之所以用 NSNumber 是因为想把 0 和 nil 区分开,毕竟这里是在 hook 系统,稳一点好。 16 | /// 该方法的实现需要 Hook,因此若定义了 LOOKIN_SERVER_DISABLE_HOOK 宏,则属性会返回 nil 17 | @property(nonatomic, strong) NSNumber *lks_effectStyleNumber; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIBlurEffect+LookinServer.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIBlurEffect+LookinServer.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/10/8. 8 | // https://lookin.work 9 | // 10 | 11 | #import "UIBlurEffect+LookinServer.h" 12 | #import "NSObject+Lookin.h" 13 | #import 14 | 15 | @implementation UIBlurEffect (LookinServer) 16 | 17 | #ifdef LOOKIN_SERVER_DISABLE_HOOK 18 | 19 | - (void)setLks_effectStyleNumber:(NSNumber *)lks_effectStyleNumber { 20 | } 21 | 22 | - (NSNumber *)lks_effectStyleNumber { 23 | return nil; 24 | } 25 | 26 | #else 27 | 28 | + (void)load { 29 | static dispatch_once_t onceToken; 30 | dispatch_once(&onceToken, ^{ 31 | Method oriMethod = class_getClassMethod([self class], @selector(effectWithStyle:)); 32 | Method newMethod = class_getClassMethod([self class], @selector(lks_effectWithStyle:)); 33 | method_exchangeImplementations(oriMethod, newMethod); 34 | }); 35 | } 36 | 37 | + (UIBlurEffect *)lks_effectWithStyle:(UIBlurEffectStyle)style { 38 | id effect = [self lks_effectWithStyle:style]; 39 | if ([effect respondsToSelector:@selector(setLks_effectStyleNumber:)]) { 40 | [effect setLks_effectStyleNumber:@(style)]; 41 | } 42 | return effect; 43 | } 44 | 45 | - (void)setLks_effectStyleNumber:(NSNumber *)lks_effectStyleNumber { 46 | [self lookin_bindObject:lks_effectStyleNumber forKey:@"lks_effectStyleNumber"]; 47 | } 48 | 49 | - (NSNumber *)lks_effectStyleNumber { 50 | return [self lookin_getBindObjectForKey:@"lks_effectStyleNumber"]; 51 | } 52 | 53 | #endif /* LOOKIN_SERVER_DISABLE_HOOK */ 54 | 55 | @end 56 | 57 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 58 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIColor+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIColor+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/6/5. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UIColor (LookinServer) 14 | 15 | - (NSArray *)lks_rgbaComponents; 16 | + (instancetype)lks_colorFromRGBAComponents:(NSArray *)components; 17 | 18 | - (NSString *)lks_rgbaString; 19 | - (NSString *)lks_hexString; 20 | 21 | /// will check if the argument is a real CGColor 22 | + (UIColor *)lks_colorWithCGColor:(CGColorRef)cgColor; 23 | 24 | @end 25 | 26 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIImage+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIImage+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/5/14. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UIImage (LookinServer) 14 | 15 | /// 该方法的实现需要 Hook,因此若定义了 LOOKIN_SERVER_DISABLE_HOOK 宏,则属性会返回 nil 16 | @property(nonatomic, copy) NSString *lks_imageSourceName; 17 | 18 | - (NSData *)lookin_data; 19 | 20 | @end 21 | 22 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 23 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIImageView+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIImageView+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/9/18. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UIImageView (LookinServer) 14 | 15 | - (NSString *)lks_imageSourceName; 16 | - (NSNumber *)lks_imageViewOidIfHasImage; 17 | 18 | @end 19 | 20 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 21 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIImageView+LookinServer.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIImageView+LookinServer.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/9/18. 8 | // https://lookin.work 9 | // 10 | 11 | #import "UIImageView+LookinServer.h" 12 | #import "UIImage+LookinServer.h" 13 | #import "NSObject+LookinServer.h" 14 | 15 | @implementation UIImageView (LookinServer) 16 | 17 | - (NSString *)lks_imageSourceName { 18 | return self.image.lks_imageSourceName; 19 | } 20 | 21 | - (NSNumber *)lks_imageViewOidIfHasImage { 22 | if (!self.image) { 23 | return nil; 24 | } 25 | unsigned long oid = [self lks_registerOid]; 26 | return @(oid); 27 | } 28 | 29 | @end 30 | 31 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 32 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UILabel+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UILabel+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/2/26. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UILabel (LookinServer) 14 | 15 | @property(nonatomic, assign) CGFloat lks_fontSize; 16 | 17 | - (NSString *)lks_fontName; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UILabel+LookinServer.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UILabel+LookinServer.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/2/26. 8 | // https://lookin.work 9 | // 10 | 11 | #import "UILabel+LookinServer.h" 12 | 13 | @implementation UILabel (LookinServer) 14 | 15 | - (CGFloat)lks_fontSize { 16 | return self.font.pointSize; 17 | } 18 | - (void)setLks_fontSize:(CGFloat)lks_fontSize { 19 | UIFont *font = [self.font fontWithSize:lks_fontSize]; 20 | self.font = font; 21 | } 22 | 23 | - (NSString *)lks_fontName { 24 | return self.font.fontName; 25 | } 26 | 27 | @end 28 | 29 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 30 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UITableView+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UITableView+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/9/5. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UITableView (LookinServer) 14 | 15 | - (NSArray *)lks_numberOfRows; 16 | 17 | @end 18 | 19 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 20 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UITableView+LookinServer.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UITableView+LookinServer.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/9/5. 8 | // https://lookin.work 9 | // 10 | 11 | #import "UITableView+LookinServer.h" 12 | #import "LookinServerDefines.h" 13 | 14 | @implementation UITableView (LookinServer) 15 | 16 | - (NSArray *)lks_numberOfRows { 17 | NSUInteger sectionsCount = MIN(self.numberOfSections, 10); 18 | NSArray *rowsCount = [NSArray lookin_arrayWithCount:sectionsCount block:^id(NSUInteger idx) { 19 | return @([self numberOfRowsInSection:idx]); 20 | }]; 21 | if (rowsCount.count == 0) { 22 | return nil; 23 | } 24 | return rowsCount; 25 | } 26 | 27 | @end 28 | 29 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 30 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UITextField+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UITextField+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/2/26. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UITextField (LookinServer) 14 | 15 | @property(nonatomic, assign) CGFloat lks_fontSize; 16 | 17 | - (NSString *)lks_fontName; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UITextField+LookinServer.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UITextField+LookinServer.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/2/26. 8 | // https://lookin.work 9 | // 10 | 11 | #import "UITextField+LookinServer.h" 12 | 13 | @implementation UITextField (LookinServer) 14 | 15 | - (CGFloat)lks_fontSize { 16 | return self.font.pointSize; 17 | } 18 | - (void)setLks_fontSize:(CGFloat)lks_fontSize { 19 | UIFont *font = [self.font fontWithSize:lks_fontSize]; 20 | self.font = font; 21 | } 22 | 23 | - (NSString *)lks_fontName { 24 | return self.font.fontName; 25 | } 26 | 27 | @end 28 | 29 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 30 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UITextView+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UITextView+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/2/26. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UITextView (LookinServer) 14 | 15 | @property(nonatomic, assign) CGFloat lks_fontSize; 16 | 17 | - (NSString *)lks_fontName; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UITextView+LookinServer.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UITextView+LookinServer.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/2/26. 8 | // https://lookin.work 9 | // 10 | 11 | #import "UITextView+LookinServer.h" 12 | 13 | @implementation UITextView (LookinServer) 14 | 15 | - (CGFloat)lks_fontSize { 16 | return self.font.pointSize; 17 | } 18 | - (void)setLks_fontSize:(CGFloat)lks_fontSize { 19 | UIFont *font = [self.font fontWithSize:lks_fontSize]; 20 | self.font = font; 21 | } 22 | 23 | - (NSString *)lks_fontName { 24 | return self.font.fontName; 25 | } 26 | 27 | @end 28 | 29 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 30 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIView+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIView+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/3/19. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinDefines.h" 12 | #import 13 | 14 | @interface UIView (LookinServer) 15 | 16 | /// 如果 myViewController.view = myView,则可以通过 myView 的 lks_findHostViewController 方法找到 myViewController 17 | - (UIViewController *)lks_findHostViewController; 18 | 19 | /// 是否是 UITabBar 的 childrenView,如果是的话,则截图时需要强制使用 renderInContext: 的方式而非 drawViewHierarchyInRect:afterScreenUpdates: 否则在 iOS 13 上获取到的图像是空的不知道为什么 20 | @property(nonatomic, assign) BOOL lks_isChildrenViewOfTabBar; 21 | 22 | /// point 是相对于 receiver 自身的坐标系 23 | - (UIView *)lks_subviewAtPoint:(CGPoint)point preferredClasses:(NSArray *)preferredClasses; 24 | 25 | - (CGFloat)lks_bestWidth; 26 | - (CGFloat)lks_bestHeight; 27 | - (CGSize)lks_bestSize; 28 | 29 | @property(nonatomic, assign) float lks_horizontalContentHuggingPriority; 30 | @property(nonatomic, assign) float lks_verticalContentHuggingPriority; 31 | 32 | @property(nonatomic, assign) float lks_horizontalContentCompressionResistancePriority; 33 | @property(nonatomic, assign) float lks_verticalContentCompressionResistancePriority; 34 | 35 | /// 遍历全局的 view 并给他们设置 lks_involvedRawConstraints 属性 36 | + (void)lks_rebuildGlobalInvolvedRawConstraints; 37 | /// 该属性保存了牵扯到当前 view 的所有 constraints,包括那些没有生效的 38 | @property(nonatomic, strong) NSMutableArray *lks_involvedRawConstraints; 39 | 40 | - (NSArray *> *)lks_constraints; 41 | 42 | @end 43 | 44 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 45 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIViewController+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIViewController+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/4/22. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UIViewController (LookinServer) 14 | 15 | + (UIViewController *)lks_visibleViewController; 16 | 17 | @end 18 | 19 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 20 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIViewController+LookinServer.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIViewController+LookinServer.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/4/22. 8 | // https://lookin.work 9 | // 10 | 11 | #import "UIViewController+LookinServer.h" 12 | #import "UIView+LookinServer.h" 13 | #import 14 | 15 | @implementation UIViewController (LookinServer) 16 | 17 | + (nullable UIViewController *)lks_visibleViewController { 18 | UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController; 19 | UIViewController *visibleViewController = [rootViewController lks_visibleViewControllerIfExist]; 20 | return visibleViewController; 21 | } 22 | 23 | - (UIViewController *)lks_visibleViewControllerIfExist { 24 | 25 | if (self.presentedViewController) { 26 | return [self.presentedViewController lks_visibleViewControllerIfExist]; 27 | } 28 | 29 | if ([self isKindOfClass:[UINavigationController class]]) { 30 | return [((UINavigationController *)self).visibleViewController lks_visibleViewControllerIfExist]; 31 | } 32 | 33 | if ([self isKindOfClass:[UITabBarController class]]) { 34 | return [((UITabBarController *)self).selectedViewController lks_visibleViewControllerIfExist]; 35 | } 36 | 37 | if (self.isViewLoaded && !self.view.hidden && self.view.alpha > 0.01) { 38 | return self; 39 | } else { 40 | return nil; 41 | } 42 | } 43 | 44 | @end 45 | 46 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 47 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIVisualEffectView+LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIVisualEffectView+LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/10/8. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface UIVisualEffectView (LookinServer) 14 | 15 | - (void)setLks_blurEffectStyleNumber:(NSNumber *)lks_blurEffectStyleNumber; 16 | 17 | - (NSNumber *)lks_blurEffectStyleNumber; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Category/UIVisualEffectView+LookinServer.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // UIVisualEffectView+LookinServer.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/10/8. 8 | // https://lookin.work 9 | // 10 | 11 | #import "UIVisualEffectView+LookinServer.h" 12 | #import "UIBlurEffect+LookinServer.h" 13 | 14 | @implementation UIVisualEffectView (LookinServer) 15 | 16 | - (void)setLks_blurEffectStyleNumber:(NSNumber *)lks_blurEffectStyleNumber { 17 | UIBlurEffectStyle style = [lks_blurEffectStyleNumber integerValue]; 18 | UIBlurEffect *effect = [UIBlurEffect effectWithStyle:style]; 19 | self.effect = effect; 20 | } 21 | 22 | - (NSNumber *)lks_blurEffectStyleNumber { 23 | UIVisualEffect *effect = self.effect; 24 | if (![effect isKindOfClass:[UIBlurEffect class]]) { 25 | return nil; 26 | } 27 | UIBlurEffect *blurEffect = (UIBlurEffect *)effect; 28 | return blurEffect.lks_effectStyleNumber; 29 | } 30 | 31 | @end 32 | 33 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 34 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Connection/LKS_ConnectionManager.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // Lookin.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2018/8/5. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | extern NSString *const LKS_ConnectionDidEndNotificationName; 14 | 15 | @class LookinConnectionResponseAttachment; 16 | 17 | @interface LKS_ConnectionManager : NSObject 18 | 19 | + (instancetype)sharedInstance; 20 | 21 | @property(nonatomic, assign) BOOL applicationIsActive; 22 | 23 | - (void)respond:(LookinConnectionResponseAttachment *)data requestType:(uint32_t)requestType tag:(uint32_t)tag; 24 | 25 | - (void)pushData:(NSObject *)data type:(uint32_t)type; 26 | 27 | @end 28 | 29 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 30 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Connection/LKS_RequestHandler.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_RequestHandler.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/1/15. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface LKS_RequestHandler : NSObject 14 | 15 | - (BOOL)canHandleRequestType:(uint32_t)requestType; 16 | 17 | - (void)handleRequestType:(uint32_t)requestType tag:(uint32_t)tag object:(id)object; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Connection/RequestHandler/LKS_AttrModificationPatchHandler.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_AttrModificationPatchHandler.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/6/12. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @class LookinDisplayItemDetail; 14 | 15 | @interface LKS_AttrModificationPatchHandler : NSObject 16 | 17 | /** 18 | @param oids 数组内 idx 较小的应该为 displayItems 里的 subItem,idx 较大的应该为 superItem 19 | @param lowImageQuality 是否采用低图像质量 20 | @param block 该 block 会被多次调用,其中 tasksTotalCount 是总的调用次数(即可被用来作为 TotalResponseCount) 21 | */ 22 | + (void)handleLayerOids:(NSArray *)oids lowImageQuality:(BOOL)lowImageQuality block:(void (^)(LookinDisplayItemDetail *detail, NSUInteger tasksTotalCount, NSError *error))block; 23 | 24 | @end 25 | 26 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Connection/RequestHandler/LKS_AttrModificationPatchHandler.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_AttrModificationPatchHandler.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/6/12. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LKS_AttrModificationPatchHandler.h" 12 | #import "LookinDisplayItemDetail.h" 13 | #import "LookinServerDefines.h" 14 | 15 | @implementation LKS_AttrModificationPatchHandler 16 | 17 | + (void)handleLayerOids:(NSArray *)oids lowImageQuality:(BOOL)lowImageQuality block:(void (^)(LookinDisplayItemDetail *detail, NSUInteger tasksTotalCount, NSError *error))block { 18 | if (!block) { 19 | NSAssert(NO, @""); 20 | return; 21 | } 22 | if (![oids isKindOfClass:[NSArray class]]) { 23 | block(nil, 1, LookinErr_Inner); 24 | return; 25 | } 26 | 27 | [oids enumerateObjectsUsingBlock:^(NSNumber * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 28 | unsigned long oid = [obj unsignedLongValue]; 29 | LookinDisplayItemDetail *detail = [LookinDisplayItemDetail new]; 30 | detail.displayItemOid = oid; 31 | 32 | CALayer *layer = (CALayer *)[NSObject lks_objectWithOid:oid]; 33 | if (![layer isKindOfClass:[CALayer class]]) { 34 | block(nil, idx + 1, LookinErr_ObjNotFound); 35 | *stop = YES; 36 | return; 37 | } 38 | 39 | if (idx == 0) { 40 | detail.soloScreenshot = [layer lks_soloScreenshotWithLowQuality:lowImageQuality]; 41 | detail.groupScreenshot = [layer lks_groupScreenshotWithLowQuality:lowImageQuality]; 42 | } else { 43 | detail.groupScreenshot = [layer lks_groupScreenshotWithLowQuality:lowImageQuality]; 44 | } 45 | block(detail, oids.count, nil); 46 | }]; 47 | } 48 | 49 | @end 50 | 51 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 52 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Connection/RequestHandler/LKS_CustomAttrModificationHandler.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | // 3 | // LKS_CustomAttrModificationHandler.h 4 | // LookinServer 5 | // 6 | // Created by likaimacbookhome on 2023/11/4. 7 | // 8 | 9 | #import 10 | #import "LookinCustomAttrModification.h" 11 | 12 | @interface LKS_CustomAttrModificationHandler : NSObject 13 | 14 | /// 返回值表示是否修改成功(有成功调用 setter block 就算成功) 15 | + (BOOL)handleModification:(LookinCustomAttrModification *)modification; 16 | 17 | @end 18 | 19 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 20 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Connection/RequestHandler/LKS_HierarchyDetailsHandler.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_HierarchyDetailsHandler.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/6/20. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @class LookinDisplayItemDetail, LookinStaticAsyncUpdateTasksPackage; 14 | 15 | typedef void (^LKS_HierarchyDetailsHandler_ProgressBlock)(NSArray *details); 16 | typedef void (^LKS_HierarchyDetailsHandler_FinishBlock)(void); 17 | 18 | @interface LKS_HierarchyDetailsHandler : NSObject 19 | 20 | /// packages 会按照 idx 从小到大的顺序被执行 21 | /// 全部任务完成时,finishBlock 会被调用 22 | /// 如果调用了 cancel,则 finishBlock 不会被执行 23 | - (void)startWithPackages:(NSArray *)packages block:(LKS_HierarchyDetailsHandler_ProgressBlock)progressBlock finishedBlock:(LKS_HierarchyDetailsHandler_FinishBlock)finishBlock; 24 | 25 | /// 取消所有任务 26 | - (void)cancel; 27 | 28 | @end 29 | 30 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 31 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Connection/RequestHandler/LKS_InbuiltAttrModificationHandler.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_InbuiltAttrModificationHandler.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/6/12. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @class LookinAttributeModification, LookinDisplayItemDetail, LookinStaticAsyncUpdateTask; 14 | 15 | @interface LKS_InbuiltAttrModificationHandler : NSObject 16 | 17 | + (void)handleModification:(LookinAttributeModification *)modification completion:(void (^)(LookinDisplayItemDetail *data, NSError *error))completion; 18 | 19 | + (void)handlePatchWithTasks:(NSArray *)tasks block:(void (^)(LookinDisplayItemDetail *data))block; 20 | 21 | @end 22 | 23 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 24 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/LookinServer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinServer.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/7/20. 8 | // https://lookin.work 9 | // 10 | 11 | #ifndef LookinServer_h 12 | #define LookinServer_h 13 | 14 | 15 | #endif /* LookinServer_h */ 16 | 17 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 18 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKSConfigManager.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKSConfigManager.h 5 | // LookinServer 6 | // 7 | // Created by likai.123 on 2023/1/10. 8 | // 9 | 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface LKSConfigManager : NSObject 15 | 16 | + (NSArray *)collapsedClassList; 17 | 18 | + (NSDictionary *)colorAlias; 19 | 20 | + (BOOL)shouldCaptureScreenshotOfLayer:(CALayer *)layer; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | 26 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_AttrGroupsMaker.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_AttrGroupsMaker.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/6/6. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinDefines.h" 12 | 13 | @class LookinAttributesGroup; 14 | 15 | @interface LKS_AttrGroupsMaker : NSObject 16 | 17 | + (NSArray *)attrGroupsForLayer:(CALayer *)layer; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_CustomAttrGroupsMaker.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | // 3 | // LKS_CustomAttrGroupsMaker.h 4 | // LookinServer 5 | // 6 | // Created by LikaiMacStudioWork on 2023/10/31. 7 | // 8 | 9 | #import "LookinDefines.h" 10 | 11 | @class LookinAttributesGroup; 12 | 13 | @interface LKS_CustomAttrGroupsMaker : NSObject 14 | 15 | - (instancetype)initWithLayer:(CALayer *)layer; 16 | 17 | - (void)execute; 18 | 19 | - (NSArray *)getGroups; 20 | - (NSString *)getCustomDisplayTitle; 21 | - (NSString *)getDanceUISource; 22 | 23 | + (NSArray *)makeGroupsFromRawProperties:(NSArray *)rawProperties saveCustomSetter:(BOOL)saveCustomSetter; 24 | 25 | @end 26 | 27 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 28 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_CustomAttrSetterManager.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | // 3 | // LKS_CustomAttrSetterManager.h 4 | // LookinServer 5 | // 6 | // Created by likai.123 on 2023/11/4. 7 | // 8 | 9 | #import 10 | 11 | typedef void(^LKS_StringSetter)(NSString *); 12 | typedef void(^LKS_NumberSetter)(NSNumber *); 13 | typedef void(^LKS_BoolSetter)(BOOL); 14 | typedef void(^LKS_ColorSetter)(UIColor *); 15 | typedef void(^LKS_EnumSetter)(NSString *); 16 | typedef void(^LKS_RectSetter)(CGRect); 17 | typedef void(^LKS_SizeSetter)(CGSize); 18 | typedef void(^LKS_PointSetter)(CGPoint); 19 | typedef void(^LKS_InsetsSetter)(UIEdgeInsets); 20 | 21 | @interface LKS_CustomAttrSetterManager : NSObject 22 | 23 | + (instancetype)sharedInstance; 24 | 25 | - (void)removeAll; 26 | 27 | - (void)saveStringSetter:(LKS_StringSetter)setter uniqueID:(NSString *)uniqueID; 28 | - (LKS_StringSetter)getStringSetterWithID:(NSString *)uniqueID; 29 | 30 | - (void)saveNumberSetter:(LKS_NumberSetter)setter uniqueID:(NSString *)uniqueID; 31 | - (LKS_NumberSetter)getNumberSetterWithID:(NSString *)uniqueID; 32 | 33 | - (void)saveBoolSetter:(LKS_BoolSetter)setter uniqueID:(NSString *)uniqueID; 34 | - (LKS_BoolSetter)getBoolSetterWithID:(NSString *)uniqueID; 35 | 36 | - (void)saveColorSetter:(LKS_ColorSetter)setter uniqueID:(NSString *)uniqueID; 37 | - (LKS_ColorSetter)getColorSetterWithID:(NSString *)uniqueID; 38 | 39 | - (void)saveEnumSetter:(LKS_EnumSetter)setter uniqueID:(NSString *)uniqueID; 40 | - (LKS_EnumSetter)getEnumSetterWithID:(NSString *)uniqueID; 41 | 42 | - (void)saveRectSetter:(LKS_RectSetter)setter uniqueID:(NSString *)uniqueID; 43 | - (LKS_RectSetter)getRectSetterWithID:(NSString *)uniqueID; 44 | 45 | - (void)saveSizeSetter:(LKS_SizeSetter)setter uniqueID:(NSString *)uniqueID; 46 | - (LKS_SizeSetter)getSizeSetterWithID:(NSString *)uniqueID; 47 | 48 | - (void)savePointSetter:(LKS_PointSetter)setter uniqueID:(NSString *)uniqueID; 49 | - (LKS_PointSetter)getPointSetterWithID:(NSString *)uniqueID; 50 | 51 | - (void)saveInsetsSetter:(LKS_InsetsSetter)setter uniqueID:(NSString *)uniqueID; 52 | - (LKS_InsetsSetter)getInsetsSetterWithID:(NSString *)uniqueID; 53 | 54 | @end 55 | 56 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 57 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_CustomDisplayItemsMaker.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_CustomDisplayItemsMaker.h 5 | // LookinServer 6 | // 7 | // Created by likai.123 on 2023/11/1. 8 | // 9 | 10 | #import 11 | 12 | @class LookinDisplayItem; 13 | 14 | @interface LKS_CustomDisplayItemsMaker : NSObject 15 | 16 | - (instancetype)initWithLayer:(CALayer *)layer saveAttrSetter:(BOOL)saveAttrSetter; 17 | 18 | - (NSArray *)make; 19 | 20 | @end 21 | 22 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 23 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_EventHandlerMaker.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_EventHandlerMaker.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/8/7. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinDefines.h" 12 | 13 | @class LookinEventHandler; 14 | 15 | @interface LKS_EventHandlerMaker : NSObject 16 | 17 | + (NSArray *)makeForView:(UIView *)view; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_ExportManager.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_ExportManager.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/5/13. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface LKS_ExportManager : NSObject 14 | 15 | + (instancetype)sharedInstance; 16 | 17 | - (void)exportAndShare; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_GestureTargetActionsSearcher.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_GestureTargetActionsSearcher.h 5 | // LookinServer 6 | // 7 | // Created by likai.123 on 2023/9/11. 8 | // 9 | 10 | #import 11 | 12 | @class LookinTwoTuple; 13 | 14 | NS_ASSUME_NONNULL_BEGIN 15 | 16 | @interface LKS_GestureTargetActionsSearcher : NSObject 17 | 18 | /// 返回一个 UIGestureRecognizer 实例身上绑定的 target & action 信息 19 | /// tuple.first => LookinWeakContainer(包裹着 target),tuple.second => action(方法名字符串) 20 | + (NSArray *)getTargetActionsFromRecognizer:(UIGestureRecognizer *)recognizer; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | 26 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_GestureTargetActionsSearcher.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_GestureTargetActionsSearcher.m 5 | // LookinServer 6 | // 7 | // Created by likai.123 on 2023/9/11. 8 | // 9 | 10 | #import "LKS_GestureTargetActionsSearcher.h" 11 | #import 12 | #import "NSArray+Lookin.h" 13 | #import "LookinTuple.h" 14 | #import "LookinWeakContainer.h" 15 | 16 | @implementation LKS_GestureTargetActionsSearcher 17 | 18 | + (NSArray *)getTargetActionsFromRecognizer:(UIGestureRecognizer *)recognizer { 19 | if (!recognizer) { 20 | return @[]; 21 | } 22 | // KVC 要放到 try catch 里面防止 Crash 23 | @try { 24 | NSArray* targetsList = [recognizer valueForKey:@"_targets"]; 25 | if (!targetsList || targetsList.count == 0) { 26 | return @[]; 27 | } 28 | // 数组元素对象是 UIGestureRecognizerTarget* 29 | // 这个元素有两个属性,一个是名为 _target 的属性指向某个实例,另一个是名为 _action 的属性保存一个 SEL 30 | NSArray* ret = [targetsList lookin_map:^id(NSUInteger idx, id targetBox) { 31 | id targetObj = [targetBox valueForKey:@"_target"]; 32 | if (!targetObj) { 33 | return nil; 34 | } 35 | SEL action = ((SEL (*)(id, Ivar))object_getIvar)(targetBox, class_getInstanceVariable([targetBox class], "_action")); 36 | 37 | LookinTwoTuple* tuple = [LookinTwoTuple new]; 38 | tuple.first = [LookinWeakContainer containerWithObject:targetObj]; 39 | tuple.second = (action == NULL ? @"NULL" : NSStringFromSelector(action)); 40 | return tuple; 41 | }]; 42 | return ret; 43 | } 44 | @catch (NSException * e) { 45 | NSLog(@"LookinServer - %@", e); 46 | return @[]; 47 | } 48 | } 49 | 50 | @end 51 | 52 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 53 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_Helper.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_Helper.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/7/20. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinDefines.h" 12 | 13 | 14 | 15 | #import 16 | 17 | #define LKS_Localized(stringKey) NSLocalizedStringFromTableInBundle(stringKey, nil, [NSBundle bundleForClass:self.class], nil) 18 | 19 | @interface LKS_Helper : NSObject 20 | 21 | /// 如果 object 为 nil 则返回字符串 “nil”,否则返回字符串格式类似于 (UIView *) 22 | + (NSString *)descriptionOfObject:(id)object; 23 | 24 | /// 返回当前的bundle 25 | + (NSBundle *)bundle; 26 | 27 | @end 28 | 29 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 30 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_Helper.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_Helper.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/7/20. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LKS_Helper.h" 12 | #import "NSObject+LookinServer.h" 13 | 14 | @implementation LKS_Helper 15 | 16 | + (NSString *)descriptionOfObject:(id)object { 17 | if (!object) { 18 | return @"nil"; 19 | } 20 | NSString *className = NSStringFromClass([object class]); 21 | return [NSString stringWithFormat:@"(%@ *)", className]; 22 | } 23 | 24 | + (NSBundle *)bundle { 25 | static id bundle = nil; 26 | if (bundle != nil) { 27 | #ifdef SPM_RESOURCE_BUNDLE_IDENTIFITER 28 | bundle = [NSBundle bundleWithIdentifier:SPM_RESOURCE_BUNDLE_IDENTIFITER]; 29 | #else 30 | bundle = [NSBundle bundleForClass:self.class]; 31 | #endif 32 | } 33 | return bundle; 34 | } 35 | 36 | @end 37 | 38 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 39 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_HierarchyDisplayItemsMaker.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_HierarchyDisplayItemsMaker.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/2/19. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import "LookinDefines.h" 14 | 15 | @class LookinDisplayItem; 16 | 17 | @interface LKS_HierarchyDisplayItemsMaker : NSObject 18 | 19 | /// @param hasScreenshots 是否包含 soloScreenshots 和 groupScreenshot 属性 20 | /// @param hasAttrList 是否包含 attributesGroupList 属性 21 | /// @param lowQuality screenshots 是否为低质量(当 hasScreenshots 为 NO 时,该属性无意义) 22 | /// @param readCustomInfo 是否读取 lookin_customDebugInfos,比如低版本的 Lookin 发请求时,就无需读取(因为 Lookin 解析不了、还可能出 Bug) 23 | /// @param saveCustomSetter 是否要读取并保存用户给 attribute 配置的 custom setter 24 | + (NSArray *)itemsWithScreenshots:(BOOL)hasScreenshots attrList:(BOOL)hasAttrList lowImageQuality:(BOOL)lowQuality readCustomInfo:(BOOL)readCustomInfo saveCustomSetter:(BOOL)saveCustomSetter; 25 | 26 | /// 把 layer 的 sublayers 转换为 displayItem 数组并返回 27 | + (NSArray *)subitemsOfLayer:(CALayer *)layer; 28 | 29 | @end 30 | 31 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 32 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_ObjectRegistry.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_ObjectRegistry.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/4/21. 8 | // https://lookin.work 9 | // 10 | 11 | #import 12 | 13 | @interface LKS_ObjectRegistry : NSObject 14 | 15 | + (instancetype)sharedInstance; 16 | 17 | - (unsigned long)addObject:(NSObject *)object; 18 | 19 | - (NSObject *)objectWithOid:(unsigned long)oid; 20 | 21 | @end 22 | 23 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 24 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_ObjectRegistry.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_ObjectRegistry.m 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/4/21. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LKS_ObjectRegistry.h" 12 | #import 13 | 14 | @interface LKS_ObjectRegistry () 15 | 16 | @property(nonatomic, strong) NSPointerArray *data; 17 | 18 | @end 19 | 20 | @implementation LKS_ObjectRegistry 21 | 22 | + (instancetype)sharedInstance { 23 | static dispatch_once_t onceToken; 24 | static LKS_ObjectRegistry *instance = nil; 25 | dispatch_once(&onceToken,^{ 26 | instance = [[super allocWithZone:NULL] init]; 27 | }); 28 | return instance; 29 | } 30 | 31 | + (id)allocWithZone:(struct _NSZone *)zone{ 32 | return [self sharedInstance]; 33 | } 34 | 35 | - (instancetype)init { 36 | if (self = [super init]) { 37 | self.data = [NSPointerArray weakObjectsPointerArray]; 38 | // index 为 0 用 Null 填充 39 | self.data.count = 1; 40 | } 41 | return self; 42 | } 43 | 44 | - (unsigned long)addObject:(NSObject *)object { 45 | if (!object) { 46 | return 0; 47 | } 48 | [self.data addPointer:(void *)object]; 49 | return self.data.count - 1; 50 | } 51 | 52 | - (NSObject *)objectWithOid:(unsigned long)oid { 53 | if (self.data.count <= oid) { 54 | return nil; 55 | } 56 | id object = [self.data pointerAtIndex:oid]; 57 | return object; 58 | } 59 | 60 | @end 61 | 62 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 63 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LKS_TraceManager.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LKS_TraceManager.h 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2019/5/5. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | 15 | @class LookinIvarTrace; 16 | 17 | @interface LKS_TraceManager : NSObject 18 | 19 | + (instancetype)sharedInstance; 20 | 21 | - (void)reload; 22 | 23 | - (void)addSearchTarger:(id)target; 24 | 25 | @end 26 | 27 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 28 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Server/Others/LookinServerDefines.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinServer_PrefixHeader.pch 5 | // LookinServer 6 | // 7 | // Created by Li Kai on 2018/12/21. 8 | // https://lookin.work 9 | // 10 | 11 | #import "TargetConditionals.h" 12 | #import "LookinDefines.h" 13 | #import "LKS_Helper.h" 14 | #import "NSObject+LookinServer.h" 15 | #import "NSArray+Lookin.h" 16 | #import "NSSet+Lookin.h" 17 | #import "CALayer+Lookin.h" 18 | #import "UIView+LookinServer.h" 19 | #import "CALayer+LookinServer.h" 20 | #import "NSObject+Lookin.h" 21 | #import "NSString+Lookin.h" 22 | 23 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 24 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Category/CALayer+Lookin.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // CALayer+Lookin.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2018/8/4. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinDefines.h" 12 | 13 | 14 | 15 | #import 16 | 17 | @interface CALayer (Lookin) 18 | 19 | - (void)lookin_removeImplicitAnimations; 20 | 21 | @end 22 | 23 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 24 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Category/Color+Lookin.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // Color+Lookin.h 5 | // LookinShared 6 | // 7 | // Created by 李凯 on 2022/4/2. 8 | // 9 | 10 | #import 11 | 12 | #if TARGET_OS_IPHONE 13 | 14 | #elif TARGET_OS_MAC 15 | 16 | @interface NSColor (Lookin) 17 | 18 | + (instancetype)lookin_colorFromRGBAComponents:(NSArray *)components; 19 | 20 | - (NSArray *)lookin_rgbaComponents; 21 | 22 | @end 23 | 24 | #endif 25 | 26 | 27 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 28 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Category/Color+Lookin.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // Color+Lookin.m 5 | // LookinShared 6 | // 7 | // Created by 李凯 on 2022/4/2. 8 | // 9 | 10 | #import "Image+Lookin.h" 11 | 12 | #if TARGET_OS_IPHONE 13 | 14 | #elif TARGET_OS_MAC 15 | 16 | @implementation NSColor (Lookin) 17 | 18 | + (instancetype)lookin_colorFromRGBAComponents:(NSArray *)components { 19 | if (!components) { 20 | return nil; 21 | } 22 | if (components.count != 4) { 23 | NSAssert(NO, @""); 24 | return nil; 25 | } 26 | NSColor *color = [NSColor colorWithRed:components[0].doubleValue green:components[1].doubleValue blue:components[2].doubleValue alpha:components[3].doubleValue]; 27 | return color; 28 | } 29 | 30 | - (NSArray *)lookin_rgbaComponents { 31 | NSColor *rgbColor = [self colorUsingColorSpace:NSColorSpace.sRGBColorSpace]; 32 | CGFloat r, g, b, a; 33 | [rgbColor getRed:&r green:&g blue:&b alpha:&a]; 34 | NSArray *rgba = @[@(r), @(g), @(b), @(a)]; 35 | return rgba; 36 | } 37 | 38 | @end 39 | 40 | #endif 41 | 42 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 43 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Category/Image+Lookin.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // Image+Lookin.h 5 | // LookinShared 6 | // 7 | // Created by 李凯 on 2022/4/2. 8 | // 9 | 10 | #import 11 | 12 | #if TARGET_OS_IPHONE 13 | 14 | #elif TARGET_OS_MAC 15 | 16 | @interface NSImage (LookinClient) 17 | 18 | - (NSData *)lookin_data; 19 | 20 | @end 21 | 22 | #endif 23 | 24 | 25 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 26 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Category/Image+Lookin.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // Image+Lookin.m 5 | // LookinShared 6 | // 7 | // Created by 李凯 on 2022/4/2. 8 | // 9 | 10 | #import "Image+Lookin.h" 11 | 12 | #if TARGET_OS_IPHONE 13 | 14 | #elif TARGET_OS_MAC 15 | 16 | @implementation NSImage (LookinClient) 17 | 18 | - (NSData *)lookin_data { 19 | return [self TIFFRepresentation]; 20 | } 21 | 22 | @end 23 | 24 | #endif 25 | 26 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Category/NSSet+Lookin.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // NSSet+Lookin.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/1/13. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinDefines.h" 12 | 13 | 14 | 15 | #import "TargetConditionals.h" 16 | #if TARGET_OS_IPHONE 17 | #import 18 | #elif TARGET_OS_MAC 19 | #import 20 | #endif 21 | 22 | @interface NSSet<__covariant ValueType> (Lookin) 23 | 24 | - (NSSet *)lookin_map:(id (^)(ValueType obj))block; 25 | 26 | - (ValueType)lookin_firstFiltered:(BOOL (^)(ValueType obj))block; 27 | 28 | - (NSSet *)lookin_filter:(BOOL (^)(ValueType obj))block; 29 | 30 | 31 | /** 32 | 是否有任何一个元素满足某条件 33 | @note 元素将被依次传入 block 里,如果任何一个 block 返回 YES,则该方法返回 YES。如果所有 block 均返回 NO,则该方法返回 NO。 34 | */ 35 | - (BOOL)lookin_any:(BOOL (^)(ValueType obj))block; 36 | 37 | @end 38 | 39 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 40 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Category/NSSet+Lookin.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // NSSet+Lookin.m 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/1/13. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import "NSSet+Lookin.h" 14 | 15 | @implementation NSSet (Lookin) 16 | 17 | - (NSSet *)lookin_map:(id (^)(id obj))block { 18 | if (!block) { 19 | NSAssert(NO, @""); 20 | return nil; 21 | } 22 | 23 | NSMutableSet *newSet = [NSMutableSet setWithCapacity:self.count]; 24 | [self enumerateObjectsUsingBlock:^(id _Nonnull obj, BOOL * _Nonnull stop) { 25 | id newObj = block(obj); 26 | if (newObj) { 27 | [newSet addObject:newObj]; 28 | } 29 | }]; 30 | return [newSet copy]; 31 | } 32 | 33 | - (id)lookin_firstFiltered:(BOOL (^)(id obj))block { 34 | if (!block) { 35 | NSAssert(NO, @""); 36 | return nil; 37 | } 38 | 39 | __block id targetObj = nil; 40 | [self enumerateObjectsUsingBlock:^(id _Nonnull obj, BOOL * _Nonnull stop) { 41 | if (block(obj)) { 42 | targetObj = obj; 43 | *stop = YES; 44 | } 45 | }]; 46 | return targetObj; 47 | } 48 | 49 | - (NSSet *)lookin_filter:(BOOL (^)(id obj))block { 50 | if (!block) { 51 | NSAssert(NO, @""); 52 | return nil; 53 | } 54 | 55 | NSMutableSet *mSet = [NSMutableSet set]; 56 | [self enumerateObjectsUsingBlock:^(id _Nonnull obj, BOOL * _Nonnull stop) { 57 | if (block(obj)) { 58 | [mSet addObject:obj]; 59 | } 60 | }]; 61 | return [mSet copy]; 62 | } 63 | 64 | - (BOOL)lookin_any:(BOOL (^)(id obj))block { 65 | if (!block) { 66 | NSAssert(NO, @""); 67 | return NO; 68 | } 69 | __block BOOL boolValue = NO; 70 | [self enumerateObjectsUsingBlock:^(id _Nonnull obj, BOOL * _Nonnull stop) { 71 | if (block(obj)) { 72 | boolValue = YES; 73 | *stop = YES; 74 | } 75 | }]; 76 | return boolValue; 77 | } 78 | 79 | @end 80 | 81 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 82 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Category/NSString+Lookin.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // NSString+Lookin.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/5/11. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinDefines.h" 12 | 13 | 14 | 15 | #import 16 | 17 | @interface NSString (Lookin) 18 | 19 | /** 20 | 把 CGFloat 转成字符串,最多保留 3 位小数,转换后末尾的 0 会被删除 21 | 如:1.2341 => @"1.234", 2.1002 => @"2.1", 3.000 => @"3" 22 | */ 23 | + (NSString *)lookin_stringFromDouble:(double)doubleValue decimal:(NSUInteger)decimal; 24 | 25 | + (NSString *)lookin_stringFromRect:(CGRect)rect; 26 | 27 | + (NSString *)lookin_stringFromInset:(LookinInsets)insets; 28 | 29 | + (NSString *)lookin_stringFromSize:(CGSize)size; 30 | 31 | + (NSString *)lookin_stringFromPoint:(CGPoint)point; 32 | 33 | + (NSString *)lookin_rgbaStringFromColor:(LookinColor *)color; 34 | 35 | - (NSString *)lookin_safeInitWithUTF8String:(const char *)string; 36 | 37 | /// 把 1.2.3 这种 String 版本号转换成数字,可用于大小比较,如 110205 代表 11.2.5 版本 38 | - (NSInteger)lookin_numbericOSVersion; 39 | 40 | @end 41 | 42 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 43 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAppInfo.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAppInfo.h 5 | // qmuidemo 6 | // 7 | // Created by Li Kai on 2018/11/3. 8 | // Copyright © 2018 QMUI Team. All rights reserved. 9 | // 10 | 11 | 12 | 13 | #import "LookinDefines.h" 14 | 15 | typedef NS_ENUM(NSInteger, LookinAppInfoDevice) { 16 | LookinAppInfoDeviceSimulator, // 模拟器 17 | LookinAppInfoDeviceIPad, // iPad 真机 18 | LookinAppInfoDeviceOthers // 应该视为 iPhone 真机 19 | }; 20 | 21 | @interface LookinAppInfo : NSObject 22 | 23 | /// 每次启动 app 时都会随机生成一个 appInfoIdentifier 直到 app 被 kill 掉 24 | @property(nonatomic, assign) NSUInteger appInfoIdentifier; 25 | /// mac 端应该先读取该属性,如果为 YES 则表示应该使用之前保存的旧 appInfo 对象即可 26 | @property(nonatomic, assign) BOOL shouldUseCache; 27 | /// LookinServer 的版本 28 | @property(nonatomic, assign) int serverVersion; 29 | /// 类似 "1.1.9",只在 1.2.3 以及之后的 LookinServer 版本里有值 30 | @property(nonatomic, assign) NSString *serverReadableVersion; 31 | /// 如果 iOS 侧使用了 SPM 或引入了 Swift Subspec,则该属性为 1 32 | /// 如果 iOS 侧没使用,则该属性为 -1 33 | /// 如果不知道,则该属性为 0 34 | @property(nonatomic, assign) int swiftEnabledInLookinServer; 35 | /// app 的当前截图 36 | @property(nonatomic, strong) LookinImage *screenshot; 37 | /// 可能为 nil,比如新建的 iOS 空项目 38 | @property(nonatomic, strong) LookinImage *appIcon; 39 | /// @"微信读书" 40 | @property(nonatomic, copy) NSString *appName; 41 | /// hughkli.lookin 42 | @property(nonatomic, copy) NSString *appBundleIdentifier; 43 | /// @"iPhone X" 44 | @property(nonatomic, copy) NSString *deviceDescription; 45 | /// @"12.1" 46 | @property(nonatomic, copy) NSString *osDescription; 47 | /// 返回 os 的主版本号,比如 iOS 12.1 的设备将返回 12,iOS 13.2.1 的设备将返回 13 48 | @property(nonatomic, assign) NSUInteger osMainVersion; 49 | /// 设备类型 50 | @property(nonatomic, assign) LookinAppInfoDevice deviceType; 51 | /// 屏幕的宽度 52 | @property(nonatomic, assign) double screenWidth; 53 | /// 屏幕的高度 54 | @property(nonatomic, assign) double screenHeight; 55 | /// 是几倍的屏幕 56 | @property(nonatomic, assign) double screenScale; 57 | 58 | - (BOOL)isEqualToAppInfo:(LookinAppInfo *)info; 59 | 60 | #if TARGET_OS_IPHONE 61 | 62 | + (LookinAppInfo *)currentInfoWithScreenshot:(BOOL)hasScreenshot icon:(BOOL)hasIcon localIdentifiers:(NSArray *)localIdentifiers; 63 | 64 | #else 65 | 66 | @property(nonatomic, assign) NSTimeInterval cachedTimestamp; 67 | 68 | #endif 69 | 70 | @end 71 | 72 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 73 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAttrType.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAttrIdentifiers.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2018/12/1. 8 | // https://lookin.work 9 | // 10 | 11 | /// 注意:新属性只能加到末尾,否则新旧版本搭配时可能有兼容问题 12 | typedef NS_ENUM(NSInteger, LookinAttrType) { 13 | LookinAttrTypeNone, 14 | LookinAttrTypeVoid, 15 | LookinAttrTypeChar, 16 | LookinAttrTypeInt, 17 | LookinAttrTypeShort, 18 | LookinAttrTypeLong, 19 | LookinAttrTypeLongLong, 20 | LookinAttrTypeUnsignedChar, 21 | LookinAttrTypeUnsignedInt, 22 | LookinAttrTypeUnsignedShort, 23 | LookinAttrTypeUnsignedLong, 24 | LookinAttrTypeUnsignedLongLong, 25 | LookinAttrTypeFloat, 26 | LookinAttrTypeDouble, 27 | LookinAttrTypeBOOL, 28 | LookinAttrTypeSel, 29 | LookinAttrTypeClass, 30 | LookinAttrTypeCGPoint, 31 | LookinAttrTypeCGVector, 32 | LookinAttrTypeCGSize, 33 | LookinAttrTypeCGRect, 34 | LookinAttrTypeCGAffineTransform, 35 | LookinAttrTypeUIEdgeInsets, 36 | LookinAttrTypeUIOffset, 37 | LookinAttrTypeNSString, 38 | LookinAttrTypeEnumInt, 39 | LookinAttrTypeEnumLong, 40 | /// value 实际为 RGBA 数组,即 @[NSNumber, NSNumber, NSNumber, NSNumber],NSNumber 范围是 0 ~ 1 41 | LookinAttrTypeUIColor, 42 | /// 业务需要根据具体的 AttrIdentifier 来解析 43 | LookinAttrTypeCustomObj, 44 | 45 | LookinAttrTypeEnumString, 46 | LookinAttrTypeShadow, 47 | LookinAttrTypeJson 48 | }; 49 | 50 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 51 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAttribute.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAttribute.h 5 | // qmuidemo 6 | // 7 | // Created by Li Kai on 2018/11/17. 8 | // Copyright © 2018 QMUI Team. All rights reserved. 9 | // 10 | 11 | #import "LookinAttrIdentifiers.h" 12 | #import "LookinCodingValueType.h" 13 | #import "LookinAttrType.h" 14 | 15 | @class LookinDisplayItem; 16 | 17 | @interface LookinAttribute : NSObject 18 | 19 | @property(nonatomic, copy) LookinAttrIdentifier identifier; 20 | 21 | /// 只有 Custom Attr 才有该属性 22 | @property(nonatomic, copy) NSString *displayTitle; 23 | 24 | /// 标识 value 的具体类型(如 double / NSString /...) 25 | @property(nonatomic, assign) LookinAttrType attrType; 26 | 27 | /// 具体的值,需配合 attrType 属性来解析它 28 | /// 对于 String、Color 等 attyType,该属性可能为 nil 29 | @property(nonatomic, strong) id value; 30 | 31 | /// 额外信息,大部分情况下它是 nil 32 | /// 当 attyType 为 LookinAttrTypeEnumString 时,extraValue 是一个 [String] 且保存了 allEnumCases 33 | @property(nonatomic, strong) id extraValue; 34 | 35 | /// 仅 Custom Attr 可能有该属性 36 | /// 对于有 retainedSetter 的 Custom Attr,它的 setter 会以 customSetterID 作为 key 被保存到 LKS_CustomAttrSetterManager 里,后续可以通过这个 uniqueID 重新把 setter 从 LKS_CustomAttrSetterManager 里取出来并调用 37 | @property(nonatomic, copy) NSString *customSetterID; 38 | 39 | #pragma mark - 以下属性不会参与 encode/decode 40 | 41 | /// 标识该 LookinAttribute 对象隶属于哪一个 LookinDisplayItem 42 | @property(nonatomic, weak) LookinDisplayItem *targetDisplayItem; 43 | 44 | - (BOOL)isUserCustom; 45 | 46 | @end 47 | 48 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 49 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAttribute.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAttribute.m 5 | // qmuidemo 6 | // 7 | // Created by Li Kai on 2018/11/17. 8 | // Copyright © 2018 QMUI Team. All rights reserved. 9 | // 10 | 11 | 12 | 13 | #import "LookinAttribute.h" 14 | #import "LookinDisplayItem.h" 15 | 16 | @implementation LookinAttribute 17 | 18 | #pragma mark - 19 | 20 | - (id)copyWithZone:(NSZone *)zone { 21 | LookinAttribute *newAttr = [[LookinAttribute allocWithZone:zone] init]; 22 | newAttr.identifier = self.identifier; 23 | newAttr.displayTitle = self.displayTitle; 24 | newAttr.value = self.value; 25 | newAttr.attrType = self.attrType; 26 | newAttr.extraValue = self.extraValue; 27 | newAttr.customSetterID = self.customSetterID; 28 | return newAttr; 29 | } 30 | 31 | #pragma mark - 32 | 33 | - (void)encodeWithCoder:(NSCoder *)aCoder { 34 | [aCoder encodeObject:self.displayTitle forKey:@"displayTitle"]; 35 | [aCoder encodeObject:self.identifier forKey:@"identifier"]; 36 | [aCoder encodeInteger:self.attrType forKey:@"attrType"]; 37 | [aCoder encodeObject:self.value forKey:@"value"]; 38 | [aCoder encodeObject:self.extraValue forKey:@"extraValue"]; 39 | [aCoder encodeObject:self.customSetterID forKey:@"customSetterID"]; 40 | } 41 | 42 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 43 | if (self = [super init]) { 44 | self.displayTitle = [aDecoder decodeObjectForKey:@"displayTitle"]; 45 | self.identifier = [aDecoder decodeObjectForKey:@"identifier"]; 46 | self.attrType = [aDecoder decodeIntegerForKey:@"attrType"]; 47 | self.value = [aDecoder decodeObjectForKey:@"value"]; 48 | self.extraValue = [aDecoder decodeObjectForKey:@"extraValue"]; 49 | self.customSetterID = [aDecoder decodeObjectForKey:@"customSetterID"]; 50 | } 51 | return self; 52 | } 53 | 54 | + (BOOL)supportsSecureCoding { 55 | return YES; 56 | } 57 | 58 | - (BOOL)isUserCustom { 59 | return [self.identifier isEqualToString:LookinAttr_UserCustom]; 60 | } 61 | 62 | @end 63 | 64 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 65 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAttributeModification.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAttributeModification.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2018/11/20. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | #import "LookinAttrType.h" 15 | 16 | @interface LookinAttributeModification : NSObject 17 | 18 | @property(nonatomic, assign) unsigned long targetOid; 19 | 20 | @property(nonatomic, assign) SEL setterSelector; 21 | @property(nonatomic, assign) SEL getterSelector; 22 | 23 | @property(nonatomic, assign) LookinAttrType attrType; 24 | @property(nonatomic, strong) id value; 25 | 26 | /// 1.0.4 开始加入这个参数 27 | @property(nonatomic, copy) NSString *clientReadableVersion; 28 | 29 | @end 30 | 31 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 32 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAttributeModification.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAttributeModification.m 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2018/11/20. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinAttributeModification.h" 12 | 13 | @implementation LookinAttributeModification 14 | 15 | - (void)encodeWithCoder:(NSCoder *)aCoder { 16 | [aCoder encodeObject:@(self.targetOid) forKey:@"targetOid"]; 17 | [aCoder encodeObject:NSStringFromSelector(self.setterSelector) forKey:@"setterSelector"]; 18 | [aCoder encodeInteger:self.attrType forKey:@"attrType"]; 19 | [aCoder encodeObject:self.value forKey:@"value"]; 20 | [aCoder encodeObject:self.clientReadableVersion forKey:@"clientReadableVersion"]; 21 | } 22 | 23 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 24 | if (self = [super init]) { 25 | self.targetOid = [[aDecoder decodeObjectForKey:@"targetOid"] unsignedLongValue]; 26 | self.setterSelector = NSSelectorFromString([aDecoder decodeObjectForKey:@"setterSelector"]); 27 | self.attrType = [aDecoder decodeIntegerForKey:@"attrType"]; 28 | self.value = [aDecoder decodeObjectForKey:@"value"]; 29 | self.clientReadableVersion = [aDecoder decodeObjectForKey:@"clientReadableVersion"]; 30 | } 31 | return self; 32 | } 33 | 34 | + (BOOL)supportsSecureCoding { 35 | return YES; 36 | } 37 | 38 | @end 39 | 40 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 41 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAttributesGroup.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAttributesGroup.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2018/11/19. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | #import "LookinAttrIdentifiers.h" 15 | 16 | @class LookinAttributesSection; 17 | 18 | /** 19 | In Lookin, a LookinAttributesGroup instance will be rendered as a property card. 20 | 21 | When isUserCustom is false: two LookinAttributesGroup instances will be regard as equal when they has the same LookinAttrGroupIdentifier. 22 | When isUserCustom is true: two LookinAttributesGroup instances will be regard as equal when they has the same title. 23 | 当 isUserCustom 为 false 时:若两个 attrGroup 有相同的 LookinAttrGroupIdentifier,则 isEqual: 返回 YES 24 | */ 25 | @interface LookinAttributesGroup : NSObject 26 | 27 | /// 只有在 identifier 为 custom 时,才存在该值 28 | @property(nonatomic, copy) NSString *userCustomTitle; 29 | 30 | @property(nonatomic, copy) LookinAttrGroupIdentifier identifier; 31 | 32 | @property(nonatomic, copy) NSArray *attrSections; 33 | 34 | /// 如果是 custom 则返回 userCustomTitle,如果不是 custom 则返回 identifier 35 | - (NSString *)uniqueKey; 36 | 37 | - (BOOL)isUserCustom; 38 | 39 | @end 40 | 41 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 42 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAttributesSection.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAttributesSection.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/3/2. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | #import "LookinAttrIdentifiers.h" 15 | 16 | @class LookinAttribute; 17 | 18 | typedef NS_ENUM (NSInteger, LookinAttributesSectionStyle) { 19 | LookinAttributesSectionStyleDefault, // 每个 attr 独占一行 20 | LookinAttributesSectionStyle0, // frame 等卡片使用,前 4 个 attr 每行两个,之后每个 attr 在同一排,每个宽度为 1/4 21 | LookinAttributesSectionStyle1, // 第一个 attr 在第一排靠左,第二个 attr 在第一排靠右,之后的 attr 每个独占一行 22 | LookinAttributesSectionStyle2 // 第一排独占一行,剩下的在同一行且均分宽度 23 | }; 24 | 25 | @interface LookinAttributesSection : NSObject 26 | 27 | @property(nonatomic, copy) LookinAttrSectionIdentifier identifier; 28 | 29 | @property(nonatomic, copy) NSArray *attributes; 30 | 31 | - (BOOL)isUserCustom; 32 | 33 | @end 34 | 35 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 36 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAttributesSection.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAttributesSection.m 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/3/2. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import "LookinAttributesSection.h" 14 | #import "LookinAttribute.h" 15 | 16 | #import "NSArray+Lookin.h" 17 | 18 | @implementation LookinAttributesSection 19 | 20 | #pragma mark - 21 | 22 | - (id)copyWithZone:(NSZone *)zone { 23 | LookinAttributesSection *newSection = [[LookinAttributesSection allocWithZone:zone] init]; 24 | newSection.identifier = self.identifier; 25 | newSection.attributes = [self.attributes lookin_map:^id(NSUInteger idx, LookinAttribute *value) { 26 | return value.copy; 27 | }]; 28 | return newSection; 29 | } 30 | 31 | #pragma mark - 32 | 33 | - (void)encodeWithCoder:(NSCoder *)aCoder { 34 | [aCoder encodeObject:self.identifier forKey:@"identifier"]; 35 | [aCoder encodeObject:self.attributes forKey:@"attributes"]; 36 | } 37 | 38 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 39 | if (self = [super init]) { 40 | self.identifier = [aDecoder decodeObjectForKey:@"identifier"]; 41 | self.attributes = [aDecoder decodeObjectForKey:@"attributes"]; 42 | } 43 | return self; 44 | } 45 | 46 | + (BOOL)supportsSecureCoding { 47 | return YES; 48 | } 49 | 50 | - (BOOL)isUserCustom { 51 | return [self.identifier isEqualToString:LookinAttrSec_UserCustom]; 52 | } 53 | 54 | @end 55 | 56 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 57 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinAutoLayoutConstraint.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinAutoLayoutConstraint.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/9/28. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import "LookinDefines.h" 14 | 15 | @class LookinObject; 16 | 17 | typedef NS_ENUM(NSInteger, LookinConstraintItemType) { 18 | LookinConstraintItemTypeUnknown, 19 | LookinConstraintItemTypeNil, 20 | LookinConstraintItemTypeView, 21 | LookinConstraintItemTypeSelf, 22 | LookinConstraintItemTypeSuper, 23 | LookinConstraintItemTypeLayoutGuide 24 | }; 25 | 26 | @interface LookinAutoLayoutConstraint : NSObject 27 | 28 | #if TARGET_OS_IPHONE 29 | + (instancetype)instanceFromNSConstraint:(NSLayoutConstraint *)constraint isEffective:(BOOL)isEffective firstItemType:(LookinConstraintItemType)firstItemType secondItemType:(LookinConstraintItemType)secondItemType; 30 | #endif 31 | 32 | @property(nonatomic, assign) BOOL effective; 33 | @property(nonatomic, assign) BOOL active; 34 | @property(nonatomic, assign) BOOL shouldBeArchived; 35 | @property(nonatomic, strong) LookinObject *firstItem; 36 | @property(nonatomic, assign) LookinConstraintItemType firstItemType; 37 | /// iOS 里的 NSLayoutAttribute,注意 iOS 和 macOS 虽然都有 NSLayoutAttribute 但是 value 非常不同,因此这里使用 NSInteger 避免混淆 38 | @property(nonatomic, assign) NSInteger firstAttribute; 39 | @property(nonatomic, assign) NSLayoutRelation relation; 40 | @property(nonatomic, strong) LookinObject *secondItem; 41 | @property(nonatomic, assign) LookinConstraintItemType secondItemType; 42 | /// iOS 里的 NSLayoutAttribute,注意 iOS 和 macOS 虽然都有 NSLayoutAttribute 但是 value 非常不同,因此这里使用 NSInteger 避免混淆 43 | @property(nonatomic, assign) NSInteger secondAttribute; 44 | @property(nonatomic, assign) CGFloat multiplier; 45 | @property(nonatomic, assign) CGFloat constant; 46 | @property(nonatomic, assign) CGFloat priority; 47 | @property(nonatomic, copy) NSString *identifier; 48 | 49 | @end 50 | 51 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 52 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinCodingValueType.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinCodingValueType.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/2/13. 8 | // https://lookin.work 9 | // 10 | 11 | typedef NS_ENUM(NSInteger, LookinCodingValueType) { 12 | LookinCodingValueTypeUnknown, 13 | LookinCodingValueTypeChar, 14 | LookinCodingValueTypeDouble, 15 | LookinCodingValueTypeFloat, 16 | LookinCodingValueTypeLongLong, 17 | // LookinCodingValueTypePoint, 18 | // LookinCodingValueTypeString, 19 | // LookinCodingValueTypeStringArray, 20 | // LookinCodingValueTypeEdgeInsets, 21 | // LookinCodingValueTypeRect, 22 | LookinCodingValueTypeBOOL, 23 | // LookinCodingValueTypeSize, 24 | LookinCodingValueTypeColor, 25 | LookinCodingValueTypeEnum, 26 | // LookinCodingValueTypeRange, 27 | LookinCodingValueTypeImage 28 | }; 29 | 30 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 31 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinConnectionAttachment.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinConnectionAttachment.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/2/15. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | #import "LookinCodingValueType.h" 15 | 16 | @interface LookinConnectionAttachment : NSObject 17 | 18 | @property(nonatomic, assign) LookinCodingValueType dataType; 19 | 20 | @property(nonatomic, strong) id data; 21 | 22 | @end 23 | 24 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 25 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinConnectionAttachment.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinConnectionAttachment.m 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/2/15. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import "LookinConnectionAttachment.h" 14 | #import "LookinDefines.h" 15 | #import "NSObject+Lookin.h" 16 | 17 | static NSString * const Key_Data = @"0"; 18 | static NSString * const Key_DataType = @"1"; 19 | 20 | @interface LookinConnectionAttachment () 21 | 22 | @end 23 | 24 | @implementation LookinConnectionAttachment 25 | 26 | - (instancetype)init { 27 | if (self = [super init]) { 28 | } 29 | return self; 30 | } 31 | 32 | - (void)encodeWithCoder:(NSCoder *)aCoder { 33 | 34 | [aCoder encodeObject:[self.data lookin_encodedObjectWithType:self.dataType] forKey:Key_Data]; 35 | [aCoder encodeInteger:self.dataType forKey:Key_DataType]; 36 | } 37 | 38 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 39 | if (self = [super init]) { 40 | self.dataType = [aDecoder decodeIntegerForKey:Key_DataType]; 41 | self.data = [[aDecoder decodeObjectForKey:Key_Data] lookin_decodedObjectWithType:self.dataType]; 42 | } 43 | return self; 44 | } 45 | 46 | + (BOOL)supportsSecureCoding { 47 | return YES; 48 | } 49 | 50 | @end 51 | 52 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 53 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinConnectionResponseAttachment.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinConnectionResponse.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/1/15. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | #import "LookinConnectionAttachment.h" 15 | 16 | @interface LookinConnectionResponseAttachment : LookinConnectionAttachment 17 | 18 | + (instancetype)attachmentWithError:(NSError *)error; 19 | 20 | @property(nonatomic, assign) int lookinServerVersion; 21 | 22 | @property(nonatomic, strong) NSError *error; 23 | 24 | /// 如果为 YES,则表示 app 正处于后台模式,默认为 NO 25 | @property(nonatomic, assign) BOOL appIsInBackground; 26 | 27 | /** 28 | dataTotalCount 为 0 时表示仅有这一个 response,默认为 0 29 | dataTotalCount 大于 0 时表示可能有多个 response,当所有 response 的 currentDataCount 的总和大于 dataTotalCount 即表示所有 response 已接收完毕 30 | */ 31 | @property(nonatomic, assign) NSUInteger dataTotalCount; 32 | @property(nonatomic, assign) NSUInteger currentDataCount; 33 | 34 | @end 35 | 36 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 37 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinConnectionResponseAttachment.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinConnectionResponse.m 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/1/15. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import "LookinConnectionResponseAttachment.h" 14 | #import "LookinDefines.h" 15 | 16 | @interface LookinConnectionResponseAttachment () 17 | 18 | @end 19 | 20 | @implementation LookinConnectionResponseAttachment 21 | 22 | - (void)encodeWithCoder:(NSCoder *)aCoder { 23 | [super encodeWithCoder:aCoder]; 24 | [aCoder encodeInt:self.lookinServerVersion forKey:@"lookinServerVersion"]; 25 | [aCoder encodeObject:self.error forKey:@"error"]; 26 | [aCoder encodeObject:@(self.dataTotalCount) forKey:@"dataTotalCount"]; 27 | [aCoder encodeObject:@(self.currentDataCount) forKey:@"currentDataCount"]; 28 | [aCoder encodeBool:self.appIsInBackground forKey:@"appIsInBackground"]; 29 | } 30 | 31 | - (instancetype)init { 32 | if (self = [super init]) { 33 | self.lookinServerVersion = LOOKIN_SERVER_VERSION; 34 | self.dataTotalCount = 0; 35 | } 36 | return self; 37 | } 38 | 39 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 40 | if (self = [super initWithCoder:aDecoder]) { 41 | self.lookinServerVersion = [aDecoder decodeIntForKey:@"lookinServerVersion"]; 42 | self.error = [aDecoder decodeObjectForKey:@"error"]; 43 | self.dataTotalCount = [[aDecoder decodeObjectForKey:@"dataTotalCount"] unsignedIntegerValue]; 44 | self.currentDataCount = [[aDecoder decodeObjectForKey:@"currentDataCount"] unsignedIntegerValue]; 45 | self.appIsInBackground = [aDecoder decodeBoolForKey:@"appIsInBackground"]; 46 | } 47 | return self; 48 | } 49 | 50 | + (BOOL)supportsSecureCoding { 51 | return YES; 52 | } 53 | 54 | + (instancetype)attachmentWithError:(NSError *)error { 55 | LookinConnectionResponseAttachment *attachment = [LookinConnectionResponseAttachment new]; 56 | attachment.error = error; 57 | return attachment; 58 | } 59 | 60 | @end 61 | 62 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 63 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinCustomAttrModification.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | // 3 | // LookinCustomAttrModification.h 4 | // LookinShared 5 | // 6 | // Created by likaimacbookhome on 2023/11/4. 7 | // 8 | 9 | #import 10 | #import "LookinAttrType.h" 11 | 12 | @interface LookinCustomAttrModification : NSObject 13 | 14 | @property(nonatomic, assign) LookinAttrType attrType; 15 | @property(nonatomic, copy) NSString *customSetterID; 16 | @property(nonatomic, strong) id value; 17 | 18 | @end 19 | 20 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 21 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinCustomAttrModification.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | // 3 | // LookinCustomAttrModification.m 4 | // LookinShared 5 | // 6 | // Created by likaimacbookhome on 2023/11/4. 7 | // 8 | 9 | #import "LookinCustomAttrModification.h" 10 | 11 | @implementation LookinCustomAttrModification 12 | 13 | - (void)encodeWithCoder:(NSCoder *)aCoder { 14 | [aCoder encodeInteger:self.attrType forKey:@"attrType"]; 15 | [aCoder encodeObject:self.value forKey:@"value"]; 16 | [aCoder encodeObject:self.customSetterID forKey:@"customSetterID"]; 17 | } 18 | 19 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 20 | if (self = [super init]) { 21 | self.attrType = [aDecoder decodeIntegerForKey:@"attrType"]; 22 | self.value = [aDecoder decodeObjectForKey:@"value"]; 23 | self.customSetterID = [aDecoder decodeObjectForKey:@"customSetterID"]; 24 | } 25 | return self; 26 | } 27 | 28 | + (BOOL)supportsSecureCoding { 29 | return YES; 30 | } 31 | 32 | @end 33 | 34 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 35 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinCustomDisplayItemInfo.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | // 3 | // LookinCustomDisplayItemInfo.h 4 | // LookinServer 5 | // 6 | // Created by likai.123 on 2023/11/1. 7 | // 8 | 9 | #import 10 | 11 | @interface LookinCustomDisplayItemInfo : NSObject 12 | 13 | /// 该属性可能有值(CGRect)也可能是 nil(nil 时则表示无图像) 14 | @property(nonatomic, strong) NSValue *frameInWindow; 15 | @property(nonatomic, copy) NSString *title; 16 | @property(nonatomic, copy) NSString *subtitle; 17 | @property(nonatomic, copy) NSString *danceuiSource; 18 | 19 | @end 20 | 21 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinCustomDisplayItemInfo.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinCustomDisplayItemInfo.m 5 | // LookinServer 6 | // 7 | // Created by likai.123 on 2023/11/1. 8 | // 9 | 10 | #import "LookinCustomDisplayItemInfo.h" 11 | #if TARGET_OS_IPHONE 12 | #import 13 | #endif 14 | 15 | @implementation LookinCustomDisplayItemInfo 16 | 17 | - (id)copyWithZone:(NSZone *)zone { 18 | LookinCustomDisplayItemInfo *newInstance = [[LookinCustomDisplayItemInfo allocWithZone:zone] init]; 19 | 20 | if (self.frameInWindow) { 21 | #if TARGET_OS_IPHONE 22 | CGRect rect = [self.frameInWindow CGRectValue]; 23 | newInstance.frameInWindow = [NSValue valueWithCGRect:rect]; 24 | #elif TARGET_OS_MAC 25 | CGRect rect = [self.frameInWindow rectValue]; 26 | newInstance.frameInWindow = [NSValue valueWithRect:rect]; 27 | #endif 28 | } 29 | newInstance.title = self.title; 30 | newInstance.subtitle = self.subtitle; 31 | newInstance.danceuiSource = self.danceuiSource; 32 | 33 | return newInstance; 34 | } 35 | 36 | - (void)encodeWithCoder:(NSCoder *)aCoder { 37 | [aCoder encodeObject:self.frameInWindow forKey:@"frameInWindow"]; 38 | [aCoder encodeObject:self.title forKey:@"title"]; 39 | [aCoder encodeObject:self.subtitle forKey:@"subtitle"]; 40 | [aCoder encodeObject:self.danceuiSource forKey:@"danceuiSource"]; 41 | } 42 | 43 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 44 | if (self = [super init]) { 45 | self.frameInWindow = [aDecoder decodeObjectForKey:@"frameInWindow"]; 46 | self.title = [aDecoder decodeObjectForKey:@"title"]; 47 | self.subtitle = [aDecoder decodeObjectForKey:@"subtitle"]; 48 | self.danceuiSource = [aDecoder decodeObjectForKey:@"danceuiSource"]; 49 | } 50 | return self; 51 | } 52 | 53 | + (BOOL)supportsSecureCoding { 54 | return YES; 55 | } 56 | 57 | @end 58 | 59 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 60 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinDisplayItemDetail.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinDisplayItemDetail.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/2/19. 8 | // https://lookin.work 9 | // 10 | 11 | #import "LookinDefines.h" 12 | 13 | @class LookinAttributesGroup; 14 | @class LookinDisplayItem; 15 | 16 | @interface LookinDisplayItemDetail : NSObject 17 | 18 | @property(nonatomic, assign) unsigned long displayItemOid; 19 | 20 | @property(nonatomic, strong) LookinImage *groupScreenshot; 21 | 22 | @property(nonatomic, strong) LookinImage *soloScreenshot; 23 | 24 | @property(nonatomic, strong) NSValue *frameValue; 25 | 26 | @property(nonatomic, strong) NSValue *boundsValue; 27 | 28 | @property(nonatomic, strong) NSNumber *hiddenValue; 29 | 30 | @property(nonatomic, strong) NSNumber *alphaValue; 31 | 32 | @property(nonatomic, copy) NSString *customDisplayTitle; 33 | 34 | @property(nonatomic, copy) NSString *danceUISource; 35 | 36 | @property(nonatomic, copy) NSArray *attributesGroupList; 37 | @property(nonatomic, copy) NSArray *customAttrGroupList; 38 | 39 | /// 注意 nil 和空数组的区别:nil 表示该属性无意义,空数组表示 subviews 为空 40 | /// Client 1.0.7 & Server 1.2.7 开始支持该属性 41 | /// 默认为 nil 42 | @property(nonatomic, copy) NSArray *subitems; 43 | 44 | /// 当 Server 找不到 task 对应的图层时,会返回一个特殊的 LookinDisplayItemDetail 对象,这个对象会被设置 displayItemOid 和 failureCode,其中 failureCode 会被置为 -1 45 | /// Client 1.0.7 & Server 1.2.7 开始支持该属性 46 | /// 默认为 0 47 | @property(nonatomic, assign) NSInteger failureCode; 48 | 49 | @end 50 | 51 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 52 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinEventHandler.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinEventHandler.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/8/7. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | 15 | @class LookinObject, LookinIvarTrace, LookinStringTwoTuple; 16 | 17 | typedef NS_ENUM(NSInteger, LookinEventHandlerType) { 18 | LookinEventHandlerTypeTargetAction, 19 | LookinEventHandlerTypeGesture 20 | }; 21 | 22 | @interface LookinEventHandler : NSObject 23 | 24 | @property(nonatomic, assign) LookinEventHandlerType handlerType; 25 | 26 | /// 比如 "UIControlEventTouchUpInside", "UITapGestureRecognizer" 27 | @property(nonatomic, copy) NSString *eventName; 28 | /// tuple.first => @"",tuple.second => @"handleTap" 29 | @property(nonatomic, copy) NSArray *targetActions; 30 | 31 | /// 返回当前 recognizer 是继承自哪一个基本款 recognizer。 32 | /// 基本款 recognizer 指的是 TapRecognizer, PinchRecognizer 之类的常见 recognizer 33 | /// 如果当前 recognizer 本身就是基本款 recognizer,则该属性为 nil 34 | @property(nonatomic, copy) NSString *inheritedRecognizerName; 35 | @property(nonatomic, assign) BOOL gestureRecognizerIsEnabled; 36 | @property(nonatomic, copy) NSString *gestureRecognizerDelegator; 37 | @property(nonatomic, copy) NSArray *recognizerIvarTraces; 38 | /// recognizer 对象 39 | @property(nonatomic, assign) unsigned long long recognizerOid; 40 | 41 | @end 42 | 43 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 44 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinHierarchyFile.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinHierarchyFile.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/5/12. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | 15 | @class LookinHierarchyInfo; 16 | 17 | @interface LookinHierarchyFile : NSObject 18 | 19 | /// 记录创建该文件的 LookinServer 的版本 20 | @property(nonatomic, assign) int serverVersion; 21 | 22 | @property(nonatomic, strong) LookinHierarchyInfo *hierarchyInfo; 23 | 24 | @property(nonatomic, copy) NSDictionary *soloScreenshots; 25 | @property(nonatomic, copy) NSDictionary *groupScreenshots; 26 | 27 | /// 验证 file 的版本之类的是否和当前 Lookin 客户端匹配,如果没有问题则返回 nil,如果有问题则返回 error 28 | + (NSError *)verifyHierarchyFile:(LookinHierarchyFile *)file; 29 | 30 | @end 31 | 32 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 33 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinHierarchyInfo.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinDisplayInfo.h 5 | // WeRead 6 | // 7 | // Created by Li Kai on 2018/10/22. 8 | // Copyright © 2018年 tencent. All rights reserved. 9 | // 10 | 11 | 12 | 13 | #import "LookinDefines.h" 14 | #import "TargetConditionals.h" 15 | #if TARGET_OS_IPHONE 16 | #import 17 | #elif TARGET_OS_MAC 18 | #import 19 | #endif 20 | 21 | @class LookinDisplayItem, LookinAttributesGroup, LookinAppInfo; 22 | 23 | @interface LookinHierarchyInfo : NSObject 24 | 25 | #if TARGET_OS_IPHONE 26 | 27 | /// version 可能为 nil,此时说明 Client 版本号 < 1.0.4 28 | + (instancetype)staticInfoWithLookinVersion:(NSString *)version; 29 | 30 | + (instancetype)exportedInfo; 31 | 32 | #endif 33 | 34 | /// 这里其实就是顶端的那几个 UIWindow 35 | @property(nonatomic, copy) NSArray *displayItems; 36 | 37 | @property(nonatomic, copy) NSDictionary *colorAlias; 38 | 39 | @property(nonatomic, copy) NSArray *collapsedClassList; 40 | 41 | @property(nonatomic, strong) LookinAppInfo *appInfo; 42 | 43 | @property(nonatomic, assign) int serverVersion; 44 | 45 | @end 46 | 47 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 48 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinObject.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinObject.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/4/20. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | 15 | @class LookinObjectIvar, LookinIvarTrace; 16 | 17 | @interface LookinObject : NSObject 18 | 19 | #if TARGET_OS_IPHONE 20 | + (instancetype)instanceWithObject:(NSObject *)object; 21 | #endif 22 | 23 | @property(nonatomic, assign) unsigned long oid; 24 | 25 | @property(nonatomic, copy) NSString *memoryAddress; 26 | 27 | /** 28 | 比如有一个 UILabel 对象,则它的 classChainList 为 @[@"UILabel", @"UIView", @"UIResponder", @"NSObject"],而它的 ivarList 长度为 4,idx 从小到大分别是 UILabel 层级的 ivars, UIView 层级的 ivars..... 29 | */ 30 | @property(nonatomic, copy) NSArray *classChainList; 31 | 32 | @property(nonatomic, copy) NSString *specialTrace; 33 | 34 | @property(nonatomic, copy) NSArray *ivarTraces; 35 | 36 | /// 没有 demangle,会包含 Swift Module Name 37 | /// 在 Lookin 的展示中,绝大多数情况下应该使用 lk_demangledSwiftName 38 | - (NSString *)rawClassName; 39 | 40 | @end 41 | 42 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 43 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinStaticAsyncUpdateTask.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinStaticAsyncUpdateTask.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/6/21. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import "LookinDefines.h" 14 | 15 | typedef NS_ENUM(NSInteger, LookinStaticAsyncUpdateTaskType) { 16 | LookinStaticAsyncUpdateTaskTypeNoScreenshot, 17 | LookinStaticAsyncUpdateTaskTypeSoloScreenshot, 18 | LookinStaticAsyncUpdateTaskTypeGroupScreenshot 19 | }; 20 | 21 | typedef NS_ENUM(NSInteger, LookinDetailUpdateTaskAttrRequest) { 22 | /// 由 Server 端自己决定:同一批 task 里,server 端会保证同一个 layer 只会构造一次 attr 23 | /// 在 Lookin turbo 模式下,由于同一个 layer 的 task 可能位于不同批的 task 里,因此这会导致冗余的 attr 构造行为、浪费一定时间 24 | LookinDetailUpdateTaskAttrRequest_Automatic, 25 | /// 需要返回 attr 26 | LookinDetailUpdateTaskAttrRequest_Need, 27 | /// 不需要返回 attr 28 | LookinDetailUpdateTaskAttrRequest_NotNeed 29 | }; 30 | 31 | /// 业务重写了 isEqual 32 | @interface LookinStaticAsyncUpdateTask : NSObject 33 | 34 | @property(nonatomic, assign) unsigned long oid; 35 | 36 | @property(nonatomic, assign) LookinStaticAsyncUpdateTaskType taskType; 37 | 38 | /// 是否需要返回 attr 数据,默认为 Automatic 39 | /// Client 1.0.7 & Server 1.2.7 开始支持这个参数 40 | @property(nonatomic, assign) LookinDetailUpdateTaskAttrRequest attrRequest; 41 | 42 | /// 如果置为 YES,则 server 侧会返回这些基础信息:frameValue, boundsValue, hiddenValue, alphaValue 43 | /// 默认为 NO 44 | /// Client 1.0.7 & Server 1.2.7 开始支持这个参数 45 | @property(nonatomic, assign) BOOL needBasisVisualInfo; 46 | 47 | /// 如果置为 YES,则 server 侧会返回 subitems 48 | /// 默认为 NO 49 | /// Client 1.0.7 & Server 1.2.7 开始支持这个参数 50 | @property(nonatomic, assign) BOOL needSubitems; 51 | 52 | /// Client 1.0.4 开始加入这个参数 53 | @property(nonatomic, copy) NSString *clientReadableVersion; 54 | 55 | #pragma mark - Non Coding 56 | 57 | @property(nonatomic, assign) CGSize frameSize; 58 | 59 | @end 60 | 61 | @interface LookinStaticAsyncUpdateTasksPackage : NSObject 62 | 63 | @property(nonatomic, copy) NSArray *tasks; 64 | 65 | @end 66 | 67 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 68 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinTuple.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinTuples.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/8/14. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | 15 | @interface LookinTwoTuple : NSObject 16 | 17 | @property(nonatomic, strong) NSObject *first; 18 | @property(nonatomic, strong) NSObject *second; 19 | 20 | @end 21 | 22 | @interface LookinStringTwoTuple : NSObject 23 | 24 | + (instancetype)tupleWithFirst:(NSString *)firstString second:(NSString *)secondString; 25 | 26 | @property(nonatomic, copy) NSString *first; 27 | @property(nonatomic, copy) NSString *second; 28 | 29 | @end 30 | 31 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 32 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinTuple.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinTuples.m 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/8/14. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import "LookinTuple.h" 14 | 15 | @implementation LookinTwoTuple 16 | 17 | - (void)encodeWithCoder:(NSCoder *)aCoder { 18 | [aCoder encodeObject:self.first forKey:@"first"]; 19 | [aCoder encodeObject:self.second forKey:@"second"]; 20 | } 21 | 22 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 23 | if (self = [super init]) { 24 | self.first = [aDecoder decodeObjectForKey:@"first"]; 25 | self.second = [aDecoder decodeObjectForKey:@"second"]; 26 | } 27 | return self; 28 | } 29 | 30 | + (BOOL)supportsSecureCoding { 31 | return YES; 32 | } 33 | 34 | - (NSUInteger)hash { 35 | return self.first.hash ^ self.second.hash; 36 | } 37 | 38 | - (BOOL)isEqual:(id)object { 39 | if (self == object) { 40 | return YES; 41 | } 42 | if (![object isKindOfClass:[LookinTwoTuple class]]) { 43 | return NO; 44 | } 45 | LookinTwoTuple *comparedObj = object; 46 | if ([self.first isEqual:comparedObj.first] && [self.second isEqual:comparedObj.second]) { 47 | return YES; 48 | } 49 | return NO; 50 | } 51 | 52 | @end 53 | 54 | @implementation LookinStringTwoTuple 55 | 56 | + (instancetype)tupleWithFirst:(NSString *)firstString second:(NSString *)secondString { 57 | LookinStringTwoTuple *tuple = [LookinStringTwoTuple new]; 58 | tuple.first = firstString; 59 | tuple.second = secondString; 60 | return tuple; 61 | } 62 | 63 | #pragma mark - 64 | 65 | - (id)copyWithZone:(NSZone *)zone { 66 | LookinStringTwoTuple *newTuple = [[LookinStringTwoTuple allocWithZone:zone] init]; 67 | newTuple.first = self.first; 68 | newTuple.second = self.second; 69 | return newTuple; 70 | } 71 | 72 | #pragma mark - 73 | 74 | - (void)encodeWithCoder:(NSCoder *)aCoder { 75 | [aCoder encodeObject:self.first forKey:@"first"]; 76 | [aCoder encodeObject:self.second forKey:@"second"]; 77 | } 78 | 79 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 80 | if (self = [super init]) { 81 | self.first = [aDecoder decodeObjectForKey:@"first"]; 82 | self.second = [aDecoder decodeObjectForKey:@"second"]; 83 | } 84 | return self; 85 | } 86 | 87 | + (BOOL)supportsSecureCoding { 88 | return YES; 89 | } 90 | 91 | @end 92 | 93 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 94 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinWeakContainer.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinWeakContainer.h 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/8/14. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import 14 | 15 | @interface LookinWeakContainer : NSObject 16 | 17 | + (instancetype)containerWithObject:(id)object; 18 | 19 | @property (nonatomic, weak) id object; 20 | 21 | @end 22 | 23 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 24 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/LookinWeakContainer.m: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // LookinWeakContainer.m 5 | // Lookin 6 | // 7 | // Created by Li Kai on 2019/8/14. 8 | // https://lookin.work 9 | // 10 | 11 | 12 | 13 | #import "LookinWeakContainer.h" 14 | 15 | @implementation LookinWeakContainer 16 | 17 | + (instancetype)containerWithObject:(id)object { 18 | LookinWeakContainer *container = [LookinWeakContainer new]; 19 | container.object = object; 20 | return container; 21 | } 22 | 23 | - (NSUInteger)hash { 24 | return [self.object hash]; 25 | } 26 | 27 | - (BOOL)isEqual:(id)object { 28 | if (self == object) { 29 | return YES; 30 | } 31 | if (![object isKindOfClass:[LookinWeakContainer class]]) { 32 | return NO; 33 | } 34 | LookinWeakContainer *comparedObj = object; 35 | if ([self.object isEqual:comparedObj.object]) { 36 | return YES; 37 | } 38 | return NO; 39 | } 40 | 41 | @end 42 | 43 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 44 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Peertalk/Lookin_PTPrivate.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | 4 | 5 | #if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && (!defined(__IPHONE_6_0) || __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_6_0)) || \ 6 | (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && (!defined(__MAC_10_8) || __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_8)) 7 | #define PT_DISPATCH_RETAIN_RELEASE 1 8 | #else 9 | #define PT_DISPATCH_RETAIN_RELEASE 0 10 | #endif 11 | 12 | #if PT_DISPATCH_RETAIN_RELEASE 13 | #define PT_PRECISE_LIFETIME 14 | #define PT_PRECISE_LIFETIME_UNUSED 15 | #else 16 | #define PT_PRECISE_LIFETIME __attribute__((objc_precise_lifetime)) 17 | #define PT_PRECISE_LIFETIME_UNUSED __attribute__((objc_precise_lifetime, unused)) 18 | #endif 19 | 20 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 21 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/LookinServer/Src/Main/Shared/Peertalk/Peertalk.h: -------------------------------------------------------------------------------- 1 | #ifdef SHOULD_COMPILE_LOOKIN_SERVER 2 | 3 | // 4 | // Peertalk.h 5 | // Peertalk 6 | // 7 | // Created by Marek Cirkos on 12/04/2016. 8 | // 9 | // 10 | 11 | 12 | 13 | #import 14 | 15 | //! Project version number for Peertalk. 16 | FOUNDATION_EXPORT double PeertalkVersionNumber; 17 | 18 | //! Project version string for Peertalk. 19 | FOUNDATION_EXPORT const unsigned char PeertalkVersionString[]; 20 | 21 | // In this header, you should import all the public headers of your framework using statements like #import 22 | 23 | 24 | #import "Lookin_PTChannel.h" 25 | #import "Lookin_PTProtocol.h" 26 | #import "Lookin_PTUSBHub.h" 27 | 28 | #endif /* SHOULD_COMPILE_LOOKIN_SERVER */ 29 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FunnyButton (0.1.5) 3 | - LookinServer (1.2.7): 4 | - LookinServer/Core (= 1.2.7) 5 | - LookinServer/Core (1.2.7) 6 | - ScreenRotator (0.1.1) 7 | - SnapKit (5.7.1) 8 | 9 | DEPENDENCIES: 10 | - FunnyButton 11 | - LookinServer 12 | - ScreenRotator (from `../`) 13 | - SnapKit 14 | 15 | SPEC REPOS: 16 | trunk: 17 | - FunnyButton 18 | - LookinServer 19 | - SnapKit 20 | 21 | EXTERNAL SOURCES: 22 | ScreenRotator: 23 | :path: "../" 24 | 25 | SPEC CHECKSUMS: 26 | FunnyButton: e8202ece176aaa5f7ead1e5c8eb0f29d28fc5ad4 27 | LookinServer: 36f1a0ad280de34b9794cf8825867fcc2dd93e75 28 | ScreenRotator: 2ca2f074f144e12dc95f49ba18b91872d4a2a0d0 29 | SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a 30 | 31 | PODFILE CHECKSUM: b182cf5cddc3c65616d48ed31c855c8522efa157 32 | 33 | COCOAPODS: 1.15.2 34 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Pods.xcodeproj/xcuserdata/aa.xcuserdatad/xcschemes/FunnyButton.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Pods.xcodeproj/xcuserdata/aa.xcuserdatad/xcschemes/LookinServer.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Pods.xcodeproj/xcuserdata/aa.xcuserdatad/xcschemes/Pods-ScreenRotatorDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Pods.xcodeproj/xcuserdata/aa.xcuserdatad/xcschemes/SnapKit.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 53 | 54 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Pods.xcodeproj/xcuserdata/aa.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | FunnyButton.xcscheme 8 | 9 | isShown 10 | 11 | 12 | LookinServer.xcscheme 13 | 14 | isShown 15 | 16 | 17 | Pods-ScreenRotatorDemo.xcscheme 18 | 19 | isShown 20 | 21 | 22 | ScreenRotator.xcscheme 23 | 24 | isShown 25 | 26 | 27 | SnapKit-SnapKit_Privacy.xcscheme 28 | 29 | isShown 30 | 31 | 32 | SnapKit.xcscheme 33 | 34 | isShown 35 | 36 | 37 | 38 | SuppressBuildableAutocreation 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Pods.xcodeproj/xcuserdata/zhoujianping.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | FunnyButton.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 1 11 | 12 | LookinServer.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 4 16 | 17 | Pods-ScreenRotatorDemo.xcscheme_^#shared#^_ 18 | 19 | orderHint 20 | 2 21 | 22 | SnapKit.xcscheme_^#shared#^_ 23 | 24 | orderHint 25 | 3 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintConfig.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection 27 | #else 28 | import AppKit 29 | public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection 30 | #endif 31 | 32 | 33 | public struct ConstraintConfig { 34 | 35 | public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight 36 | 37 | } 38 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintDirectionalInsetTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | #if canImport(UIKit) 31 | public protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget { 32 | } 33 | 34 | @available(iOS 11.0, tvOS 11.0, *) 35 | extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget { 36 | } 37 | 38 | extension ConstraintDirectionalInsetTarget { 39 | 40 | @available(iOS 11.0, tvOS 11.0, *) 41 | internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets { 42 | if let amount = self as? ConstraintDirectionalInsets { 43 | return amount 44 | } else { 45 | return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0) 46 | } 47 | } 48 | } 49 | #endif 50 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintDirectionalInsets.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 32 | @available(iOS 11.0, tvOS 11.0, *) 33 | public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets 34 | #endif 35 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintInsets.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 32 | public typealias ConstraintInsets = UIEdgeInsets 33 | #else 34 | public typealias ConstraintInsets = NSEdgeInsets 35 | #endif 36 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public final class ConstraintItem { 32 | 33 | internal weak var target: AnyObject? 34 | internal let attributes: ConstraintAttributes 35 | 36 | internal init(target: AnyObject?, attributes: ConstraintAttributes) { 37 | self.target = target 38 | self.attributes = attributes 39 | } 40 | 41 | internal var layoutConstraintItem: LayoutConstraintItem? { 42 | return self.target as? LayoutConstraintItem 43 | } 44 | 45 | } 46 | 47 | public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool { 48 | // pointer equality 49 | guard lhs !== rhs else { 50 | return true 51 | } 52 | 53 | // must both have valid targets and identical attributes 54 | guard let target1 = lhs.target, 55 | let target2 = rhs.target, 56 | target1 === target2 && lhs.attributes == rhs.attributes else { 57 | return false 58 | } 59 | 60 | return true 61 | } 62 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintLayoutGuide+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 9.0, OSX 10.11, *) 30 | public extension ConstraintLayoutGuide { 31 | 32 | var snp: ConstraintLayoutGuideDSL { 33 | return ConstraintLayoutGuideDSL(guide: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintLayoutGuide.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 32 | @available(iOS 9.0, *) 33 | public typealias ConstraintLayoutGuide = UILayoutGuide 34 | #else 35 | @available(OSX 10.11, *) 36 | public typealias ConstraintLayoutGuide = NSLayoutGuide 37 | #endif 38 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintLayoutGuideDSL.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | @available(iOS 9.0, OSX 10.11, *) 32 | public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL { 33 | 34 | @discardableResult 35 | public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { 36 | return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure) 37 | } 38 | 39 | public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { 40 | ConstraintMaker.makeConstraints(item: self.guide, closure: closure) 41 | } 42 | 43 | public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { 44 | ConstraintMaker.remakeConstraints(item: self.guide, closure: closure) 45 | } 46 | 47 | public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { 48 | ConstraintMaker.updateConstraints(item: self.guide, closure: closure) 49 | } 50 | 51 | public func removeConstraints() { 52 | ConstraintMaker.removeConstraints(item: self.guide) 53 | } 54 | 55 | public var target: AnyObject? { 56 | return self.guide 57 | } 58 | 59 | internal let guide: ConstraintLayoutGuide 60 | 61 | internal init(guide: ConstraintLayoutGuide) { 62 | self.guide = guide 63 | 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintLayoutSupport.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 32 | @available(iOS 8.0, *) 33 | public typealias ConstraintLayoutSupport = UILayoutSupport 34 | #else 35 | public class ConstraintLayoutSupport {} 36 | #endif 37 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintLayoutSupportDSL.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | @available(iOS 8.0, *) 32 | public struct ConstraintLayoutSupportDSL: ConstraintDSL { 33 | 34 | public var target: AnyObject? { 35 | return self.support 36 | } 37 | 38 | internal let support: ConstraintLayoutSupport 39 | 40 | internal init(support: ConstraintLayoutSupport) { 41 | self.support = support 42 | 43 | } 44 | 45 | public var top: ConstraintItem { 46 | return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) 47 | } 48 | 49 | public var bottom: ConstraintItem { 50 | return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) 51 | } 52 | 53 | public var height: ConstraintItem { 54 | return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintMakerFinalizable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public class ConstraintMakerFinalizable { 32 | 33 | internal let description: ConstraintDescription 34 | 35 | internal init(_ description: ConstraintDescription) { 36 | self.description = description 37 | } 38 | 39 | @discardableResult 40 | public func labeled(_ label: String) -> ConstraintMakerFinalizable { 41 | self.description.label = label 42 | return self 43 | } 44 | 45 | public var constraint: Constraint { 46 | return self.description.constraint! 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintMultiplierTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol ConstraintMultiplierTarget { 32 | 33 | var constraintMultiplierTargetValue: CGFloat { get } 34 | 35 | } 36 | 37 | extension Int: ConstraintMultiplierTarget { 38 | 39 | public var constraintMultiplierTargetValue: CGFloat { 40 | return CGFloat(self) 41 | } 42 | 43 | } 44 | 45 | extension UInt: ConstraintMultiplierTarget { 46 | 47 | public var constraintMultiplierTargetValue: CGFloat { 48 | return CGFloat(self) 49 | } 50 | 51 | } 52 | 53 | extension Float: ConstraintMultiplierTarget { 54 | 55 | public var constraintMultiplierTargetValue: CGFloat { 56 | return CGFloat(self) 57 | } 58 | 59 | } 60 | 61 | extension Double: ConstraintMultiplierTarget { 62 | 63 | public var constraintMultiplierTargetValue: CGFloat { 64 | return CGFloat(self) 65 | } 66 | 67 | } 68 | 69 | extension CGFloat: ConstraintMultiplierTarget { 70 | 71 | public var constraintMultiplierTargetValue: CGFloat { 72 | return self 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintOffsetTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol ConstraintOffsetTarget: ConstraintConstantTarget { 32 | } 33 | 34 | extension Int: ConstraintOffsetTarget { 35 | } 36 | 37 | extension UInt: ConstraintOffsetTarget { 38 | } 39 | 40 | extension Float: ConstraintOffsetTarget { 41 | } 42 | 43 | extension Double: ConstraintOffsetTarget { 44 | } 45 | 46 | extension CGFloat: ConstraintOffsetTarget { 47 | } 48 | 49 | extension ConstraintOffsetTarget { 50 | 51 | internal var constraintOffsetTargetValue: CGFloat { 52 | let offset: CGFloat 53 | if let amount = self as? Float { 54 | offset = CGFloat(amount) 55 | } else if let amount = self as? Double { 56 | offset = CGFloat(amount) 57 | } else if let amount = self as? CGFloat { 58 | offset = CGFloat(amount) 59 | } else if let amount = self as? Int { 60 | offset = CGFloat(amount) 61 | } else if let amount = self as? UInt { 62 | offset = CGFloat(amount) 63 | } else { 64 | offset = 0.0 65 | } 66 | return offset 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintPriorityTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol ConstraintPriorityTarget { 32 | 33 | var constraintPriorityTargetValue: Float { get } 34 | 35 | } 36 | 37 | extension Int: ConstraintPriorityTarget { 38 | 39 | public var constraintPriorityTargetValue: Float { 40 | return Float(self) 41 | } 42 | 43 | } 44 | 45 | extension UInt: ConstraintPriorityTarget { 46 | 47 | public var constraintPriorityTargetValue: Float { 48 | return Float(self) 49 | } 50 | 51 | } 52 | 53 | extension Float: ConstraintPriorityTarget { 54 | 55 | public var constraintPriorityTargetValue: Float { 56 | return self 57 | } 58 | 59 | } 60 | 61 | extension Double: ConstraintPriorityTarget { 62 | 63 | public var constraintPriorityTargetValue: Float { 64 | return Float(self) 65 | } 66 | 67 | } 68 | 69 | extension CGFloat: ConstraintPriorityTarget { 70 | 71 | public var constraintPriorityTargetValue: Float { 72 | return Float(self) 73 | } 74 | 75 | } 76 | 77 | #if canImport(UIKit) 78 | extension UILayoutPriority: ConstraintPriorityTarget { 79 | 80 | public var constraintPriorityTargetValue: Float { 81 | return self.rawValue 82 | } 83 | 84 | } 85 | #endif 86 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintRelatableTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public protocol ConstraintRelatableTarget { 32 | } 33 | 34 | extension Int: ConstraintRelatableTarget { 35 | } 36 | 37 | extension UInt: ConstraintRelatableTarget { 38 | } 39 | 40 | extension Float: ConstraintRelatableTarget { 41 | } 42 | 43 | extension Double: ConstraintRelatableTarget { 44 | } 45 | 46 | extension CGFloat: ConstraintRelatableTarget { 47 | } 48 | 49 | extension CGSize: ConstraintRelatableTarget { 50 | } 51 | 52 | extension CGPoint: ConstraintRelatableTarget { 53 | } 54 | 55 | extension ConstraintInsets: ConstraintRelatableTarget { 56 | } 57 | 58 | #if canImport(UIKit) 59 | @available(iOS 11.0, tvOS 11.0, *) 60 | extension ConstraintDirectionalInsets: ConstraintRelatableTarget { 61 | } 62 | #endif 63 | 64 | extension ConstraintItem: ConstraintRelatableTarget { 65 | } 66 | 67 | extension ConstraintView: ConstraintRelatableTarget { 68 | } 69 | 70 | @available(iOS 9.0, OSX 10.11, *) 71 | extension ConstraintLayoutGuide: ConstraintRelatableTarget { 72 | } 73 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintRelation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | internal enum ConstraintRelation : Int { 32 | case equal = 1 33 | case lessThanOrEqual 34 | case greaterThanOrEqual 35 | 36 | internal var layoutRelation: LayoutRelation { 37 | get { 38 | switch(self) { 39 | case .equal: 40 | return .equal 41 | case .lessThanOrEqual: 42 | return .lessThanOrEqual 43 | case .greaterThanOrEqual: 44 | return .greaterThanOrEqual 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/ConstraintView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 32 | public typealias ConstraintView = UIView 33 | #else 34 | public typealias ConstraintView = NSView 35 | #endif 36 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/LayoutConstraint.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public class LayoutConstraint : NSLayoutConstraint { 32 | 33 | public var label: String? { 34 | get { 35 | return self.identifier 36 | } 37 | set { 38 | self.identifier = newValue 39 | } 40 | } 41 | 42 | internal weak var constraint: Constraint? = nil 43 | 44 | } 45 | 46 | internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool { 47 | // If firstItem or secondItem on either constraint has a dangling pointer 48 | // this comparison can cause a crash. The solution for this is to ensure 49 | // your layout code hold strong references to things like Views, LayoutGuides 50 | // and LayoutAnchors as SnapKit will not keep strong references to any of these. 51 | guard lhs.firstAttribute == rhs.firstAttribute && 52 | lhs.secondAttribute == rhs.secondAttribute && 53 | lhs.relation == rhs.relation && 54 | lhs.priority == rhs.priority && 55 | lhs.multiplier == rhs.multiplier && 56 | lhs.secondItem === rhs.secondItem && 57 | lhs.firstItem === rhs.firstItem else { 58 | return false 59 | } 60 | return true 61 | } 62 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyTracking 6 | 7 | NSPrivacyAccessedAPITypes 8 | 9 | NSPrivacyCollectedDataTypes 10 | 11 | NSPrivacyTrackingDomains 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/Typealiases.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | import Foundation 25 | 26 | #if canImport(UIKit) 27 | import UIKit 28 | #if swift(>=4.2) 29 | typealias LayoutRelation = NSLayoutConstraint.Relation 30 | typealias LayoutAttribute = NSLayoutConstraint.Attribute 31 | #else 32 | typealias LayoutRelation = NSLayoutRelation 33 | typealias LayoutAttribute = NSLayoutAttribute 34 | #endif 35 | typealias LayoutPriority = UILayoutPriority 36 | #else 37 | import AppKit 38 | typealias LayoutRelation = NSLayoutConstraint.Relation 39 | typealias LayoutAttribute = NSLayoutConstraint.Attribute 40 | typealias LayoutPriority = NSLayoutConstraint.Priority 41 | #endif 42 | 43 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/SnapKit/Sources/UILayoutSupport+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if canImport(UIKit) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 8.0, *) 30 | public extension ConstraintLayoutSupport { 31 | 32 | var snp: ConstraintLayoutSupportDSL { 33 | return ConstraintLayoutSupportDSL(support: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/FunnyButton/FunnyButton-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/FunnyButton/FunnyButton-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_FunnyButton : NSObject 3 | @end 4 | @implementation PodsDummy_FunnyButton 5 | @end 6 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/FunnyButton/FunnyButton-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 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/FunnyButton/FunnyButton-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 FunnyButtonVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char FunnyButtonVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/FunnyButton/FunnyButton.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FunnyButton 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FunnyButton 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/FunnyButton/FunnyButton.modulemap: -------------------------------------------------------------------------------- 1 | framework module FunnyButton { 2 | umbrella header "FunnyButton-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/FunnyButton/FunnyButton.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FunnyButton 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FunnyButton 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/LookinServer/LookinServer-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.2.7 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/LookinServer/LookinServer-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_LookinServer : NSObject 3 | @end 4 | @implementation PodsDummy_LookinServer 5 | @end 6 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/LookinServer/LookinServer-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 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/LookinServer/LookinServer.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/LookinServer 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) SHOULD_COMPILE_LOOKIN_SERVER=1 4 | OTHER_LDFLAGS = $(inherited) -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/LookinServer 10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) SHOULD_COMPILE_LOOKIN_SERVER 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/LookinServer/LookinServer.modulemap: -------------------------------------------------------------------------------- 1 | framework module LookinServer { 2 | umbrella header "LookinServer-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/LookinServer/LookinServer.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/LookinServer 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) SHOULD_COMPILE_LOOKIN_SERVER=1 4 | OTHER_LDFLAGS = $(inherited) -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/LookinServer 10 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) SHOULD_COMPILE_LOOKIN_SERVER 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ScreenRotatorDemo : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ScreenRotatorDemo 5 | @end 6 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/FunnyButton/FunnyButton.framework 3 | ${BUILT_PRODUCTS_DIR}/LookinServer/LookinServer.framework 4 | ${BUILT_PRODUCTS_DIR}/ScreenRotator/ScreenRotator.framework 5 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FunnyButton.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LookinServer.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ScreenRotator.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/FunnyButton/FunnyButton.framework 3 | ${BUILT_PRODUCTS_DIR}/ScreenRotator/ScreenRotator.framework 4 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FunnyButton.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ScreenRotator.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo-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_ScreenRotatorDemoVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_ScreenRotatorDemoVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FunnyButton" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer" "${PODS_CONFIGURATION_BUILD_DIR}/ScreenRotator" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FunnyButton/FunnyButton.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LookinServer/LookinServer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ScreenRotator/ScreenRotator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' 7 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift 8 | OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "FunnyButton" -framework "LookinServer" -framework "ScreenRotator" -framework "SnapKit" -framework "UIKit" 9 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 10 | PODS_BUILD_DIR = ${BUILD_DIR} 11 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 12 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 13 | PODS_ROOT = ${SRCROOT}/Pods 14 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 16 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_ScreenRotatorDemo { 2 | umbrella header "Pods-ScreenRotatorDemo-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/Pods-ScreenRotatorDemo/Pods-ScreenRotatorDemo.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FunnyButton" "${PODS_CONFIGURATION_BUILD_DIR}/ScreenRotator" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FunnyButton/FunnyButton.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ScreenRotator/ScreenRotator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' 7 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift 8 | OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "FunnyButton" -framework "ScreenRotator" -framework "SnapKit" 9 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 10 | PODS_BUILD_DIR = ${BUILD_DIR} 11 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 12 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 13 | PODS_ROOT = ${SRCROOT}/Pods 14 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 16 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/ScreenRotator/ScreenRotator-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/ScreenRotator/ScreenRotator-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_ScreenRotator : NSObject 3 | @end 4 | @implementation PodsDummy_ScreenRotator 5 | @end 6 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/ScreenRotator/ScreenRotator-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 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/ScreenRotator/ScreenRotator-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 "JPScreenRotator.h" 14 | 15 | FOUNDATION_EXPORT double ScreenRotatorVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char ScreenRotatorVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/ScreenRotator/ScreenRotator.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ScreenRotator 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/ScreenRotator/ScreenRotator.modulemap: -------------------------------------------------------------------------------- 1 | framework module ScreenRotator { 2 | umbrella header "ScreenRotator-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/ScreenRotator/ScreenRotator.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ScreenRotator 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleIdentifier 8 | ${PRODUCT_BUNDLE_IDENTIFIER} 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundleName 12 | ${PRODUCT_NAME} 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 5.7.1 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/SnapKit/SnapKit-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 5.7.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/SnapKit/SnapKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SnapKit : NSObject 3 | @end 4 | @implementation PodsDummy_SnapKit 5 | @end 6 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SnapKitVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift 5 | OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 10 | PODS_ROOT = ${SRCROOT} 11 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 12 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 13 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 14 | SKIP_INSTALL = YES 15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 16 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/SnapKit/SnapKit.modulemap: -------------------------------------------------------------------------------- 1 | framework module SnapKit { 2 | umbrella header "SnapKit-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift 5 | OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 10 | PODS_ROOT = ${SRCROOT} 11 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 12 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 13 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 14 | SKIP_INSTALL = YES 15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 16 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcodeproj/project.xcworkspace/xcuserdata/aa.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo.xcodeproj/project.xcworkspace/xcuserdata/aa.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcodeproj/xcuserdata/aa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 9 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcodeproj/xcuserdata/aa.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ScreenRotator.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 4 11 | 12 | ScreenRotatorDemo.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 4 16 | 17 | ScreenRotator_Demo.xcscheme_^#shared#^_ 18 | 19 | orderHint 20 | 0 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcodeproj/xcuserdata/zhoujianping.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ScreenRotatorDemo.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 006915BA2903E78500B53771 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/xcuserdata/aa.xcuserdatad/IDEFindNavigatorScopes.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/xcuserdata/aa.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/xcuserdata/aa.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/xcuserdata/aa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/xcuserdata/zhoujianping.xcuserdatad/IDEFindNavigatorScopes.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/xcuserdata/zhoujianping.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/xcuserdata/zhoujianping.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo.xcworkspace/xcuserdata/zhoujianping.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // ScreenRotatorDemo 4 | // 5 | // Created by 周健平 on 2022/10/28. 6 | // 7 | 8 | import UIKit 9 | import FunnyButton 10 | import ScreenRotator 11 | 12 | @main 13 | class AppDelegate: UIResponder, UIApplicationDelegate { 14 | 15 | @objc var window: UIWindow? { 16 | set {} 17 | get { 18 | if #available(iOS 13.0, *) { 19 | guard let scene = UIApplication.shared.connectedScenes.first, 20 | let windowSceneDelegate = scene.delegate as? UIWindowSceneDelegate, 21 | let window = windowSceneDelegate.window 22 | else { 23 | return nil 24 | } 25 | return window 26 | } else { 27 | return UIApplication.shared.delegate?.window ?? nil 28 | } 29 | } 30 | } 31 | 32 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 33 | 34 | ScreenRotator.shared.isLockOrientationWhenDeviceOrientationDidChange = false 35 | ScreenRotator.shared.isLockLandscapeWhenDeviceOrientationDidChange = false 36 | ScreenRotator.shared.orientationMaskDidChange = { orientationMask in 37 | FunnyButton.orientationMask = orientationMask 38 | } 39 | 40 | return true 41 | } 42 | 43 | func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 44 | // OC 45 | // return JPScreenRotator.sharedInstance().orientationMask 46 | 47 | // Swift 48 | return ScreenRotator.shared.orientationMask 49 | } 50 | 51 | } 52 | 53 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/screen_toggle.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "appearances" : [ 9 | { 10 | "appearance" : "luminosity", 11 | "value" : "dark" 12 | } 13 | ], 14 | "idiom" : "universal", 15 | "scale" : "1x" 16 | }, 17 | { 18 | "filename" : "screen_toggle_black@2x.png", 19 | "idiom" : "universal", 20 | "scale" : "2x" 21 | }, 22 | { 23 | "appearances" : [ 24 | { 25 | "appearance" : "luminosity", 26 | "value" : "dark" 27 | } 28 | ], 29 | "filename" : "screen_toggle_while@2x.png", 30 | "idiom" : "universal", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "filename" : "screen_toggle_black@3x.png", 35 | "idiom" : "universal", 36 | "scale" : "3x" 37 | }, 38 | { 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "filename" : "screen_toggle_while@3x.png", 46 | "idiom" : "universal", 47 | "scale" : "3x" 48 | } 49 | ], 50 | "info" : { 51 | "author" : "xcode", 52 | "version" : 1 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/screen_toggle.imageset/screen_toggle_black@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/screen_toggle.imageset/screen_toggle_black@2x.png -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/screen_toggle.imageset/screen_toggle_black@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/screen_toggle.imageset/screen_toggle_black@3x.png -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/screen_toggle.imageset/screen_toggle_while@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/screen_toggle.imageset/screen_toggle_while@2x.png -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/screen_toggle.imageset/screen_toggle_while@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo/Assets.xcassets/screen_toggle.imageset/screen_toggle_while@3x.png -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Base/BaseViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseViewController.swift 3 | // ScreenRotatorDemo 4 | // 5 | // Created by 周健平 on 2022/10/28. 6 | // 7 | 8 | import UIKit 9 | import SnapKit 10 | import ScreenRotator 11 | 12 | class BaseViewController: UIViewController { 13 | private let bgImgView = UIImageView() 14 | private let portraitImgName: String 15 | private let landscapeImgName: String 16 | private(set) var isPortrait: Bool = true { 17 | didSet { 18 | guard isPortrait != oldValue else { return } 19 | updateBgImage(animated: true) 20 | screenSwitched(animated: true) 21 | } 22 | } 23 | 24 | init(portraitImgName: String, landscapeImgName: String, isPortrait: Bool) { 25 | self.portraitImgName = portraitImgName 26 | self.landscapeImgName = landscapeImgName 27 | self.isPortrait = isPortrait 28 | super.init(nibName: nil, bundle: nil) 29 | } 30 | 31 | required init?(coder: NSCoder) { 32 | fatalError("init(coder:) has not been implemented") 33 | } 34 | 35 | override func viewDidLoad() { 36 | super.viewDidLoad() 37 | view.clipsToBounds = true 38 | setupBgImageView() 39 | updateBgImage(animated: false) 40 | } 41 | 42 | override func viewWillAppear(_ animated: Bool) { 43 | super.viewWillAppear(animated) 44 | navigationController?.setNavigationBarHidden(true, animated: true) 45 | navigationController?.interactivePopGestureRecognizer?.isEnabled = false 46 | } 47 | 48 | override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 49 | DispatchQueue.main.async { 50 | self.isPortrait = ScreenRotator.shared.isPortrait 51 | } 52 | } 53 | 54 | func screenSwitched(animated: Bool) {} 55 | } 56 | 57 | private extension BaseViewController { 58 | func setupBgImageView() { 59 | bgImgView.contentMode = .scaleAspectFill 60 | view.insertSubview(bgImgView, at: 0) 61 | bgImgView.snp.makeConstraints { $0.edges.equalToSuperview() } 62 | } 63 | 64 | func updateBgImage(animated: Bool) { 65 | let imgName = isPortrait ? portraitImgName : landscapeImgName 66 | guard let imgPath = Bundle.main.path(forResource: imgName, ofType: "jpg"), 67 | let image = UIImage(contentsOfFile: imgPath) else { return } 68 | if animated { 69 | UIView.transition(with: bgImgView, duration: 0.3, options: .transitionCrossDissolve) {} 70 | } 71 | bgImgView.image = image 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIApplicationSceneManifest 6 | 7 | UIApplicationSupportsMultipleScenes 8 | 9 | UISceneConfigurations 10 | 11 | UIWindowSceneSessionRoleApplication 12 | 13 | 14 | UISceneConfigurationName 15 | Default Configuration 16 | UISceneDelegateClassName 17 | $(PRODUCT_MODULE_NAME).SceneDelegate 18 | UISceneStoryboardFile 19 | Main 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Main/MainWindow.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainWindow.swift 3 | // ScreenRotatorDemo 4 | // 5 | // Created by 周健平 on 2022/10/28. 6 | // 7 | 8 | import UIKit 9 | 10 | class MainWindow: UIWindow { 11 | static let shared = MainWindow() 12 | 13 | init() { 14 | super.init(frame: UIScreen.main.bounds) 15 | clipsToBounds = true 16 | } 17 | 18 | required init?(coder: NSCoder) { 19 | fatalError("init(coder:) has not been implemented") 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Modifiers/AnimatableModifiers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimatableModifiers.swift 3 | // ScreenRotatorDemo 4 | // 5 | // Created by 周健平 on 2022/10/28. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct AnimatableForegroundColorModifier: AnimatableModifier { 11 | let fromRgba: UIColor.RGBA 12 | let toRgba: UIColor.RGBA 13 | var progress: CGFloat 14 | 15 | init(from: UIColor, to: UIColor, progress: CGFloat) { 16 | self.fromRgba = from.rgba 17 | self.toRgba = to.rgba 18 | self.progress = progress 19 | } 20 | 21 | var color: Color { 22 | let rgba = UIColor.RGBA.fromSourceRgba(fromRgba, toTargetRgba: toRgba, progress: progress) 23 | return Color(red: rgba.r / 255, green: rgba.g / 255, blue: rgba.b / 255, opacity: rgba.a) 24 | } 25 | 26 | var animatableData: CGFloat { 27 | set { 28 | if newValue < 0 { 29 | progress = 0 30 | } else if newValue > 1 { 31 | progress = 1 32 | } else { 33 | progress = newValue 34 | } 35 | } 36 | get { progress } 37 | } 38 | 39 | func body(content: Content) -> some View { 40 | content 41 | .foregroundColor(color) 42 | } 43 | } 44 | 45 | extension View { 46 | func animatableForegroundColor(from: UIColor, 47 | to: UIColor, 48 | progress: CGFloat) -> some View { 49 | modifier(AnimatableForegroundColorModifier(from: from, to: to, progress: progress)) 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Modifiers/Modifiers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Modifiers.swift 3 | // ScreenRotatorDemo 4 | // 5 | // Created by 周健平 on 2022/10/28. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ShowStyle: ViewModifier { 11 | let isShow: Bool 12 | 13 | let fromScale: CGFloat 14 | let toScale: CGFloat 15 | 16 | let fromOpacity: CGFloat 17 | let toOpacity: CGFloat 18 | 19 | func body(content: Content) -> some View { 20 | content 21 | .scaleEffect(isShow ? 1 : 0.8) 22 | .opacity(isShow ? 1 : 0) 23 | .animation(.spring(response: 0.4, 24 | dampingFraction: 0.45, 25 | blendDuration: 0), value: isShow) 26 | } 27 | } 28 | 29 | extension View { 30 | func showStyle(isShow: Bool, 31 | fromScale: CGFloat = 0.8, toScale: CGFloat = 1, 32 | fromOpacity: CGFloat = 0, toOpacity: CGFloat = 1) -> some View { 33 | modifier( 34 | ShowStyle(isShow: isShow, 35 | fromScale: fromScale, 36 | toScale: toScale, 37 | fromOpacity: fromOpacity, 38 | toOpacity: toOpacity) 39 | ) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Resources/IMG_6350.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo/Resources/IMG_6350.jpg -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Resources/IMG_6351.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo/Resources/IMG_6351.jpg -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Resources/IMG_6352.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo/Resources/IMG_6352.jpg -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Resources/IMG_6353.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo/Resources/IMG_6353.jpg -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/Resources/ali.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/ScreenRotator/b3324162cd1b334a54103a05d21a6226afc84f92/ScreenRotatorDemo/ScreenRotatorDemo/Resources/ali.mp4 -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // ScreenRotatorDemo 4 | // 5 | // Created by 周健平 on 2022/10/28. 6 | // 7 | 8 | import UIKit 9 | 10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 11 | 12 | var window: UIWindow? 13 | 14 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 15 | guard let windowScene = (scene as? UIWindowScene) else { return } 16 | 17 | MainWindow.shared.windowScene = windowScene 18 | MainWindow.shared.rootViewController = UINavigationController(rootViewController: MainViewController()) 19 | MainWindow.shared.makeKeyAndVisible() 20 | 21 | window = MainWindow.shared 22 | } 23 | 24 | } 25 | 26 | -------------------------------------------------------------------------------- /ScreenRotatorDemo/ScreenRotatorDemo/ScreenRotator-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import 6 | #import "JPScreenRotator.h" 7 | --------------------------------------------------------------------------------