├── .gitignore ├── Example ├── TFPopupExtension.png ├── TFPopupOperatingInstruction.png ├── TFPopupParam.png ├── UIView+TFPopup.png └── delegateAndDatasource.png ├── LICENSE ├── README.md ├── README_EN.md ├── TFPopup.podspec ├── TFPopup ├── NSObject+TFPopupMethodExchange.h ├── NSObject+TFPopupMethodExchange.m ├── TFPopup.h ├── TFPopupConst.h ├── TFPopupExtension.h ├── TFPopupExtension.m ├── TFPopupLoading.h ├── TFPopupLoading.m ├── TFPopupParam.h ├── TFPopupParam.m ├── TFPopupToast.h ├── TFPopupToast.m ├── UIScrollView+TFPopup.h ├── UIScrollView+TFPopup.m ├── UIView+TFPopup.h └── UIView+TFPopup.m ├── TFPopupDemo ├── Podfile ├── Podfile.lock ├── Pods │ ├── Headers │ │ ├── Private │ │ │ └── IQKeyboardManager │ │ │ │ ├── IQBarButtonItem.h │ │ │ │ ├── IQKeyboardManager.h │ │ │ │ ├── IQKeyboardManagerConstants.h │ │ │ │ ├── IQKeyboardManagerConstantsInternal.h │ │ │ │ ├── IQKeyboardReturnKeyHandler.h │ │ │ │ ├── IQNSArray+Sort.h │ │ │ │ ├── IQPreviousNextView.h │ │ │ │ ├── IQTextView.h │ │ │ │ ├── IQTitleBarButtonItem.h │ │ │ │ ├── IQToolbar.h │ │ │ │ ├── IQUIScrollView+Additions.h │ │ │ │ ├── IQUITextFieldView+Additions.h │ │ │ │ ├── IQUIView+Hierarchy.h │ │ │ │ ├── IQUIView+IQKeyboardToolbar.h │ │ │ │ └── IQUIViewController+Additions.h │ │ └── Public │ │ │ └── IQKeyboardManager │ │ │ ├── IQBarButtonItem.h │ │ │ ├── IQKeyboardManager.h │ │ │ ├── IQKeyboardManagerConstants.h │ │ │ ├── IQKeyboardReturnKeyHandler.h │ │ │ ├── IQPreviousNextView.h │ │ │ ├── IQTextView.h │ │ │ ├── IQTitleBarButtonItem.h │ │ │ ├── IQToolbar.h │ │ │ ├── IQUIScrollView+Additions.h │ │ │ ├── IQUITextFieldView+Additions.h │ │ │ ├── IQUIView+Hierarchy.h │ │ │ ├── IQUIView+IQKeyboardToolbar.h │ │ │ └── IQUIViewController+Additions.h │ ├── IQKeyboardManager │ │ ├── IQKeyboardManager │ │ │ ├── Categories │ │ │ │ ├── IQNSArray+Sort.h │ │ │ │ ├── IQNSArray+Sort.m │ │ │ │ ├── IQUIScrollView+Additions.h │ │ │ │ ├── IQUIScrollView+Additions.m │ │ │ │ ├── IQUITextFieldView+Additions.h │ │ │ │ ├── IQUITextFieldView+Additions.m │ │ │ │ ├── IQUIView+Hierarchy.h │ │ │ │ ├── IQUIView+Hierarchy.m │ │ │ │ ├── IQUIViewController+Additions.h │ │ │ │ └── IQUIViewController+Additions.m │ │ │ ├── Constants │ │ │ │ ├── IQKeyboardManagerConstants.h │ │ │ │ └── IQKeyboardManagerConstantsInternal.h │ │ │ ├── IQKeyboardManager.h │ │ │ ├── IQKeyboardManager.m │ │ │ ├── IQKeyboardReturnKeyHandler.h │ │ │ ├── IQKeyboardReturnKeyHandler.m │ │ │ ├── IQTextView │ │ │ │ ├── IQTextView.h │ │ │ │ └── IQTextView.m │ │ │ ├── IQToolbar │ │ │ │ ├── IQBarButtonItem.h │ │ │ │ ├── IQBarButtonItem.m │ │ │ │ ├── IQPreviousNextView.h │ │ │ │ ├── IQPreviousNextView.m │ │ │ │ ├── IQTitleBarButtonItem.h │ │ │ │ ├── IQTitleBarButtonItem.m │ │ │ │ ├── IQToolbar.h │ │ │ │ ├── IQToolbar.m │ │ │ │ ├── IQUIView+IQKeyboardToolbar.h │ │ │ │ └── IQUIView+IQKeyboardToolbar.m │ │ │ └── Resources │ │ │ │ └── IQKeyboardManager.bundle │ │ │ │ ├── IQButtonBarArrowDown@2x.png │ │ │ │ ├── IQButtonBarArrowDown@3x.png │ │ │ │ ├── IQButtonBarArrowLeft@2x.png │ │ │ │ ├── IQButtonBarArrowLeft@3x.png │ │ │ │ ├── IQButtonBarArrowRight@2x.png │ │ │ │ ├── IQButtonBarArrowRight@3x.png │ │ │ │ ├── IQButtonBarArrowUp@2x.png │ │ │ │ └── IQButtonBarArrowUp@3x.png │ │ ├── LICENSE.md │ │ └── README.md │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ └── Target Support Files │ │ ├── IQKeyboardManager │ │ ├── IQKeyboardManager-dummy.m │ │ ├── IQKeyboardManager-prefix.pch │ │ └── IQKeyboardManager.xcconfig │ │ └── Pods-TFPopupDemo │ │ ├── Pods-TFPopupDemo-acknowledgements.markdown │ │ ├── Pods-TFPopupDemo-acknowledgements.plist │ │ ├── Pods-TFPopupDemo-dummy.m │ │ ├── Pods-TFPopupDemo-frameworks.sh │ │ ├── Pods-TFPopupDemo-resources.sh │ │ ├── Pods-TFPopupDemo.debug.xcconfig │ │ └── Pods-TFPopupDemo.release.xcconfig ├── TFPopupDemo.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── TFPopupDemo.xcscheme ├── TFPopupDemo.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── TFPopupDemo │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── 01 │ │ ├── Contents.json │ │ ├── share_friend.imageset │ │ │ ├── Contents.json │ │ │ └── share_friend@2x.png │ │ ├── share_link.imageset │ │ │ ├── Contents.json │ │ │ └── share_link@2x.png │ │ ├── share_message.imageset │ │ │ ├── Contents.json │ │ │ └── share_message@2x.png │ │ ├── share_qq.imageset │ │ │ ├── Contents.json │ │ │ └── share_qq@2x.png │ │ ├── share_qq_zone.imageset │ │ │ ├── Contents.json │ │ │ └── share_qq_zone@2x.png │ │ ├── share_weibo.imageset │ │ │ ├── Contents.json │ │ │ └── share_weibo@2x.png │ │ └── share_wexin.imageset │ │ │ ├── Contents.json │ │ │ └── share_wexin@2x.png │ ├── 02 │ │ ├── Contents.json │ │ ├── popup-1.imageset │ │ │ ├── Contents.json │ │ │ └── popup-01@2x.png │ │ ├── popup-10.imageset │ │ │ ├── Contents.json │ │ │ └── popup-10@2x.png │ │ ├── popup-11.imageset │ │ │ ├── Contents.json │ │ │ └── popup-11@2x.png │ │ ├── popup-2.imageset │ │ │ ├── Contents.json │ │ │ └── popup-02@2x.png │ │ ├── popup-3.imageset │ │ │ ├── Contents.json │ │ │ └── popup-03@2x.png │ │ ├── popup-4.imageset │ │ │ ├── Contents.json │ │ │ └── popup-04@2x.png │ │ ├── popup-5.imageset │ │ │ ├── Contents.json │ │ │ └── popup-05@2x.png │ │ ├── popup-6.imageset │ │ │ ├── Contents.json │ │ │ └── popup-06@2x.png │ │ ├── popup-7.imageset │ │ │ ├── Contents.json │ │ │ └── popup-07@2x.png │ │ ├── popup-8.imageset │ │ │ ├── Contents.json │ │ │ └── popup-08@2x.png │ │ ├── popup-9.imageset │ │ │ ├── Contents.json │ │ │ └── popup-9.png │ │ ├── popup-bg-1.imageset │ │ │ ├── Contents.json │ │ │ └── popup-bg-01@2x.png │ │ ├── popup-bg-2.imageset │ │ │ ├── Contents.json │ │ │ └── popup-bg-2@2x.png │ │ └── popup-bg-3.imageset │ │ │ ├── Contents.json │ │ │ └── popup-bg-3@2x.png │ ├── 03 │ │ ├── Contents.json │ │ ├── lovers_left.imageset │ │ │ ├── Contents.json │ │ │ └── lovers_left@2x.png │ │ └── lovers_right.imageset │ │ │ ├── Contents.json │ │ │ └── lovers_right@2x.png │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-60.png │ │ ├── Icon-60@2x.png │ │ ├── Icon-60@3x.png │ │ ├── Icon-Small.png │ │ ├── Icon-Small@2x.png │ │ ├── Icon-Small@3x.png │ │ ├── Icon-Spotlight-40.png │ │ ├── Icon-Spotlight-40@2x.png │ │ ├── Icon-Spotlight-40@3x.png │ │ └── Icon@2x.png │ ├── Contents.json │ └── launch.imageset │ │ ├── Contents.json │ │ └── launch@2x.png │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── DemoView │ ├── AlertNormal.h │ ├── AlertNormal.m │ ├── AlertNormal.xib │ ├── BlankView.h │ ├── BlankView.m │ ├── BlankView.xib │ ├── CustomTableView.h │ ├── CustomTableView.m │ ├── DragPercentView0.h │ ├── DragPercentView0.m │ ├── DragPercentView1.h │ ├── DragPercentView1.m │ ├── ListView.h │ ├── ListView.m │ └── ListView.xib │ ├── DragExample │ ├── DragExampleController.h │ ├── DragExampleController.m │ └── DragExampleController.xib │ ├── Example │ ├── ExampleAction.h │ ├── ExampleAction.m │ ├── ExampleAction.xib │ ├── ExampleAlert.h │ ├── ExampleAlert.m │ ├── ExampleAlert.xib │ ├── ExampleBubble.h │ ├── ExampleBubble.m │ ├── ExampleBubble.xib │ ├── ExampleNotification.h │ ├── ExampleNotification.m │ ├── ExampleNotification.xib │ ├── ExampleSign.h │ ├── ExampleSign.m │ ├── ExampleSign.xib │ ├── ExampleSliderBig.h │ ├── ExampleSliderBig.m │ ├── ExampleSliderBig.xib │ ├── ExampleSliderLogin.h │ ├── ExampleSliderLogin.m │ ├── ExampleSliderLogin.xib │ ├── ExampleSliderSmall.h │ ├── ExampleSliderSmall.m │ ├── ExampleSliderSmall.xib │ ├── ExampleUnfold.h │ ├── ExampleUnfold.m │ └── ExampleUnfold.xib │ ├── ExampleViewController.h │ ├── ExampleViewController.m │ ├── ExampleViewController.xib │ ├── Info.plist │ ├── ViewController.h │ ├── ViewController.m │ └── main.m └── TFPopupSwiftDemo ├── Podfile ├── Podfile.lock ├── Pods ├── Manifest.lock ├── Pods.xcodeproj │ └── project.pbxproj ├── SnapKit │ ├── LICENSE │ ├── README.md │ └── Source │ │ ├── Constraint.swift │ │ ├── ConstraintAttributes.swift │ │ ├── ConstraintConfig.swift │ │ ├── ConstraintConstantTarget.swift │ │ ├── ConstraintDSL.swift │ │ ├── ConstraintDescription.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 │ │ ├── ConstraintMakerPriortizable.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 │ │ ├── Typealiases.swift │ │ └── UILayoutSupport+Extensions.swift ├── TFPopup │ ├── LICENSE │ ├── README.md │ └── TFPopup │ │ ├── NSObject+TFPopupMethodExchange.h │ │ ├── NSObject+TFPopupMethodExchange.m │ │ ├── TFPopup.h │ │ ├── TFPopupConst.h │ │ ├── TFPopupExtension.h │ │ ├── TFPopupExtension.m │ │ ├── TFPopupLoading.h │ │ ├── TFPopupLoading.m │ │ ├── TFPopupParam.h │ │ ├── TFPopupParam.m │ │ ├── TFPopupToast.h │ │ ├── TFPopupToast.m │ │ ├── UIScrollView+TFPopup.h │ │ ├── UIScrollView+TFPopup.m │ │ ├── UIView+TFPopup.h │ │ └── UIView+TFPopup.m └── Target Support Files │ ├── Pods-TFPopupSwiftDemo │ ├── Pods-TFPopupSwiftDemo-Info.plist │ ├── Pods-TFPopupSwiftDemo-acknowledgements.markdown │ ├── Pods-TFPopupSwiftDemo-acknowledgements.plist │ ├── Pods-TFPopupSwiftDemo-dummy.m │ ├── Pods-TFPopupSwiftDemo-frameworks-Debug-input-files.xcfilelist │ ├── Pods-TFPopupSwiftDemo-frameworks-Debug-output-files.xcfilelist │ ├── Pods-TFPopupSwiftDemo-frameworks-Release-input-files.xcfilelist │ ├── Pods-TFPopupSwiftDemo-frameworks-Release-output-files.xcfilelist │ ├── Pods-TFPopupSwiftDemo-frameworks.sh │ ├── Pods-TFPopupSwiftDemo-umbrella.h │ ├── Pods-TFPopupSwiftDemo.debug.xcconfig │ ├── Pods-TFPopupSwiftDemo.modulemap │ └── Pods-TFPopupSwiftDemo.release.xcconfig │ ├── SnapKit │ ├── SnapKit-Info.plist │ ├── SnapKit-dummy.m │ ├── SnapKit-prefix.pch │ ├── SnapKit-umbrella.h │ ├── SnapKit.modulemap │ └── SnapKit.xcconfig │ └── TFPopup │ ├── TFPopup-Info.plist │ ├── TFPopup-dummy.m │ ├── TFPopup-prefix.pch │ ├── TFPopup-umbrella.h │ ├── TFPopup.modulemap │ └── TFPopup.xcconfig ├── TFPopupSwiftDemo.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── TFPopupSwiftDemo.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist └── TFPopupSwiftDemo ├── AppDelegate.swift ├── Assets.xcassets ├── 01 │ ├── Contents.json │ ├── share_friend.imageset │ │ ├── Contents.json │ │ └── share_friend@2x.png │ ├── share_link.imageset │ │ ├── Contents.json │ │ └── share_link@2x.png │ ├── share_message.imageset │ │ ├── Contents.json │ │ └── share_message@2x.png │ ├── share_qq.imageset │ │ ├── Contents.json │ │ └── share_qq@2x.png │ ├── share_qq_zone.imageset │ │ ├── Contents.json │ │ └── share_qq_zone@2x.png │ ├── share_weibo.imageset │ │ ├── Contents.json │ │ └── share_weibo@2x.png │ └── share_wexin.imageset │ │ ├── Contents.json │ │ └── share_wexin@2x.png ├── 02 │ ├── Contents.json │ ├── popup-1.imageset │ │ ├── Contents.json │ │ └── popup-01@2x.png │ ├── popup-10.imageset │ │ ├── Contents.json │ │ └── popup-10@2x.png │ ├── popup-11.imageset │ │ ├── Contents.json │ │ └── popup-11@2x.png │ ├── popup-2.imageset │ │ ├── Contents.json │ │ └── popup-02@2x.png │ ├── popup-3.imageset │ │ ├── Contents.json │ │ └── popup-03@2x.png │ ├── popup-4.imageset │ │ ├── Contents.json │ │ └── popup-04@2x.png │ ├── popup-5.imageset │ │ ├── Contents.json │ │ └── popup-05@2x.png │ ├── popup-6.imageset │ │ ├── Contents.json │ │ └── popup-06@2x.png │ ├── popup-7.imageset │ │ ├── Contents.json │ │ └── popup-07@2x.png │ ├── popup-8.imageset │ │ ├── Contents.json │ │ └── popup-08@2x.png │ ├── popup-9.imageset │ │ ├── Contents.json │ │ └── popup-9.png │ ├── popup-bg-1.imageset │ │ ├── Contents.json │ │ └── popup-bg-01@2x.png │ ├── popup-bg-2.imageset │ │ ├── Contents.json │ │ └── popup-bg-2@2x.png │ ├── popup-bg-3.imageset │ │ ├── Contents.json │ │ └── popup-bg-3@2x.png │ └── popup-bg-4.imageset │ │ ├── Contents.json │ │ └── popup-bg-3@2x.png ├── AppIcon.appiconset │ ├── Contents.json │ ├── Icon-60.png │ ├── Icon-60@2x.png │ ├── Icon-60@3x.png │ ├── Icon-Small.png │ ├── Icon-Small@2x.png │ ├── Icon-Small@3x.png │ ├── Icon-Spotlight-40.png │ ├── Icon-Spotlight-40@2x.png │ ├── Icon-Spotlight-40@3x.png │ └── Icon@2x.png ├── Contents.json └── launch.imageset │ ├── Contents.json │ └── launch@2x.png ├── Base.lproj └── LaunchScreen.storyboard ├── Example ├── CustomBaseView.swift ├── CustomController0.swift ├── CustomController0.xib ├── CustomWithBackgroundView0.swift ├── CustomWithBackgroundView1.swift ├── CustomWithBackgroundView2.swift ├── CustomWithBackgroundView3.swift └── normal │ ├── BottomView.swift │ ├── BottomView.xib │ ├── BubbleView.swift │ ├── BubbleView.xib │ ├── LeftRightView.swift │ ├── LeftRightView.xib │ ├── NormalController0.swift │ ├── NormalController0.xib │ ├── NormalController1.swift │ ├── NormalController1.xib │ ├── NormalController2.swift │ ├── NormalController2.xib │ ├── NormalController3.swift │ ├── NormalController3.xib │ ├── NormalController4.swift │ ├── NormalController4.xib │ ├── NormalController5.swift │ ├── NormalController5.xib │ ├── NormalController6.swift │ ├── NormalController6.xib │ ├── NormalController7.swift │ ├── NormalController7.xib │ ├── TopBottomFoldView.swift │ ├── TopBottomFoldView.xib │ ├── TopView.swift │ ├── TopView.xib │ ├── UniversalView.swift │ └── UniversalView.xib ├── Info.plist ├── MainController.swift ├── MainNavigationController.swift ├── SwiftProjectUseOCPodHelper.h ├── SwiftProjectUseOCPodHelper.m ├── TFPopupSwiftDemo-Bridging-Header.h ├── UIView_ExtensionSystem.swift └── ViewController.swift /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | *.DS_Store 31 | 32 | # CocoaPods 33 | # 34 | # We recommend against adding the Pods directory to your .gitignore. However 35 | # you should judge for yourself, the pros and cons are mentioned at: 36 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 37 | # 38 | # Pods/ 39 | 40 | # Carthage 41 | # 42 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 43 | # Carthage/Checkouts 44 | 45 | Carthage/Build 46 | 47 | # fastlane 48 | # 49 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 50 | # screenshots whenever they are needed. 51 | # For more information about the recommended setup visit: 52 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 53 | 54 | fastlane/report.xml 55 | fastlane/Preview.html 56 | fastlane/screenshots/**/*.png 57 | fastlane/test_output 58 | 59 | # Code Injection 60 | # 61 | # After new code Injection tools there's a generated folder /iOSInjectionProject 62 | # https://github.com/johnno1962/injectionforxcode 63 | 64 | iOSInjectionProject/ 65 | -------------------------------------------------------------------------------- /Example/TFPopupExtension.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/Example/TFPopupExtension.png -------------------------------------------------------------------------------- /Example/TFPopupOperatingInstruction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/Example/TFPopupOperatingInstruction.png -------------------------------------------------------------------------------- /Example/TFPopupParam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/Example/TFPopupParam.png -------------------------------------------------------------------------------- /Example/UIView+TFPopup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/Example/UIView+TFPopup.png -------------------------------------------------------------------------------- /Example/delegateAndDatasource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/Example/delegateAndDatasource.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 抱紧我的小鲤鱼 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /TFPopup.podspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | Pod::Spec.new do |s| 4 | s.name = "TFPopup" 5 | s.version = "1.4.4" 6 | s.ios.deployment_target = '7.0' 7 | s.summary = "A powerful pop-up tool" 8 | s.homepage = "https://github.com/shmxybfq/TFPopup" 9 | s.license = "MIT" 10 | s.author = { "ZTF" => "927141965@qq.com" } 11 | s.social_media_url = "http://www.jianshu.com/u/8c1cc9143ec6" 12 | s.source = { :git => "https://github.com/shmxybfq/TFPopup.git", :tag => s.version } 13 | s.source_files = "TFPopup/*.{h,m}" 14 | s.requires_arc = true 15 | end 16 | -------------------------------------------------------------------------------- /TFPopup/NSObject+TFPopupMethodExchange.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+TFPopupMethodExchange.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/8/15. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface NSObject (TFPopupMethodExchange) 13 | /** 14 | * 交换类方法和交换实例方法 15 | */ 16 | +(BOOL)popup_instanceMethodExchange:(SEL)originSel toClass:(Class)toClass toSel:(SEL)toSel; 17 | 18 | +(BOOL)popup_classMethodExchange:(SEL)originSel toClass:(Class)toClass toSel:(SEL)toSel; 19 | 20 | @end 21 | 22 | -------------------------------------------------------------------------------- /TFPopup/NSObject+TFPopupMethodExchange.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+TFPopupMethodExchange.m 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/8/15. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "NSObject+TFPopupMethodExchange.h" 10 | 11 | @implementation NSObject (TFPopupMethodExchange) 12 | 13 | /** 14 | * 交换类方法和交换实例方法 15 | */ 16 | +(BOOL)popup_instanceMethodExchange:(SEL)originSel toClass:(Class)toClass toSel:(SEL)toSel{ 17 | Method originMethod = class_getInstanceMethod([self class], originSel); 18 | Method toMethod = class_getInstanceMethod(toClass, toSel); 19 | BOOL added = class_addMethod([self class], originSel, method_getImplementation(toMethod), method_getTypeEncoding(toMethod)); 20 | if (!added) { 21 | method_exchangeImplementations(originMethod, toMethod); 22 | }else{ 23 | class_replaceMethod(self, toSel, method_getImplementation(originMethod), method_getTypeEncoding(originMethod)); 24 | } 25 | return YES; 26 | } 27 | 28 | +(BOOL)popup_classMethodExchange:(SEL)originSel toClass:(Class)toClass toSel:(SEL)toSel{ 29 | Method originMethod = class_getClassMethod([self class], originSel); 30 | Method toMethod = class_getClassMethod(toClass, toSel); 31 | Class metaClass = objc_getMetaClass(NSStringFromClass([self class]).UTF8String); 32 | IMP toImp = method_getImplementation(toMethod); 33 | const char *toTypeEncoding = method_getTypeEncoding(toMethod); 34 | BOOL addMethod = class_addMethod(metaClass,originSel,toImp,toTypeEncoding); 35 | if (!addMethod) { 36 | method_exchangeImplementations(originMethod, toMethod); 37 | }else{ 38 | IMP originImp = method_getImplementation(originMethod); 39 | const char *originTypeEncoding = method_getTypeEncoding(originMethod); 40 | class_replaceMethod([self class],toSel,originImp,originTypeEncoding); 41 | } 42 | return YES; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /TFPopup/TFPopup.h: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopup.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #ifndef TFPopup_h 10 | #define TFPopup_h 11 | 12 | #import "TFPopupToast.h" 13 | #import "UIView+TFPopup.h" 14 | 15 | #endif /* TFPopup_h */ 16 | -------------------------------------------------------------------------------- /TFPopup/TFPopupConst.h: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopupConst.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/5/13. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #ifndef TFPopupConst_h 10 | #define TFPopupConst_h 11 | 12 | #import 13 | 14 | #pragma mark -- 属性绑定 15 | #ifndef tf_synthesize_category_property 16 | #define tf_synthesize_category_property(getter,settter,objc_AssociationPolicy,TYPE)\ 17 | - (TYPE)getter{return objc_getAssociatedObject(self, @selector(getter));}\ 18 | - (void)settter:(TYPE)obj{objc_setAssociatedObject(self, @selector(getter), obj, objc_AssociationPolicy);} 19 | #endif 20 | 21 | #ifndef tf_synthesize_category_property_retain 22 | #define tf_synthesize_category_property_retain(getter,settter) tf_synthesize_category_property(getter,settter,OBJC_ASSOCIATION_RETAIN_NONATOMIC,id) 23 | #endif 24 | 25 | #ifndef tf_synthesize_category_property_copy 26 | #define tf_synthesize_category_property_copy(getter,settter) tf_synthesize_category_property(getter,settter,OBJC_ASSOCIATION_COPY,id) 27 | #endif 28 | 29 | #ifndef tf_synthesize_category_property_assign 30 | #define tf_synthesize_category_property_assign(getter,settter) tf_synthesize_category_property(getter,settter,OBJC_ASSOCIATION_ASSIGN,id) 31 | #endif 32 | 33 | #ifndef x_weakSelf 34 | #define x_weakSelf __weak typeof(self) weakself = self 35 | #endif 36 | 37 | #ifdef DEBUG 38 | #define PopupLog(fmt, ...) NSLog((@"\nfunc:%s,line:%d\n" fmt @"\n"), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 39 | #else 40 | #define PopupLog(...) 41 | #endif 42 | 43 | 44 | typedef NS_ENUM(NSInteger,TFAnimationType) { 45 | TFAnimationTypeFade, 46 | TFAnimationTypeScale, 47 | }; 48 | 49 | #endif /* TFPopupConst_h */ 50 | -------------------------------------------------------------------------------- /TFPopup/TFPopupLoading.h: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopupLoading.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/5/13. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "TFPopupConst.h" 11 | 12 | @class TFPopupLoading; 13 | typedef void(^TFPopupLoadingBlock)(TFPopupLoading *toast); 14 | 15 | @interface TFPopupLoading : UIView 16 | 17 | @property(nonatomic,strong)UIActivityIndicatorView *indicatorView; 18 | @property(nonatomic,strong)UILabel *msgLabel; 19 | 20 | +(void)tf_show:(UIView *)inView animationType:(TFAnimationType)animationType; 21 | +(void)tf_hide:(UIView *)inView; 22 | 23 | @end 24 | 25 | 26 | -------------------------------------------------------------------------------- /TFPopup/TFPopupParam.m: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopupParam.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/18. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import "TFPopupParam.h" 10 | 11 | @implementation TFPopupParam 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /TFPopup/TFPopupToast.h: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopupToast.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "TFPopupConst.h" 11 | 12 | @class TFPopupToast; 13 | typedef void(^TFPopupToastBlock)(TFPopupToast *toast); 14 | 15 | @interface TFPopupToast : UIView 16 | 17 | @property(nonatomic,assign)UIEdgeInsets edge; 18 | @property(nonatomic,strong)UILabel *msgLabel; 19 | 20 | //注释同下 21 | +(void)tf_show:(UIView *)inView msg:(NSString *)msg animationType:(TFAnimationType)animationType; 22 | 23 | /* toast展示,默认黑底白字,底80%黑色不透明度 24 | * inView 容器视图 25 | * msg:弹出string 26 | * offset,弹框偏移,offset.x正为右移,offset.y正为下移 27 | * duration,自动消失时间,值为0时默认被设置为最低为1.5s,根据字数计算消失时间最大5s 28 | * animationType,动画方式,渐隐和缩放,默认渐隐 29 | * customBlock,可在此回调内设置样式 */ 30 | +(void)tf_show:(UIView *)inView 31 | msg:(NSString *)msg 32 | offset:(CGPoint)offset 33 | dissmissDuration:(NSTimeInterval)duration 34 | animationType:(TFAnimationType)animationType 35 | customBlock:(TFPopupToastBlock)customBlock; 36 | 37 | @end 38 | 39 | 40 | -------------------------------------------------------------------------------- /TFPopup/UIScrollView+TFPopup.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+TFPopup.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/8/15. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "TFPopupConst.h" 12 | #import "NSObject+TFPopupMethodExchange.h" 13 | 14 | @interface UIScrollView (TFPopup) 15 | 16 | @property(nonatomic, weak) UIView *faterPopupView; 17 | 18 | @end 19 | 20 | 21 | -------------------------------------------------------------------------------- /TFPopupDemo/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'TFPopupDemo' do 5 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks 6 | # use_frameworks! 7 | 8 | # Pods for TFPopupDemo 9 | pod 'IQKeyboardManager' 10 | end 11 | -------------------------------------------------------------------------------- /TFPopupDemo/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - IQKeyboardManager (6.2.0) 3 | 4 | DEPENDENCIES: 5 | - IQKeyboardManager 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - IQKeyboardManager 10 | 11 | SPEC CHECKSUMS: 12 | IQKeyboardManager: 6194101620b73af5e67900b8f89707a99de0b804 13 | 14 | PODFILE CHECKSUM: 212033fb80570c884b78e1f832e8bb2edfcb373d 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQBarButtonItem.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQBarButtonItem.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManager.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQKeyboardManager.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstants.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Constants/IQKeyboardManagerConstants.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstantsInternal.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQKeyboardReturnKeyHandler.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQKeyboardReturnKeyHandler.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQNSArray+Sort.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Categories/IQNSArray+Sort.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQPreviousNextView.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQPreviousNextView.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQTextView.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQTextView/IQTextView.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQTitleBarButtonItem.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQToolbar.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQToolbar.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQUIScrollView+Additions.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Categories/IQUIScrollView+Additions.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQUITextFieldView+Additions.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQUIView+Hierarchy.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Categories/IQUIView+Hierarchy.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQUIView+IQKeyboardToolbar.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Private/IQKeyboardManager/IQUIViewController+Additions.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Categories/IQUIViewController+Additions.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQBarButtonItem.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQBarButtonItem.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQKeyboardManager.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQKeyboardManager.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQKeyboardManagerConstants.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Constants/IQKeyboardManagerConstants.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQKeyboardReturnKeyHandler.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQKeyboardReturnKeyHandler.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQPreviousNextView.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQPreviousNextView.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQTextView.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQTextView/IQTextView.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQTitleBarButtonItem.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQToolbar.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQToolbar.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQUIScrollView+Additions.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Categories/IQUIScrollView+Additions.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQUITextFieldView+Additions.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQUIView+Hierarchy.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Categories/IQUIView+Hierarchy.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQUIView+IQKeyboardToolbar.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Headers/Public/IQKeyboardManager/IQUIViewController+Additions.h: -------------------------------------------------------------------------------- 1 | ../../../IQKeyboardManager/IQKeyboardManager/Categories/IQUIViewController+Additions.h -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Categories/IQNSArray+Sort.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQNSArray+Sort.h 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 25 | 26 | @class UIView; 27 | 28 | /** 29 | UIView.subviews sorting category. 30 | */ 31 | @interface NSArray (IQ_NSArray_Sort) 32 | 33 | ///-------------- 34 | /// @name Sorting 35 | ///-------------- 36 | 37 | /** 38 | Returns the array by sorting the UIView's by their tag property. 39 | */ 40 | @property (nonatomic, readonly, copy) NSArray<__kindof UIView*> * _Nonnull sortedArrayByTag; 41 | 42 | /** 43 | Returns the array by sorting the UIView's by their tag property. 44 | */ 45 | @property (nonatomic, readonly, copy) NSArray<__kindof UIView*> * _Nonnull sortedArrayByPosition; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Categories/IQUIScrollView+Additions.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQUIScrollView+Additions.h 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 25 | 26 | 27 | @interface UIScrollView (Additions) 28 | 29 | /** 30 | If YES, then scrollview will ignore scrolling (simply not scroll it) for adjusting textfield position. Default is NO. 31 | */ 32 | @property(nonatomic, assign) BOOL shouldIgnoreScrollingAdjustment; 33 | 34 | /** 35 | Restore scrollViewContentOffset when resigning from scrollView. Default is NO. 36 | */ 37 | @property(nonatomic, assign) BOOL shouldRestoreScrollViewContentOffset; 38 | 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Categories/IQUIViewController+Additions.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQUIViewController+Additions.h 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 25 | 26 | @class NSLayoutConstraint; 27 | 28 | @interface UIViewController (Additions) 29 | 30 | /** 31 | Top/Bottom Layout constraint which help library to manage keyboardTextField distance 32 | 33 | @deprecated Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview. 34 | */ 35 | @property(nullable, nonatomic, strong) IBOutlet NSLayoutConstraint *IQLayoutGuideConstraint __attribute__((deprecated("Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview."))); 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Categories/IQUIViewController+Additions.m: -------------------------------------------------------------------------------- 1 | // 2 | // IQUIViewController+Additions.m 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 "IQUIViewController+Additions.h" 25 | #import 26 | #import 27 | 28 | @implementation UIViewController (Additions) 29 | 30 | -(void)setIQLayoutGuideConstraint:(NSLayoutConstraint *)IQLayoutGuideConstraint 31 | { 32 | objc_setAssociatedObject(self, @selector(IQLayoutGuideConstraint), IQLayoutGuideConstraint, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 33 | } 34 | 35 | -(NSLayoutConstraint *)IQLayoutGuideConstraint 36 | { 37 | return objc_getAssociatedObject(self, @selector(IQLayoutGuideConstraint)); 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQKeyboardManagerConstantsInternal.h 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 | #ifndef IQKeyboardManagerConstantsInternal_h 25 | #define IQKeyboardManagerConstantsInternal_h 26 | 27 | 28 | #define IQ_IS_IOS10_OR_GREATER ([[NSProcessInfo processInfo] operatingSystemVersion].majorVersion >= 10) 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/IQTextView/IQTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQTextView.h 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 "IQKeyboardManagerConstants.h" 25 | 26 | #import 27 | 28 | /** 29 | UITextView with placeholder support 30 | */ 31 | @interface IQTextView : UITextView 32 | 33 | /** 34 | Set textView's placeholder text. Default is nil. 35 | */ 36 | @property(nullable, nonatomic,copy) IBInspectable NSString *placeholder; 37 | 38 | /** 39 | Set textView's placeholder attributed text. Default is nil. 40 | */ 41 | @property(nullable, nonatomic,copy) IBInspectable NSAttributedString *attributedPlaceholder; 42 | 43 | /** 44 | To set textView's placeholder text color. Default is nil. 45 | */ 46 | @property(nullable, nonatomic,copy) IBInspectable UIColor *placeholderTextColor; 47 | 48 | @end 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQBarButtonItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQBarButtonItem.h 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 25 | 26 | @class NSInvocation; 27 | 28 | /** 29 | IQBarButtonItem used for IQToolbar. 30 | */ 31 | @interface IQBarButtonItem : UIBarButtonItem 32 | 33 | /** 34 | Boolean to know if it's a system item or custom item 35 | */ 36 | @property (nonatomic, readonly) BOOL isSystemItem; 37 | 38 | /** 39 | Additional target & action to do get callback action. Note that setting custom target & selector doesn't affect native functionality, this is just an additional target to get a callback. 40 | 41 | @param target Target object. 42 | @param action Target Selector. 43 | */ 44 | -(void)setTarget:(nullable id)target action:(nullable SEL)action; 45 | 46 | /** 47 | Customized Invocation to be called when button is pressed. invocation is internally created using setTarget:action: method. 48 | */ 49 | @property (nullable, strong, nonatomic) NSInvocation *invocation; 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQPreviousNextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQPreviousNextView.h 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 25 | /** 26 | If you need to enable previous/next toolbar button with some complex hierarchy where your textFields are not in same view, then make the top view as IQPreviousNextView. 27 | */ 28 | @interface IQPreviousNextView : UIView 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQPreviousNextView.m: -------------------------------------------------------------------------------- 1 | // 2 | // IQPreviousNextView.m 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 "IQPreviousNextView.h" 25 | 26 | @implementation IQPreviousNextView 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQToolbar.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQToolbar.h 3 | // https://github.com/hackiftekhar/IQKeyboardManager 4 | // Copyright (c) 2013-16 Iftekhar Qurashi. 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 "IQTitleBarButtonItem.h" 25 | 26 | #import 27 | #import 28 | 29 | /** 30 | IQToolbar for IQKeyboardManager. 31 | */ 32 | @interface IQToolbar : UIToolbar 33 | 34 | /** 35 | Previous bar button of toolbar. 36 | */ 37 | @property(nonnull, nonatomic, strong) IQBarButtonItem *previousBarButton; 38 | 39 | /** 40 | Next bar button of toolbar. 41 | */ 42 | @property(nonnull, nonatomic, strong) IQBarButtonItem *nextBarButton; 43 | 44 | /** 45 | Title bar button of toolbar. 46 | */ 47 | @property(nonnull, nonatomic, strong, readonly) IQTitleBarButtonItem *titleBarButton; 48 | 49 | /** 50 | Done bar button of toolbar. 51 | */ 52 | @property(nonnull, nonatomic, strong) IQBarButtonItem *doneBarButton; 53 | 54 | /** 55 | Fixed space bar button of toolbar. 56 | */ 57 | @property(nonnull, nonatomic, strong) IQBarButtonItem *fixedSpaceBarButton; 58 | 59 | @end 60 | 61 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/Pods/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png -------------------------------------------------------------------------------- /TFPopupDemo/Pods/IQKeyboardManager/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2013-2017 Iftekhar Qurashi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - IQKeyboardManager (6.2.0) 3 | 4 | DEPENDENCIES: 5 | - IQKeyboardManager 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - IQKeyboardManager 10 | 11 | SPEC CHECKSUMS: 12 | IQKeyboardManager: 6194101620b73af5e67900b8f89707a99de0b804 13 | 14 | PODFILE CHECKSUM: 212033fb80570c884b78e1f832e8bb2edfcb373d 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_IQKeyboardManager : NSObject 3 | @end 4 | @implementation PodsDummy_IQKeyboardManager 5 | @end 6 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-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 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/IQKeyboardManager" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" 4 | OTHER_LDFLAGS = -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/IQKeyboardManager 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Target Support Files/Pods-TFPopupDemo/Pods-TFPopupDemo-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## IQKeyboardManager 5 | 6 | MIT License 7 | 8 | Copyright (c) 2013-2017 Iftekhar Qurashi 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Target Support Files/Pods-TFPopupDemo/Pods-TFPopupDemo-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TFPopupDemo : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TFPopupDemo 5 | @end 6 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Target Support Files/Pods-TFPopupDemo/Pods-TFPopupDemo.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"IQKeyboardManager" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /TFPopupDemo/Pods/Target Support Files/Pods-TFPopupDemo/Pods-TFPopupDemo.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"IQKeyboardManager" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | return YES; 20 | } 21 | 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 25 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 26 | } 27 | 28 | 29 | - (void)applicationDidEnterBackground:(UIApplication *)application { 30 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 31 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 32 | } 33 | 34 | 35 | - (void)applicationWillEnterForeground:(UIApplication *)application { 36 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 37 | } 38 | 39 | 40 | - (void)applicationDidBecomeActive:(UIApplication *)application { 41 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 42 | } 43 | 44 | 45 | - (void)applicationWillTerminate:(UIApplication *)application { 46 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 47 | } 48 | 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_friend.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_friend@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_friend.imageset/share_friend@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_friend.imageset/share_friend@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_link.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_link@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_link.imageset/share_link@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_link.imageset/share_link@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_message.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_message@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_message.imageset/share_message@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_message.imageset/share_message@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_qq.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_qq@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_qq.imageset/share_qq@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_qq.imageset/share_qq@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_qq_zone.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_qq_zone@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_qq_zone.imageset/share_qq_zone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_qq_zone.imageset/share_qq_zone@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_weibo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_weibo@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_weibo.imageset/share_weibo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_weibo.imageset/share_weibo@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_wexin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_wexin@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_wexin.imageset/share_wexin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/01/share_wexin.imageset/share_wexin@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-01@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-1.imageset/popup-01@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-1.imageset/popup-01@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-10.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-10@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-10.imageset/popup-10@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-10.imageset/popup-10@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-11.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-11@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-11.imageset/popup-11@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-11.imageset/popup-11@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-02@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-2.imageset/popup-02@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-2.imageset/popup-02@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-03@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-3.imageset/popup-03@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-3.imageset/popup-03@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-04@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-4.imageset/popup-04@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-4.imageset/popup-04@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-05@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-5.imageset/popup-05@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-5.imageset/popup-05@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-06@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-6.imageset/popup-06@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-6.imageset/popup-06@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-07@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-7.imageset/popup-07@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-7.imageset/popup-07@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-08@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-8.imageset/popup-08@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-8.imageset/popup-08@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "popup-9.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-9.imageset/popup-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-9.imageset/popup-9.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-bg-1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-bg-01@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-bg-1.imageset/popup-bg-01@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-bg-1.imageset/popup-bg-01@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-bg-2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-bg-2@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-bg-2.imageset/popup-bg-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-bg-2.imageset/popup-bg-2@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-bg-3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-bg-3@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-bg-3.imageset/popup-bg-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/02/popup-bg-3.imageset/popup-bg-3@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/03/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/03/lovers_left.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "lovers_left@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/03/lovers_left.imageset/lovers_left@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/03/lovers_left.imageset/lovers_left@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/03/lovers_right.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "lovers_right@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/03/lovers_right.imageset/lovers_right@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/03/lovers_right.imageset/lovers_right@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/launch.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "launch@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Assets.xcassets/launch.imageset/launch@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupDemo/TFPopupDemo/Assets.xcassets/launch.imageset/launch@2x.png -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/AlertNormal.h: -------------------------------------------------------------------------------- 1 | // 2 | // AlertNormal.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void(^ActionBlock)(void); 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface AlertNormal : UIView 16 | 17 | @property(nonatomic, copy)ActionBlock block; 18 | 19 | -(void)observerSure:(ActionBlock)block; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/AlertNormal.m: -------------------------------------------------------------------------------- 1 | // 2 | // AlertNormal.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import "AlertNormal.h" 10 | 11 | @implementation AlertNormal 12 | 13 | -(void)dealloc{ 14 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 15 | } 16 | 17 | -(void)observerSure:(ActionBlock)block{ 18 | self.block = block; 19 | } 20 | 21 | -(void)awakeFromNib{ 22 | [super awakeFromNib]; 23 | self.layer.cornerRadius = 6; 24 | self.layer.masksToBounds = YES; 25 | 26 | 27 | } 28 | - (IBAction)sure:(id)sender { 29 | if (self.block) { 30 | self.block(); 31 | } 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/BlankView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BlankView.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/22. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BlankView : UIView 14 | @property (weak, nonatomic) IBOutlet UIButton *button0; 15 | @property (weak, nonatomic) IBOutlet UIButton *button1; 16 | @property (weak, nonatomic) IBOutlet UIButton *button2; 17 | @property (weak, nonatomic) IBOutlet UIButton *button3; 18 | @property (weak, nonatomic) IBOutlet UIButton *button4; 19 | @property (weak, nonatomic) IBOutlet UIButton *button5; 20 | @property (weak, nonatomic) IBOutlet UIButton *button6; 21 | @property (weak, nonatomic) IBOutlet UIButton *button7; 22 | 23 | -(NSArray *)buttons; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/BlankView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BlankView.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/22. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import "BlankView.h" 10 | 11 | @implementation BlankView 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(NSArray *)buttons{ 16 | return @[self.button0, 17 | self.button1, 18 | self.button2, 19 | self.button3, 20 | self.button4, 21 | self.button5, 22 | self.button6, 23 | self.button7]; 24 | } 25 | @end 26 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/CustomTableView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CustomTableView.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/9/26. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface CustomTableView : UITableView 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/CustomTableView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CustomTableView.m 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/9/26. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "CustomTableView.h" 10 | 11 | @implementation CustomTableView 12 | 13 | 14 | ////执行顺序30,次数多次但有限 15 | //- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 16 | // return NO; 17 | //} 18 | //-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ 19 | // return NO; 20 | //} 21 | 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/DragPercentView0.h: -------------------------------------------------------------------------------- 1 | // 2 | // DragPercentView0.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/23. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface DragPercentView0 : UIImageView 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/DragPercentView0.m: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // DragPercentView0.m 4 | // TFPopupDemo 5 | // 6 | // Created by zhutaofeng on 2019/12/23. 7 | // Copyright © 2019 ztf. All rights reserved. 8 | // 9 | 10 | #import "DragPercentView0.h" 11 | #import "TFPopup.h" 12 | @implementation DragPercentView0 13 | 14 | -(instancetype)initWithFrame:(CGRect)frame{ 15 | if (self = [super initWithFrame:frame]) { 16 | self.image = [UIImage imageNamed:@"popup-1"]; 17 | self.userInteractionEnabled = YES; 18 | } 19 | return self; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/DragPercentView1.h: -------------------------------------------------------------------------------- 1 | // 2 | // DragPercentView1.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/23. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface DragPercentView1 : UIImageView 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DemoView/ListView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ListView.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/23. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CustomTableView.h" 11 | typedef void(^SelectBlock)(NSString *data); 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ListView : UIView 15 | 16 | @property(nonatomic, copy)SelectBlock block; 17 | @property(nonatomic,strong)NSMutableArray *dataSource; 18 | @property (weak, nonatomic) IBOutlet CustomTableView *tableView; 19 | 20 | -(void)reload:(NSArray *)data; 21 | 22 | -(void)observerSelected:(SelectBlock)block; 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/DragExample/DragExampleController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DragExampleController.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/9/4. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface DragExampleController : UIViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleAction.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleAction.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void(^ExampleActionBlock)(void); 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ExampleAction : UIView 15 | @property(nonatomic, copy)ExampleActionBlock block; 16 | 17 | -(void)observerClick:(ExampleActionBlock)block; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleAction.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleAction.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "ExampleAction.h" 10 | 11 | @implementation ExampleAction 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(void)observerClick:(ExampleActionBlock)block{ 16 | self.block = block; 17 | } 18 | 19 | -(void)awakeFromNib{ 20 | [super awakeFromNib]; 21 | self.layer.cornerRadius = 6; 22 | self.layer.masksToBounds = YES; 23 | 24 | 25 | } 26 | - (IBAction)sure:(id)sender { 27 | if (self.block) { 28 | self.block(); 29 | } 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleAlert.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleAlert.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void(^ExampleAlertBlock)(void); 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ExampleAlert : UIView 15 | @property(nonatomic, copy)ExampleAlertBlock block; 16 | 17 | -(void)observerClick:(ExampleAlertBlock)block; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleAlert.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleAlert.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "ExampleAlert.h" 10 | 11 | @implementation ExampleAlert 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(void)observerClick:(ExampleAlertBlock)block{ 16 | self.block = block; 17 | } 18 | 19 | -(void)awakeFromNib{ 20 | [super awakeFromNib]; 21 | self.layer.cornerRadius = 6; 22 | self.layer.masksToBounds = YES; 23 | 24 | 25 | } 26 | - (IBAction)sure:(id)sender { 27 | if (self.block) { 28 | self.block(); 29 | } 30 | } 31 | @end 32 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleBubble.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleBubble.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void(^ExampleBubbleBlock)(void); 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ExampleBubble : UIView 15 | @property(nonatomic, copy)ExampleBubbleBlock block; 16 | 17 | -(void)observerClick:(ExampleBubbleBlock)block; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleBubble.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleBubble.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "ExampleBubble.h" 10 | 11 | @implementation ExampleBubble 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(void)observerClick:(ExampleBubbleBlock)block{ 16 | self.block = block; 17 | } 18 | 19 | -(void)awakeFromNib{ 20 | [super awakeFromNib]; 21 | self.layer.cornerRadius = 6; 22 | self.layer.masksToBounds = YES; 23 | 24 | 25 | } 26 | - (IBAction)sure:(id)sender { 27 | if (self.block) { 28 | self.block(); 29 | } 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleNotification.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleNotification.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void(^ExampleNotificationBlock)(void); 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ExampleNotification : UIView 15 | @property(nonatomic, copy)ExampleNotificationBlock block; 16 | 17 | -(void)observerClick:(ExampleNotificationBlock)block; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleNotification.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleNotification.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "ExampleNotification.h" 10 | 11 | @implementation ExampleNotification 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(void)observerClick:(ExampleNotificationBlock)block{ 16 | self.block = block; 17 | } 18 | 19 | -(void)awakeFromNib{ 20 | [super awakeFromNib]; 21 | self.layer.cornerRadius = 6; 22 | self.layer.masksToBounds = YES; 23 | 24 | 25 | } 26 | - (IBAction)sure:(id)sender { 27 | if (self.block) { 28 | self.block(); 29 | } 30 | } 31 | @end 32 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleSign.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleSign.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void(^ExampleSignBlock)(void); 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ExampleSign : UIView 15 | @property(nonatomic, copy)ExampleSignBlock block; 16 | 17 | -(void)observerClick:(ExampleSignBlock)block; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleSign.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleSign.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "ExampleSign.h" 10 | 11 | @implementation ExampleSign 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(void)observerClick:(ExampleSignBlock)block{ 16 | self.block = block; 17 | } 18 | 19 | -(void)awakeFromNib{ 20 | [super awakeFromNib]; 21 | self.layer.cornerRadius = 6; 22 | self.layer.masksToBounds = YES; 23 | 24 | 25 | 26 | 27 | 28 | } 29 | - (IBAction)sure:(id)sender { 30 | if (self.block) { 31 | self.block(); 32 | } 33 | } 34 | @end 35 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleSliderBig.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleSliderBig.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void(^ExampleSliderBigBlock)(void); 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ExampleSliderBig : UIView 15 | @property(nonatomic, copy)ExampleSliderBigBlock block; 16 | 17 | -(void)observerClick:(ExampleSliderBigBlock)block; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleSliderBig.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleSliderBig.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "ExampleSliderBig.h" 10 | 11 | @implementation ExampleSliderBig 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(void)observerClick:(ExampleSliderBigBlock)block{ 16 | self.block = block; 17 | } 18 | 19 | -(void)awakeFromNib{ 20 | [super awakeFromNib]; 21 | // self.layer.cornerRadius = 6; 22 | // self.layer.masksToBounds = YES; 23 | // 24 | 25 | } 26 | - (IBAction)sure:(id)sender { 27 | if (self.block) { 28 | self.block(); 29 | } 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleSliderLogin.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleSliderLogin.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/23. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | typedef void(^ExampleSliderLoginBlock)(void); 13 | @interface ExampleSliderLogin : UIView 14 | @property(nonatomic, copy)ExampleSliderLoginBlock block; 15 | -(void)observerClick:(ExampleSliderLoginBlock)block; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | 21 | 22 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleSliderLogin.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleSliderLogin.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/23. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "ExampleSliderLogin.h" 10 | 11 | @implementation ExampleSliderLogin 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(void)observerClick:(ExampleSliderLoginBlock)block{ 16 | self.block = block; 17 | } 18 | 19 | -(void)awakeFromNib{ 20 | [super awakeFromNib]; 21 | // self.layer.cornerRadius = 6; 22 | // self.layer.masksToBounds = YES; 23 | 24 | 25 | } 26 | - (IBAction)sure:(id)sender { 27 | if (self.block) { 28 | self.block(); 29 | } 30 | } 31 | @end 32 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleSliderSmall.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleSliderSmall.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void(^ExampleSliderSmallBlock)(void); 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ExampleSliderSmall : UIView 15 | @property(nonatomic, copy)ExampleSliderSmallBlock block; 16 | 17 | -(void)observerClick:(ExampleSliderSmallBlock)block; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleSliderSmall.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleSliderSmall.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "ExampleSliderSmall.h" 10 | 11 | @implementation ExampleSliderSmall 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(void)observerClick:(ExampleSliderSmallBlock)block{ 16 | self.block = block; 17 | } 18 | 19 | -(void)awakeFromNib{ 20 | [super awakeFromNib]; 21 | // self.layer.cornerRadius = 6; 22 | // self.layer.masksToBounds = YES; 23 | } 24 | - (IBAction)sure:(id)sender { 25 | if (self.block) { 26 | self.block(); 27 | } 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleUnfold.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleUnfold.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void(^ExampleUnfoldBlock)(void); 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ExampleUnfold : UIView 15 | @property(nonatomic, copy)ExampleUnfoldBlock block; 16 | 17 | -(void)observerClick:(ExampleUnfoldBlock)block; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Example/ExampleUnfold.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleUnfold.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/21. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "ExampleUnfold.h" 10 | 11 | @implementation ExampleUnfold 12 | -(void)dealloc{ 13 | NSLog(@"已释放====:%@",NSStringFromClass([self class])); 14 | } 15 | -(void)observerClick:(ExampleUnfoldBlock)block{ 16 | self.block = block; 17 | } 18 | 19 | -(void)awakeFromNib{ 20 | [super awakeFromNib]; 21 | // self.layer.cornerRadius = 6; 22 | // self.layer.masksToBounds = YES; 23 | 24 | 25 | } 26 | - (IBAction)sure:(id)sender { 27 | if (self.block) { 28 | self.block(); 29 | } 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/ExampleViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleViewController.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/2/25. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ExampleViewController : UIViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /TFPopupDemo/TFPopupDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'TFPopupSwiftDemo' do 5 | # Comment the next line if you don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for TFPopupSwiftDemo 9 | pod 'TFPopup' # 通用弹出框架 10 | pod 'SnapKit' # layout 11 | 12 | end 13 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SnapKit (4.2.0) 3 | - TFPopup (1.2.0) 4 | 5 | DEPENDENCIES: 6 | - SnapKit 7 | - TFPopup 8 | 9 | SPEC REPOS: 10 | https://github.com/cocoapods/specs.git: 11 | - SnapKit 12 | - TFPopup 13 | 14 | SPEC CHECKSUMS: 15 | SnapKit: fe8a619752f3f27075cc9a90244d75c6c3f27e2a 16 | TFPopup: 8063a25461735778f2d6203008ec2e892fc36ffb 17 | 18 | PODFILE CHECKSUM: 11961b6a4068158ecd60b45303e83e49caae62a5 19 | 20 | COCOAPODS: 1.7.5 21 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SnapKit (4.2.0) 3 | - TFPopup (1.2.0) 4 | 5 | DEPENDENCIES: 6 | - SnapKit 7 | - TFPopup 8 | 9 | SPEC REPOS: 10 | https://github.com/cocoapods/specs.git: 11 | - SnapKit 12 | - TFPopup 13 | 14 | SPEC CHECKSUMS: 15 | SnapKit: fe8a619752f3f27075cc9a90244d75c6c3f27e2a 16 | TFPopup: 8063a25461735778f2d6203008ec2e892fc36ffb 17 | 18 | PODFILE CHECKSUM: 11961b6a4068158ecd60b45303e83e49caae62a5 19 | 20 | COCOAPODS: 1.7.5 21 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/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 os(iOS) || os(tvOS) 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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/ConstraintInsets.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | public typealias ConstraintInsets = UIEdgeInsets 33 | #else 34 | public typealias ConstraintInsets = NSEdgeInsets 35 | #endif 36 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/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 os(iOS) || os(tvOS) 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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 9.0, OSX 10.11, *) 30 | public extension ConstraintLayoutGuide { 31 | 32 | public var snp: ConstraintLayoutGuideDSL { 33 | return ConstraintLayoutGuideDSL(guide: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/ConstraintLayoutGuide.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 9.0, *) 33 | public typealias ConstraintLayoutGuide = UILayoutGuide 34 | #else 35 | @available(OSX 10.11, *) 36 | public typealias ConstraintLayoutGuide = NSLayoutGuide 37 | #endif 38 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/ConstraintLayoutSupport.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 8.0, *) 33 | public typealias ConstraintLayoutSupport = UILayoutSupport 34 | #else 35 | public class ConstraintLayoutSupport {} 36 | #endif 37 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/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 os(iOS) || os(tvOS) 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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/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 os(iOS) || os(tvOS) 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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/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 os(iOS) || os(tvOS) 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 | extension ConstraintItem: ConstraintRelatableTarget { 59 | } 60 | 61 | extension ConstraintView: ConstraintRelatableTarget { 62 | } 63 | 64 | @available(iOS 9.0, OSX 10.11, *) 65 | extension ConstraintLayoutGuide: ConstraintRelatableTarget { 66 | } 67 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/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 os(iOS) || os(tvOS) 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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/ConstraintView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | public typealias ConstraintView = UIView 33 | #else 34 | public typealias ConstraintView = NSView 35 | #endif 36 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/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 os(iOS) || os(tvOS) 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 | guard lhs.firstItem === rhs.firstItem && 48 | lhs.secondItem === rhs.secondItem && 49 | lhs.firstAttribute == rhs.firstAttribute && 50 | lhs.secondAttribute == rhs.secondAttribute && 51 | lhs.relation == rhs.relation && 52 | lhs.priority == rhs.priority && 53 | lhs.multiplier == rhs.multiplier else { 54 | return false 55 | } 56 | return true 57 | } 58 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/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 os(iOS) || os(tvOS) 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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 8.0, *) 30 | public extension ConstraintLayoutSupport { 31 | 32 | public var snp: ConstraintLayoutSupportDSL { 33 | return ConstraintLayoutSupportDSL(support: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 抱紧我的小鲤鱼 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/TFPopup/NSObject+TFPopupMethodExchange.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+TFPopupMethodExchange.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/8/15. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface NSObject (TFPopupMethodExchange) 13 | /** 14 | * 交换类方法和交换实例方法 15 | */ 16 | +(BOOL)popup_instanceMethodExchange:(SEL)originSel toClass:(Class)toClass toSel:(SEL)toSel; 17 | 18 | +(BOOL)popup_classMethodExchange:(SEL)originSel toClass:(Class)toClass toSel:(SEL)toSel; 19 | 20 | @end 21 | 22 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/TFPopup/NSObject+TFPopupMethodExchange.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+TFPopupMethodExchange.m 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/8/15. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "NSObject+TFPopupMethodExchange.h" 10 | 11 | @implementation NSObject (TFPopupMethodExchange) 12 | 13 | /** 14 | * 交换类方法和交换实例方法 15 | */ 16 | +(BOOL)popup_instanceMethodExchange:(SEL)originSel toClass:(Class)toClass toSel:(SEL)toSel{ 17 | Method originMethod = class_getInstanceMethod([self class], originSel); 18 | Method toMethod = class_getInstanceMethod(toClass, toSel); 19 | BOOL added = class_addMethod([self class], originSel, method_getImplementation(toMethod), method_getTypeEncoding(toMethod)); 20 | if (!added) { 21 | method_exchangeImplementations(originMethod, toMethod); 22 | }else{ 23 | class_replaceMethod(self, toSel, method_getImplementation(originMethod), method_getTypeEncoding(originMethod)); 24 | } 25 | return YES; 26 | } 27 | 28 | +(BOOL)popup_classMethodExchange:(SEL)originSel toClass:(Class)toClass toSel:(SEL)toSel{ 29 | Method originMethod = class_getClassMethod([self class], originSel); 30 | Method toMethod = class_getClassMethod(toClass, toSel); 31 | Class metaClass = objc_getMetaClass(NSStringFromClass([self class]).UTF8String); 32 | IMP toImp = method_getImplementation(toMethod); 33 | const char *toTypeEncoding = method_getTypeEncoding(toMethod); 34 | BOOL addMethod = class_addMethod(metaClass,originSel,toImp,toTypeEncoding); 35 | if (!addMethod) { 36 | method_exchangeImplementations(originMethod, toMethod); 37 | }else{ 38 | IMP originImp = method_getImplementation(originMethod); 39 | const char *originTypeEncoding = method_getTypeEncoding(originMethod); 40 | class_replaceMethod([self class],toSel,originImp,originTypeEncoding); 41 | } 42 | return YES; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/TFPopup/TFPopup.h: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopup.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #ifndef TFPopup_h 10 | #define TFPopup_h 11 | 12 | #import "TFPopupToast.h" 13 | #import "UIView+TFPopup.h" 14 | 15 | #endif /* TFPopup_h */ 16 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/TFPopup/TFPopupConst.h: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopupConst.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/5/13. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #ifndef TFPopupConst_h 10 | #define TFPopupConst_h 11 | 12 | #import 13 | 14 | #pragma mark -- 属性绑定 15 | #ifndef tf_synthesize_category_property 16 | #define tf_synthesize_category_property(getter,settter,objc_AssociationPolicy,TYPE)\ 17 | - (TYPE)getter{return objc_getAssociatedObject(self, @selector(getter));}\ 18 | - (void)settter:(TYPE)obj{objc_setAssociatedObject(self, @selector(getter), obj, objc_AssociationPolicy);} 19 | #endif 20 | 21 | #ifndef tf_synthesize_category_property_retain 22 | #define tf_synthesize_category_property_retain(getter,settter) tf_synthesize_category_property(getter,settter,OBJC_ASSOCIATION_RETAIN_NONATOMIC,id) 23 | #endif 24 | 25 | #ifndef tf_synthesize_category_property_copy 26 | #define tf_synthesize_category_property_copy(getter,settter) tf_synthesize_category_property(getter,settter,OBJC_ASSOCIATION_COPY,id) 27 | #endif 28 | 29 | #ifndef tf_synthesize_category_property_assign 30 | #define tf_synthesize_category_property_assign(getter,settter) tf_synthesize_category_property(getter,settter,OBJC_ASSOCIATION_ASSIGN,id) 31 | #endif 32 | 33 | #ifndef x_weakSelf 34 | #define x_weakSelf __weak typeof(self) weakself = self 35 | #endif 36 | 37 | #ifdef DEBUG 38 | #define PopupLog(fmt, ...) NSLog((@"\nfunc:%s,line:%d\n" fmt @"\n"), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 39 | #else 40 | #define PopupLog(...) 41 | #endif 42 | 43 | 44 | typedef NS_ENUM(NSInteger,TFAnimationType) { 45 | TFAnimationTypeFade, 46 | TFAnimationTypeScale, 47 | }; 48 | 49 | #endif /* TFPopupConst_h */ 50 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/TFPopup/TFPopupExtension.m: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopupExtension.m 3 | // TFPopupDemo 4 | // 5 | // Created by Time on 2019/3/4. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import "TFPopupExtension.h" 10 | 11 | @implementation TFPopupExtension 12 | 13 | -(NSMutableArray *)backgroundViewArray{ 14 | if (_backgroundViewArray == nil) { 15 | _backgroundViewArray = [[NSMutableArray alloc]init]; 16 | } 17 | return _backgroundViewArray; 18 | } 19 | -(NSMutableArray *)backgroundViewFrameArray{ 20 | if (_backgroundViewFrameArray == nil) { 21 | _backgroundViewFrameArray = [[NSMutableArray alloc]init]; 22 | } 23 | return _backgroundViewFrameArray; 24 | } 25 | 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/TFPopup/TFPopupLoading.h: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopupLoading.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/5/13. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "TFPopupConst.h" 11 | 12 | @class TFPopupLoading; 13 | typedef void(^TFPopupLoadingBlock)(TFPopupLoading *toast); 14 | 15 | @interface TFPopupLoading : UIView 16 | 17 | @property(nonatomic,strong)UIActivityIndicatorView *indicatorView; 18 | @property(nonatomic,strong)UILabel *msgLabel; 19 | 20 | +(void)tf_show:(UIView *)inView animationType:(TFAnimationType)animationType; 21 | +(void)tf_hide:(UIView *)inView; 22 | 23 | @end 24 | 25 | 26 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/TFPopup/TFPopupParam.m: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopupParam.m 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/18. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import "TFPopupParam.h" 10 | 11 | @implementation TFPopupParam 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/TFPopup/TFPopupToast.h: -------------------------------------------------------------------------------- 1 | // 2 | // TFPopupToast.h 3 | // TFPopupDemo 4 | // 5 | // Created by ztf on 2019/1/14. 6 | // Copyright © 2019年 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "TFPopupConst.h" 11 | 12 | @class TFPopupToast; 13 | typedef void(^TFPopupToastBlock)(TFPopupToast *toast); 14 | 15 | @interface TFPopupToast : UIView 16 | 17 | @property(nonatomic,assign)UIEdgeInsets edge; 18 | @property(nonatomic,strong)UILabel *msgLabel; 19 | 20 | //注释同下 21 | +(void)tf_show:(UIView *)inView msg:(NSString *)msg animationType:(TFAnimationType)animationType; 22 | 23 | /* toast展示,默认黑底白字,底80%黑色不透明度 24 | * inView 容器视图 25 | * msg:弹出string 26 | * offset,弹框偏移,offset.x正为右移,offset.y正为下移 27 | * duration,自动消失时间,值为0时默认被设置为最低为1.5s,根据字数计算消失时间最大5s 28 | * animationType,动画方式,渐隐和缩放,默认渐隐 29 | * customBlock,可在此回调内设置样式 */ 30 | +(void)tf_show:(UIView *)inView 31 | msg:(NSString *)msg 32 | offset:(CGPoint)offset 33 | dissmissDuration:(NSTimeInterval)duration 34 | animationType:(TFAnimationType)animationType 35 | customBlock:(TFPopupToastBlock)customBlock; 36 | 37 | @end 38 | 39 | 40 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/TFPopup/TFPopup/UIScrollView+TFPopup.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+TFPopup.h 3 | // TFPopupDemo 4 | // 5 | // Created by zhutaofeng on 2019/8/15. 6 | // Copyright © 2019 ztf. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "TFPopupConst.h" 12 | #import "NSObject+TFPopupMethodExchange.h" 13 | 14 | @interface UIScrollView (TFPopup) 15 | 16 | @property(nonatomic, weak) UIView *faterPopupView; 17 | 18 | @end 19 | 20 | 21 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TFPopupSwiftDemo : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TFPopupSwiftDemo 5 | @end 6 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework 3 | ${BUILT_PRODUCTS_DIR}/TFPopup/TFPopup.framework -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TFPopup.framework -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework 3 | ${BUILT_PRODUCTS_DIR}/TFPopup/TFPopup.framework -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TFPopup.framework -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo-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_TFPopupSwiftDemoVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_TFPopupSwiftDemoVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/TFPopup" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TFPopup/TFPopup.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "TFPopup" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_TFPopupSwiftDemo { 2 | umbrella header "Pods-TFPopupSwiftDemo-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/Pods-TFPopupSwiftDemo/Pods-TFPopupSwiftDemo.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/TFPopup" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TFPopup/TFPopup.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "TFPopup" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/SnapKit/SnapKit-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.2.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/SnapKit/SnapKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SnapKit : NSObject 3 | @end 4 | @implementation PodsDummy_SnapKit 5 | @end 6 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/SnapKit/SnapKit.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/TFPopup/TFPopup-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.2.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/TFPopup/TFPopup-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_TFPopup : NSObject 3 | @end 4 | @implementation PodsDummy_TFPopup 5 | @end 6 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/TFPopup/TFPopup-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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/TFPopup/TFPopup-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 "NSObject+TFPopupMethodExchange.h" 14 | #import "TFPopup.h" 15 | #import "TFPopupConst.h" 16 | #import "TFPopupExtension.h" 17 | #import "TFPopupLoading.h" 18 | #import "TFPopupParam.h" 19 | #import "TFPopupToast.h" 20 | #import "UIScrollView+TFPopup.h" 21 | #import "UIView+TFPopup.h" 22 | 23 | FOUNDATION_EXPORT double TFPopupVersionNumber; 24 | FOUNDATION_EXPORT const unsigned char TFPopupVersionString[]; 25 | 26 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/TFPopup/TFPopup.modulemap: -------------------------------------------------------------------------------- 1 | framework module TFPopup { 2 | umbrella header "TFPopup-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/Pods/Target Support Files/TFPopup/TFPopup.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TFPopup 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/TFPopup 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/28. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @available(iOS 13.0, *) 12 | @UIApplicationMain 13 | class AppDelegate: UIResponder, UIApplicationDelegate { 14 | 15 | @objc var window: UIWindow? 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | 19 | let mainController:UIViewController = MainController.init() 20 | 21 | let mainNavController = MainNavigationController.init(rootViewController: mainController) 22 | 23 | self.window = UIWindow.init(frame: UIScreen.main.bounds) 24 | 25 | self.window?.rootViewController = mainNavController; 26 | 27 | self.window?.makeKeyAndVisible() 28 | 29 | return true 30 | } 31 | 32 | 33 | } 34 | 35 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_friend.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_friend@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_friend.imageset/share_friend@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_friend.imageset/share_friend@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_link.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_link@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_link.imageset/share_link@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_link.imageset/share_link@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_message.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_message@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_message.imageset/share_message@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_message.imageset/share_message@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_qq.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_qq@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_qq.imageset/share_qq@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_qq.imageset/share_qq@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_qq_zone.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_qq_zone@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_qq_zone.imageset/share_qq_zone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_qq_zone.imageset/share_qq_zone@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_weibo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_weibo@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_weibo.imageset/share_weibo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_weibo.imageset/share_weibo@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_wexin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "share_wexin@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_wexin.imageset/share_wexin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/01/share_wexin.imageset/share_wexin@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-01@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-1.imageset/popup-01@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-1.imageset/popup-01@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-10.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-10@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-10.imageset/popup-10@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-10.imageset/popup-10@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-11.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-11@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-11.imageset/popup-11@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-11.imageset/popup-11@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-02@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-2.imageset/popup-02@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-2.imageset/popup-02@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-03@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-3.imageset/popup-03@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-3.imageset/popup-03@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-04@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-4.imageset/popup-04@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-4.imageset/popup-04@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-05@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-5.imageset/popup-05@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-5.imageset/popup-05@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-06@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-6.imageset/popup-06@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-6.imageset/popup-06@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-07@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-7.imageset/popup-07@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-7.imageset/popup-07@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-08@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-8.imageset/popup-08@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-8.imageset/popup-08@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "popup-9.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-9.imageset/popup-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-9.imageset/popup-9.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-bg-01@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-1.imageset/popup-bg-01@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-1.imageset/popup-bg-01@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-bg-2@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-2.imageset/popup-bg-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-2.imageset/popup-bg-2@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-bg-3@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-3.imageset/popup-bg-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-3.imageset/popup-bg-3@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "popup-bg-3@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-4.imageset/popup-bg-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/02/popup-bg-4.imageset/popup-bg-3@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/launch.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "launch@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/launch.imageset/launch@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shmxybfq/TFPopup/dfd08b2ce65a36fbe28941bab68c523cb1c918bf/TFPopupSwiftDemo/TFPopupSwiftDemo/Assets.xcassets/launch.imageset/launch@2x.png -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/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 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/CustomBaseView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomBaseView.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/2. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CustomBaseView: UIView { 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | 16 | let imageView:UIImageView = UIImageView.init(image: UIImage.init(named: "popup-1")) 17 | self.addSubview(imageView) 18 | imageView.snp.remakeConstraints { (make) in 19 | make.top.left.bottom.right.equalToSuperview() 20 | } 21 | } 22 | 23 | required init?(coder: NSCoder) { 24 | fatalError("init(coder:) has not been implemented") 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/CustomController0.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomController0.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/2. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import TFPopup 11 | 12 | class CustomController0: UIViewController { 13 | 14 | let param:TFPopupParam = TFPopupParam() 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | self.title = "自定义-背景" 19 | self.param.popupSize = CGSize.init(width: 300, height: 310) 20 | self.param.disuseShowPopupAlphaAnimation = false; 21 | self.param.disuseHidePopupAlphaAnimation = false; 22 | } 23 | 24 | @IBAction func allButtonActions(_ sender: UIButton) { 25 | let title:String = sender.title(for: .normal)! 26 | 27 | if title == "重定义背景事件"{ 28 | CustomWithBackgroundView0.init().tf_showScale(self.view, offset: CGPoint.zero, popupParam: self.param) 29 | } 30 | 31 | if title == "示例:重定义背景动画"{ 32 | CustomWithBackgroundView1.init().tf_showScale(self.view, offset: CGPoint.zero, popupParam: self.param) 33 | } 34 | 35 | if title == "背景自定义"{ 36 | CustomWithBackgroundView2.init().tf_showScale(self.view, offset: CGPoint.zero, popupParam: self.param) 37 | } 38 | 39 | if title == "多背景+动画"{ 40 | CustomWithBackgroundView3.init().tf_showScale(self.view, offset: CGPoint.zero, popupParam: self.param) 41 | } 42 | 43 | 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/CustomWithBackgroundView0.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomWithBackgroundView0.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/2. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CustomWithBackgroundView0: CustomBaseView,UIAlertViewDelegate { 12 | 13 | //重写父类tf_popupViewBackgroundDidTouch 14 | override func tf_popupViewBackgroundDidTouch(_ popup: UIView!) -> Bool { 15 | self.observerBackgroundViewTouch() 16 | return false 17 | } 18 | 19 | 20 | func observerBackgroundViewTouch() { 21 | let title:String = "自定义背景点击事件" 22 | let msg:String = "子类重写【tf_popupViewBackgroundDidTouch】方法" 23 | let alert:UIAlertView = UIAlertView.init(title: title, 24 | message: msg, 25 | delegate: self, 26 | cancelButtonTitle: "确定") 27 | alert.show() 28 | } 29 | 30 | 31 | func alertView(_ alertView: UIAlertView, didDismissWithButtonIndex buttonIndex: Int) { 32 | self.tf_hide() 33 | } 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/CustomWithBackgroundView1.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomWithBackgroundView1.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/2. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CustomWithBackgroundView1: CustomBaseView { 12 | 13 | let size:CGSize = UIScreen.main.bounds.size 14 | 15 | override func tf_popupViewWillShow(_ popup: UIView!) -> Bool { 16 | 17 | //在这里可以拿到背景view,可以在将要弹出前对其进行更改 18 | self.extension.defaultBackgroundView.backgroundColor = UIColor.brown 19 | 20 | self.extension.defaultBackgroundView.frame = CGRect.init(origin: CGPoint.init(x: 0, y: -self.size.height),size: size) 21 | 22 | UIView.animate(withDuration: 0.5) { 23 | self.extension.defaultBackgroundView.frame = CGRect.init(origin: CGPoint.init(x: 0, y: 0),size: self.size) 24 | } 25 | 26 | return super.tf_popupViewWillShow(popup) 27 | 28 | } 29 | 30 | 31 | override func tf_popupViewWillHide(_ popup: UIView!) -> Bool { 32 | 33 | //在这里可以拿到背景view,可以在将要消失前对其进行更改 34 | self.extension.defaultBackgroundView.backgroundColor = UIColor.red 35 | 36 | UIView.animate(withDuration: 0.5) { 37 | self.extension.defaultBackgroundView.frame = CGRect.init(origin: CGPoint.init(x: 0, y: self.size.height),size: self.size) 38 | } 39 | 40 | return super.tf_popupViewWillHide(popup) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/CustomWithBackgroundView2.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomWithBackgroundView2.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/2. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import TFPopup 11 | 12 | class CustomWithBackgroundView2: CustomBaseView { 13 | 14 | let bgButton:UIButton = UIButton.init(type: .custom) 15 | 16 | override func tf_popupBackgroundViewCount(_ popup: UIView!) -> Int { 17 | return 1; 18 | } 19 | override func tf_popupView(_ popup: UIView!, backgroundViewAt index: Int) -> UIView! { 20 | self.bgButton.setBackgroundImage(UIImage.init(named: "popup-bg-4"), for: .normal) 21 | self.bgButton.setBackgroundImage(UIImage.init(named: "popup-bg-4"), for: .highlighted) 22 | self.bgButton.addTarget(self, action: #selector(bgTouch), for: .touchUpInside) 23 | self.bgButton.alpha = 0; 24 | return self.bgButton 25 | } 26 | override func tf_popupView(_ popup: UIView!, backgroundViewFrameAt index: Int) -> CGRect { 27 | return UIScreen.main.bounds; 28 | } 29 | 30 | @objc func bgTouch() { 31 | self.tf_hide() 32 | } 33 | 34 | //弹出时背景渐隐 35 | override func tf_popupViewWillShow(_ popup: UIView!) -> Bool { 36 | 37 | UIView.animate(withDuration: 0.3) { 38 | self.bgButton.alpha = 1.0; 39 | } 40 | 41 | return super.tf_popupViewWillShow(popup) 42 | } 43 | 44 | 45 | //消失时背景渐隐 46 | override func tf_popupViewWillHide(_ popup: UIView!) -> Bool { 47 | 48 | UIView.animate(withDuration: 0.3) { 49 | self.bgButton.alpha = 0.0; 50 | } 51 | 52 | return super.tf_popupViewWillHide(popup) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/BottomView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BottomView.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/30. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BottomView: UIView { 12 | 13 | @IBOutlet weak var mainButton: UIButton! 14 | 15 | override func awakeFromNib() { 16 | self.mainButton.addTarget(self, action: #selector(hide), for: .touchUpInside) 17 | } 18 | 19 | 20 | @objc func hide(){ 21 | self.tf_hide() 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/BubbleView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BubbleView.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/1. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BubbleView: UIView { 12 | 13 | @IBOutlet weak var mainButton: UIButton! 14 | 15 | override func awakeFromNib() { 16 | self.mainButton.addTarget(self, action: #selector(hide), for: .touchUpInside) 17 | } 18 | 19 | 20 | @objc func hide(){ 21 | self.tf_hide() 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/LeftRightView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LeftRightView.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/30. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class LeftRightView: UIView { 12 | 13 | @IBOutlet weak var mainButton: UIButton! 14 | 15 | override func awakeFromNib() { 16 | self.mainButton.addTarget(self, action: #selector(hide), for: .touchUpInside) 17 | } 18 | 19 | 20 | @objc func hide(){ 21 | self.tf_hide() 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/NormalController0.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NormalController0.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/30. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class NormalController0: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | self.title = "普通" 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | @IBAction func noAnimaitonPopup(_ sender: Any) { 20 | UniversalView.loadFromXib()?.tf_showNormal(self.view, animated: false) 21 | } 22 | 23 | @IBAction func animaitonPopup(_ sender: Any) { 24 | UniversalView.loadFromXib()?.tf_showNormal(self.view, animated: true) 25 | } 26 | 27 | /* 28 | // MARK: - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 32 | // Get the new view controller using segue.destination. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | } 38 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/NormalController1.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NormalController1.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/30. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import TFPopup 11 | 12 | class NormalController1: UIViewController { 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | self.title = "滑动" 17 | } 18 | 19 | let window = UIApplication.shared.windows.last 20 | 21 | @IBAction func bottomToTop(_ sender: Any) { 22 | let param:TFPopupParam = TFPopupParam() 23 | BottomView.loadFromXib()?.tf_showSlide(self.view, direction: .bottom, popupParam: param) 24 | } 25 | 26 | @IBAction func leftToRight(_ sender: Any) { 27 | let param:TFPopupParam = TFPopupParam() 28 | param.popupSize = CGSize.init(width: 250, height: UIScreen.main.bounds.size.height) 29 | LeftRightView.loadFromXib()?.tf_showSlide(window, direction: .left, popupParam: param) 30 | } 31 | 32 | @IBAction func topToBottom(_ sender: Any) { 33 | let param:TFPopupParam = TFPopupParam() 34 | param.popupSize = CGSize.init(width: UIScreen.main.bounds.size.width, height:114) 35 | TopView.loadFromXib()?.tf_showSlide(window, direction: .top, popupParam: param) 36 | } 37 | 38 | @IBAction func rightToLeft(_ sender: Any) { 39 | let param:TFPopupParam = TFPopupParam() 40 | param.popupSize = CGSize.init(width: 250, height: UIScreen.main.bounds.size.height) 41 | LeftRightView.loadFromXib()?.tf_showSlide(window, direction: .right, popupParam: param) 42 | } 43 | 44 | 45 | } 46 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/NormalController2.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NormalController2.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/1. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import TFPopup 11 | 12 | class NormalController2: UIViewController { 13 | 14 | @IBOutlet weak var menuView: UIView! 15 | 16 | let whPercent:CGFloat = 414 / 316.0 17 | var targetFrame: CGRect { 18 | get { 19 | let w = UIScreen.main.bounds.size.width 20 | let h = w / whPercent 21 | return CGRect.init(x: 0, y: self.menuView.frame.height, width: w, height: h) 22 | } 23 | } 24 | 25 | let param:TFPopupParam = TFPopupParam() 26 | 27 | override func viewDidLoad() { 28 | super.viewDidLoad() 29 | self.title = "折叠" 30 | self.param.disuseShowPopupAlphaAnimation = true; 31 | self.param.disuseHidePopupAlphaAnimation = true; 32 | } 33 | 34 | 35 | @IBAction func bottomToTop(_ sender: Any) { 36 | 37 | let view:TopBottomFoldView = TopBottomFoldView.loadFromXib() as! TopBottomFoldView 38 | view.tf_showFold(self.view, targetFrame: targetFrame, direction: .bottom, popupParam: param) 39 | } 40 | 41 | @IBAction func leftToRight(_ sender: Any) { 42 | let view:TopBottomFoldView = TopBottomFoldView.loadFromXib() as! TopBottomFoldView 43 | view.tf_showFold(self.view, targetFrame: targetFrame, direction: .left, popupParam: param) 44 | } 45 | 46 | @IBAction func topToBottom(_ sender: Any) { 47 | let view:TopBottomFoldView = TopBottomFoldView.loadFromXib() as! TopBottomFoldView 48 | view.tf_showFold(self.view, targetFrame: targetFrame, direction: .top, popupParam: param) 49 | } 50 | 51 | @IBAction func rightToLeft(_ sender: Any) { 52 | let view:TopBottomFoldView = TopBottomFoldView.loadFromXib() as! TopBottomFoldView 53 | view.tf_showFold(self.view, targetFrame: targetFrame, direction: .right, popupParam: param) 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/NormalController3.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NormalController3.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/1. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import TFPopup 11 | 12 | class NormalController3: UIViewController { 13 | 14 | let param:TFPopupParam = TFPopupParam() 15 | let bubbleView:BubbleView = BubbleView.loadFromXib() as! BubbleView 16 | 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | self.title = "泡泡" 20 | self.param.popupSize = CGSize.init(width: 247 * 0.5, height: 243 * 0.5) 21 | self.param.disuseShowPopupAlphaAnimation = true; 22 | self.param.disuseHidePopupAlphaAnimation = true; 23 | } 24 | 25 | @IBAction func allButtonActions(_ sender: UIButton) { 26 | let title:String = sender.title(for: .normal)! 27 | 28 | var direction:PopupDirection = .bottomLeft 29 | 30 | if title == "左下" { direction = .bottomLeft } 31 | if title == "左" { direction = .left } 32 | if title == "左上" { direction = .leftTop } 33 | if title == "上" { direction = .top } 34 | if title == "右上" { direction = .topRight } 35 | if title == "右" { direction = .right } 36 | if title == "右下" { direction = .rightBottom } 37 | if title == "下" { direction = .bottom } 38 | 39 | 40 | bubbleView.tf_showBubble(self.view, basePoint: self.view.center, bubble: direction, popupParam: param); 41 | } 42 | 43 | 44 | } 45 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/NormalController4.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NormalController4.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/1. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import TFPopup 11 | 12 | class NormalController4: UIViewController { 13 | 14 | let param:TFPopupParam = TFPopupParam() 15 | 16 | let width:CGFloat = 300 17 | let height:CGFloat = 310 18 | let size:CGSize = UIScreen.main.bounds.size 19 | 20 | override func viewDidLoad() { 21 | super.viewDidLoad() 22 | self.title = "位置+尺寸" 23 | self.param.disuseShowPopupAlphaAnimation = true; 24 | self.param.disuseHidePopupAlphaAnimation = true; 25 | } 26 | 27 | 28 | 29 | @IBAction func frameChange(_ sender: Any) { 30 | 31 | let from:CGRect = CGRect.init(x: -width, y: (size.height - height) * 0.5, width: width, height: height) 32 | let to:CGRect = CGRect.init(x: (size.width - width) * 0.5, y: (size.height - height) * 0.5, width: width, height: height) 33 | 34 | UniversalView.loadFromXib()?.tf_showFrame(self.view, from: from, to: to, popupParam: param) 35 | 36 | } 37 | 38 | @IBAction func frameAndSizeChange(_ sender: Any) { 39 | 40 | self.param.disuseShowPopupAlphaAnimation = false; 41 | self.param.disuseHidePopupAlphaAnimation = false; 42 | 43 | let halfW = width * 0.5 44 | let halfH = height * 0.5 45 | 46 | let from:CGRect = CGRect.init(x: (size.width - halfW) * 0.5, y: (size.height - halfH) * 0.5, width: halfW, height: halfH) 47 | let to:CGRect = CGRect.init(x: (size.width - width) * 0.5, y: (size.height - height) * 0.5, width: width, height: height) 48 | 49 | //对frame的大小做动画时要考虑subviews的变化,这里为了突出效果使用了一个没有子视图的view 50 | let view = UIView.init() 51 | view.backgroundColor = UIColor.brown 52 | view.tf_showFrame(self.view, from: from, to: to, popupParam: param) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/NormalController6.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NormalController6.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/2. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import TFPopup 11 | 12 | class NormalController6: UIViewController { 13 | 14 | let param:TFPopupParam = TFPopupParam() 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | self.title = "拖动" 19 | 20 | self.param.dragAutoDissmissMinDistance = 60;//多动多少像素后触发松开手消失弹框时间,default = 80,小于设置的拖动像素时松开手弹框回到原来位置 21 | 22 | self.param.disuseShowPopupAlphaAnimation = true; 23 | self.param.disuseHidePopupAlphaAnimation = true; 24 | param.popupSize = CGSize.init(width: 300, height: 310) 25 | } 26 | 27 | @IBAction func slideDrag(_ sender: Any) { 28 | 29 | param.dragEnable = true//在滑动弹出的情况下只需要打开拖动属性即可获得拖动功能,但仅限于向弹出的方向拖动 30 | param.dragBouncesEnable = true // 拖动反方向时是否支持弹性效果 31 | 32 | let oneView = UniversalView.loadFromXib() 33 | oneView?.tf_showSlide(self.view, direction: .bottom, popupParam: param) 34 | 35 | } 36 | 37 | 38 | @IBAction func otherDrag(_ sender: Any) { 39 | 40 | param.dragEnable = true//在滑动弹出的情况下只需要打开拖动属性即可获得拖动功能,但仅限于向弹出的方向拖动 41 | param.dragStyle = DragStyle(rawValue: DragStyle.toRight.rawValue | DragStyle.toBottom.rawValue | DragStyle.toLeft.rawValue | DragStyle.toTop.rawValue)! //设置拖动方向 42 | 43 | let oneView = UniversalView.loadFromXib() 44 | oneView?.tf_showScale(self.view, offset: CGPoint.zero, popupParam: param) 45 | 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/TopBottomFoldView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TopBottomFoldView.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/12/1. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class TopBottomFoldView: UIView { 12 | 13 | @IBOutlet weak var mainButton: UIButton! 14 | 15 | override func awakeFromNib() { 16 | self.mainButton.addTarget(self, action: #selector(hide), for: .touchUpInside) 17 | } 18 | 19 | 20 | @objc func hide(){ 21 | self.tf_hide() 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/TopView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TopView.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/30. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class TopView: UIView { 12 | 13 | @IBOutlet weak var mainButton: UIButton! 14 | 15 | override func awakeFromNib() { 16 | self.mainButton.addTarget(self, action: #selector(hide), for: .touchUpInside) 17 | } 18 | 19 | 20 | @objc func hide(){ 21 | self.tf_hide() 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Example/normal/UniversalView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UniversalView.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/30. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UniversalView: UIView { 12 | 13 | @IBOutlet weak var mainButton: UIButton! 14 | 15 | override func awakeFromNib() { 16 | self.mainButton.addTarget(self, action: #selector(hide), for: .touchUpInside) 17 | } 18 | 19 | 20 | @objc func hide(){ 21 | self.tf_hide() 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIRequiredDeviceCapabilities 26 | 27 | armv7 28 | 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/MainNavigationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainNavigationController.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/28. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MainNavigationController: UINavigationController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | 20 | /* 21 | // MARK: - Navigation 22 | 23 | // In a storyboard-based application, you will often want to do a little preparation before navigation 24 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 25 | // Get the new view controller using segue.destination. 26 | // Pass the selected object to the new view controller. 27 | } 28 | */ 29 | 30 | } 31 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/SwiftProjectUseOCPodHelper.h: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftProjectUseOCPodHelper.h 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/28. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface SwiftProjectUseOCPodHelper : UIView 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/SwiftProjectUseOCPodHelper.m: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftProjectUseOCPodHelper.m 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/28. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | #import "SwiftProjectUseOCPodHelper.h" 10 | 11 | @implementation SwiftProjectUseOCPodHelper 12 | 13 | /* 14 | // Only override drawRect: if you perform custom drawing. 15 | // An empty implementation adversely affects performance during animation. 16 | - (void)drawRect:(CGRect)rect { 17 | // Drawing code 18 | } 19 | */ 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/TFPopupSwiftDemo-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 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/UIView_ExtensionSystem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIView_ExtensionSystem.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/30. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Foundation 11 | 12 | extension UIView{ 13 | 14 | public class func loadFromXib() -> UIView?{ 15 | let vs = Bundle.main.loadNibNamed("\(self.classForCoder())", owner: nil, options: nil) 16 | if let views:Array = vs{ 17 | if views.count > 0 { 18 | return views.first as? UIView 19 | } 20 | } 21 | return nil 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TFPopupSwiftDemo/TFPopupSwiftDemo/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // TFPopupSwiftDemo 4 | // 5 | // Created by zhutaofeng on 2019/11/28. 6 | // Copyright © 2019 zhutaofeng. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | 17 | } 18 | 19 | } 20 | 21 | --------------------------------------------------------------------------------