├── .swift-version ├── AANotifier ├── Assets │ └── .gitkeep └── Classes │ ├── .gitkeep │ ├── AANibView.swift │ ├── AANotifier+Helper.swift │ └── AANotifier.swift ├── _Pods.xcodeproj ├── .DS_Store ├── Screenshots ├── demo.gif └── AANotifier.png ├── Example ├── Podfile ├── AANotifier │ ├── Images.xcassets │ │ ├── Contents.json │ │ ├── AA.imageset │ │ │ ├── 17049477.png │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-57x57@1x.png │ │ │ ├── Icon-App-57x57@2x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-72x72@1x.png │ │ │ ├── Icon-App-72x72@2x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── Icon-Small-50x50@1x.png │ │ │ ├── Icon-Small-50x50@2x.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ └── Contents.json │ ├── LikeView.swift │ ├── Info.plist │ ├── AppDelegate.swift │ ├── StatusView.xib │ ├── ToastView.xib │ ├── InfoView.xib │ ├── ViewController.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── LikeView.xib │ └── PopupView.xib ├── Pods │ ├── Target Support Files │ │ ├── AANotifier │ │ │ ├── AANotifier.modulemap │ │ │ ├── AANotifier-dummy.m │ │ │ ├── AANotifier-prefix.pch │ │ │ ├── AANotifier-umbrella.h │ │ │ ├── AANotifier.xcconfig │ │ │ ├── Info.plist │ │ │ └── AANotifier-Info.plist │ │ ├── AAViewAnimator │ │ │ ├── AAViewAnimator.modulemap │ │ │ ├── AAViewAnimator-dummy.m │ │ │ ├── AAViewAnimator-prefix.pch │ │ │ ├── AAViewAnimator-umbrella.h │ │ │ ├── AAViewAnimator.xcconfig │ │ │ ├── Info.plist │ │ │ └── AAViewAnimator-Info.plist │ │ └── Pods-AANotifier_Example │ │ │ ├── Pods-AANotifier_Example.modulemap │ │ │ ├── Pods-AANotifier_Example-dummy.m │ │ │ ├── Pods-AANotifier_Example-umbrella.h │ │ │ ├── Pods-AANotifier_Example.debug.xcconfig │ │ │ ├── Pods-AANotifier_Example.release.xcconfig │ │ │ ├── Info.plist │ │ │ ├── Pods-AANotifier_Example-Info.plist │ │ │ ├── Pods-AANotifier_Example-acknowledgements.markdown │ │ │ ├── Pods-AANotifier_Example-acknowledgements.plist │ │ │ ├── Pods-AANotifier_Example-resources.sh │ │ │ └── Pods-AANotifier_Example-frameworks.sh │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── xcuserdata │ │ │ ├── ahsanali.xcuserdatad │ │ │ │ └── xcschemes │ │ │ │ │ ├── xcschememanagement.plist │ │ │ │ │ ├── AANotifier.xcscheme │ │ │ │ │ ├── AAViewAnimator.xcscheme │ │ │ │ │ └── Pods-AANotifier_Example.xcscheme │ │ │ ├── macbookpro.xcuserdatad │ │ │ │ └── xcschemes │ │ │ │ │ ├── xcschememanagement.plist │ │ │ │ │ ├── AANotifier.xcscheme │ │ │ │ │ ├── AAViewAnimator.xcscheme │ │ │ │ │ └── Pods-AANotifier_Example.xcscheme │ │ │ ├── ali.xcuserdatad │ │ │ │ └── xcschemes │ │ │ │ │ └── xcschememanagement.plist │ │ │ └── muhammad.ahsan.xcuserdatad │ │ │ │ └── xcschemes │ │ │ │ ├── xcschememanagement.plist │ │ │ │ └── Pods-AANotifier_Example.xcscheme │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── AANotifier.xcscheme │ │ │ └── AAViewAnimator.xcscheme │ ├── Local Podspecs │ │ └── AANotifier.podspec.json │ └── AAViewAnimator │ │ ├── LICENSE │ │ ├── AAViewAnimator │ │ └── Classes │ │ │ ├── AAViewAnimator+UIKit.swift │ │ │ ├── AAViewAnimator+Helper.swift │ │ │ └── AAViewAnimator.swift │ │ └── README.md ├── AANotifier.xcworkspace │ ├── xcuserdata │ │ ├── ahsanali.xcuserdatad │ │ │ ├── xcdebugger │ │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── UserInterfaceState.xcuserstate │ │ ├── macbookpro.xcuserdatad │ │ │ ├── xcdebugger │ │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── UserInterfaceState.xcuserstate │ │ ├── muhammad.ahsan.xcuserdatad │ │ │ ├── xcdebugger │ │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── UserInterfaceState.xcuserstate │ │ └── ali.xcuserdatad │ │ │ ├── UserInterfaceState.xcuserstate │ │ │ └── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── AANotifier.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── xcuserdata │ │ ├── ali.xcuserdatad │ │ │ └── xcschemes │ │ │ │ └── xcschememanagement.plist │ │ ├── ahsanali.xcuserdatad │ │ │ └── xcschemes │ │ │ │ └── xcschememanagement.plist │ │ ├── macbookpro.xcuserdatad │ │ │ └── xcschemes │ │ │ │ └── xcschememanagement.plist │ │ └── muhammad.ahsan.xcuserdatad │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── AANotifier-Example.xcscheme │ └── project.pbxproj └── Podfile.lock ├── .travis.yml ├── LICENSE ├── AANotifier.podspec └── README.md /.swift-version: -------------------------------------------------------------------------------- 1 | 5.0 2 | -------------------------------------------------------------------------------- /AANotifier/Assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /AANotifier/Classes/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/.DS_Store -------------------------------------------------------------------------------- /Screenshots/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Screenshots/demo.gif -------------------------------------------------------------------------------- /Screenshots/AANotifier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Screenshots/AANotifier.png -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'AANotifier_Example' do 4 | pod 'AANotifier', :path => '../' 5 | end 6 | -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AA.imageset/17049477.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AA.imageset/17049477.png -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AANotifier/AANotifier.modulemap: -------------------------------------------------------------------------------- 1 | framework module AANotifier { 2 | umbrella header "AANotifier-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AANotifier/AANotifier-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_AANotifier : NSObject 3 | @end 4 | @implementation PodsDummy_AANotifier 5 | @end 6 | -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/xcuserdata/ahsanali.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/xcuserdata/macbookpro.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/xcuserdata/muhammad.ahsan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AAViewAnimator/AAViewAnimator.modulemap: -------------------------------------------------------------------------------- 1 | framework module AAViewAnimator { 2 | umbrella header "AAViewAnimator-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AAViewAnimator/AAViewAnimator-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_AAViewAnimator : NSObject 3 | @end 4 | @implementation PodsDummy_AAViewAnimator 5 | @end 6 | -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/xcuserdata/ali.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier.xcworkspace/xcuserdata/ali.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/xcuserdata/ahsanali.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier.xcworkspace/xcuserdata/ahsanali.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/xcuserdata/macbookpro.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier.xcworkspace/xcuserdata/macbookpro.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_AANotifier_Example { 2 | umbrella header "Pods-AANotifier_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/AANotifier.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/xcuserdata/ali.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/xcuserdata/muhammad.ahsan.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/HEAD/Example/AANotifier.xcworkspace/xcuserdata/muhammad.ahsan.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_AANotifier_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_AANotifier_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AANotifier/AANotifier-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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AAViewAnimator/AAViewAnimator-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 | -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/AANotifier.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AANotifier/AANotifier-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 AANotifierVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AANotifierVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AA.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "17049477.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 | } -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AAViewAnimator/AAViewAnimator-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 AAViewAnimatorVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AAViewAnimatorVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example-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_AANotifier_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_AANotifier_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/AANotifier.xcodeproj/xcuserdata/ali.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | AANotifier-Example.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 1 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Example/AANotifier.xcodeproj/xcuserdata/ahsanali.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | AANotifier-Example.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 1 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Example/AANotifier.xcodeproj/xcuserdata/macbookpro.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | AANotifier-Example.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 1 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AAViewAnimator/AAViewAnimator.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AAViewAnimator 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}/AAViewAnimator 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AANotifier (1.1): 3 | - AAViewAnimator (~> 1.1) 4 | - AAViewAnimator (1.1) 5 | 6 | DEPENDENCIES: 7 | - AANotifier (from `../`) 8 | 9 | SPEC REPOS: 10 | https://github.com/cocoapods/specs.git: 11 | - AAViewAnimator 12 | 13 | EXTERNAL SOURCES: 14 | AANotifier: 15 | :path: "../" 16 | 17 | SPEC CHECKSUMS: 18 | AANotifier: 1728da12d929b858fd87d157e5d4d99d1b560c63 19 | AAViewAnimator: 3cbd05e73ebda910231f966f8043ba96e674eee5 20 | 21 | PODFILE CHECKSUM: a646af3d9c99e913233dddf8477b4dcef01b35ab 22 | 23 | COCOAPODS: 1.6.2 24 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -workspace Example/AANotifier.xcworkspace -scheme AANotifier-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AANotifier (1.1): 3 | - AAViewAnimator (~> 1.1) 4 | - AAViewAnimator (1.1) 5 | 6 | DEPENDENCIES: 7 | - AANotifier (from `../`) 8 | 9 | SPEC REPOS: 10 | https://github.com/cocoapods/specs.git: 11 | - AAViewAnimator 12 | 13 | EXTERNAL SOURCES: 14 | AANotifier: 15 | :path: "../" 16 | 17 | SPEC CHECKSUMS: 18 | AANotifier: 1728da12d929b858fd87d157e5d4d99d1b560c63 19 | AAViewAnimator: 3cbd05e73ebda910231f966f8043ba96e674eee5 20 | 21 | PODFILE CHECKSUM: a646af3d9c99e913233dddf8477b4dcef01b35ab 22 | 23 | COCOAPODS: 1.6.2 24 | -------------------------------------------------------------------------------- /Example/AANotifier.xcodeproj/xcuserdata/muhammad.ahsan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SuppressBuildableAutocreation 6 | 7 | 607FACCF1AFB9204008FA782 8 | 9 | primary 10 | 11 | 12 | 607FACE41AFB9204008FA782 13 | 14 | primary 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Example/AANotifier/LikeView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LikeView.swift 3 | // AANotifier 4 | // 5 | // Created by Engr. Ahsan Ali on 15/02/2017. 6 | // Copyright © 2017 AA-Creations. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AANotifier 11 | 12 | class LikeView: AANibView { 13 | 14 | var notifer: AANotifier? 15 | 16 | @IBOutlet weak var button: UIButton! 17 | 18 | override func viewDidLoad() { 19 | button.setTitle("Dismiss", for: .normal) 20 | } 21 | 22 | @IBAction func buttonAction(_ sender: UIButton) { 23 | // notifer?.animateNotifer() 24 | } 25 | 26 | } 27 | 28 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AANotifier/AANotifier.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AANotifier 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AAViewAnimator" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 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}/../.. 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/ahsanali.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | AANotifier.xcscheme 8 | 9 | isShown 10 | 11 | 12 | AAViewAnimator.xcscheme 13 | 14 | isShown 15 | 16 | 17 | Pods-AANotifier_Example.xcscheme 18 | 19 | isShown 20 | 21 | 22 | 23 | SuppressBuildableAutocreation 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/macbookpro.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | AANotifier.xcscheme 8 | 9 | isShown 10 | 11 | 12 | AAViewAnimator.xcscheme 13 | 14 | isShown 15 | 16 | 17 | Pods-AANotifier_Example.xcscheme 18 | 19 | isShown 20 | 21 | 22 | 23 | SuppressBuildableAutocreation 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/ali.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | AANotifier.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | AAViewAnimator.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 2 16 | 17 | Pods-AANotifier_Example.xcscheme_^#shared#^_ 18 | 19 | orderHint 20 | 3 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AANotifier" "${PODS_CONFIGURATION_BUILD_DIR}/AAViewAnimator" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AANotifier/AANotifier.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AAViewAnimator/AAViewAnimator.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AANotifier" -framework "AAViewAnimator" 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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AANotifier" "${PODS_CONFIGURATION_BUILD_DIR}/AAViewAnimator" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AANotifier/AANotifier.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AAViewAnimator/AAViewAnimator.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AANotifier" -framework "AAViewAnimator" 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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AANotifier/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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AAViewAnimator/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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AANotifier/AANotifier-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AAViewAnimator/AAViewAnimator-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example-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 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 engrahsanali 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 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/AANotifier.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AANotifier", 3 | "version": "1.1", 4 | "summary": "AANotifier allows you to create UIView based fragments to be appear on screen at runtime in iOS, written in Swift.", 5 | "description": "AANotifier allows you to create UIView based fragments to be appear on screen at runtime. It is designed to make custom elements in UIView even from xib based to animate on screen. It can be a custom popup view, action bar, message display banner etc.", 6 | "homepage": "https://github.com/EngrAhsanAli/AANotifier", 7 | "screenshots": "https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/master/Screenshots/AANotifier.png", 8 | "license": { 9 | "type": "MIT", 10 | "file": "LICENSE" 11 | }, 12 | "authors": { 13 | "EngrAhsanAli": "hafiz.m.ahsan.ali@gmail.com" 14 | }, 15 | "source": { 16 | "git": "https://github.com/EngrAhsanAli/AANotifier.git", 17 | "tag": "1.1" 18 | }, 19 | "platforms": { 20 | "ios": "8.0" 21 | }, 22 | "source_files": "AANotifier/Classes/**/*", 23 | "dependencies": { 24 | "AAViewAnimator": [ 25 | "~> 1.1" 26 | ] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/muhammad.ahsan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | AANotifier.xcscheme_^#shared#^_ 8 | 9 | isShown 10 | 11 | 12 | AAViewAnimator.xcscheme_^#shared#^_ 13 | 14 | isShown 15 | 16 | 17 | Pods-AANotifier_Example.xcscheme 18 | 19 | isShown 20 | 21 | 22 | 23 | SuppressBuildableAutocreation 24 | 25 | 59B994E285D97BA034F044ACA9C9ECD9 26 | 27 | primary 28 | 29 | 30 | 5F6F3BB380E873A7A3E242BCF2176945 31 | 32 | primary 33 | 34 | 35 | F1F13F80FC24E0A529A72C699326D94D 36 | 37 | primary 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /AANotifier.podspec: -------------------------------------------------------------------------------- 1 | 2 | Pod::Spec.new do |s| 3 | s.name = 'AANotifier' 4 | s.version = '1.2' 5 | s.summary = 'AANotifier allows you to create UIView based fragments to be appear on screen at runtime in iOS, written in Swift.' 6 | 7 | s.description = <<-DESC 8 | AANotifier allows you to create UIView based fragments to be appear on screen at runtime. It is designed to make custom elements in UIView even from xib based to animate on screen. It can be a custom popup view, action bar, message display banner etc. 9 | DESC 10 | 11 | s.homepage = 'https://github.com/EngrAhsanAli/AANotifier' 12 | s.screenshots = 'https://raw.githubusercontent.com/EngrAhsanAli/AANotifier/master/Screenshots/AANotifier.png' 13 | s.license = { :type => 'MIT', :file => 'LICENSE' } 14 | s.author = { 'EngrAhsanAli' => 'hafiz.m.ahsan.ali@gmail.com' } 15 | s.source = { :git => 'https://github.com/EngrAhsanAli/AANotifier.git', :tag => s.version.to_s } 16 | 17 | s.ios.deployment_target = '8.0' 18 | 19 | s.source_files = 'AANotifier/Classes/**/*' 20 | 21 | s.swift_version = '5.0' 22 | s.dependency 'AAViewAnimator', '~> 1.1' 23 | end 24 | 25 | -------------------------------------------------------------------------------- /Example/Pods/AAViewAnimator/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 engrahsanali 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 | -------------------------------------------------------------------------------- /Example/AANotifier/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 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Example/Pods/AAViewAnimator/AAViewAnimator/Classes/AAViewAnimator+UIKit.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AAViewAnimator+UIKit.swift 3 | // AAViewAnimator 4 | // 5 | // Created by Engr. Ahsan Ali on 16/02/2017. 6 | // Copyright © 2017 AA-Creations. All rights reserved. 7 | // 8 | 9 | public typealias IsAnimating = ((Bool, UIView) -> ()) 10 | 11 | // MARK: - UIView+AAViewAnimator 12 | extension UIView { 13 | 14 | /// UIView Animations 15 | /// 16 | /// - Parameters: 17 | /// - duration: Time interval 18 | /// - repeatCount: Animation Repeatation 19 | /// - springDamping: AAViewDamping damping effect 20 | /// - animator: AAViewAnimators options 21 | /// - completion: animation completion closure 22 | open func aa_animate(duration: TimeInterval = 0.5, 23 | repeatCount: Float = 1, 24 | springDamping: AAViewDamping = .none, 25 | animation: AAViewAnimators, 26 | completion: IsAnimating? = nil) { 27 | 28 | AAViewAnimator(self, 29 | duration: duration, 30 | repeatCount: repeatCount, 31 | springDamping: springDamping, 32 | animation: animation) 33 | .animate(completion) 34 | 35 | } 36 | 37 | func addAnimation(_ anim: CAAnimation, forKey: AAViewAnimationKey) { 38 | layer.add(anim, forKey: forKey.rawValue) 39 | } 40 | 41 | open func removeAnimation(_ forKey: AAViewAnimationKey) { 42 | layer.removeAnimation(forKey: forKey.rawValue) 43 | } 44 | 45 | open func removeAllAnimations() { 46 | layer.removeAllAnimations() 47 | } 48 | } 49 | 50 | -------------------------------------------------------------------------------- /AANotifier/Classes/AANibView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AANibView.swift 3 | // AANotifier 4 | // 5 | // Created by Engr. Ahsan Ali on 11/02/2017. 6 | // Copyright © 2017 AA-Creations. All rights reserved. 7 | // 8 | 9 | /// MARK:- AANibView - encapsulating the custom xib based UIView 10 | open class AANibView: UIView { 11 | 12 | /// View 13 | var view:UIView! 14 | 15 | /// Nib name 16 | var nibName: String { 17 | return String(describing: type(of: self)) 18 | } 19 | 20 | //MARK: Init 21 | override public init(frame: CGRect) { 22 | super.init(frame: frame) 23 | loadViewFromNib() 24 | } 25 | 26 | required public init?(coder aDecoder: NSCoder) { 27 | super.init(coder: aDecoder) 28 | loadViewFromNib() 29 | } 30 | 31 | //MARK: loadViewFromNib 32 | private func loadViewFromNib() { 33 | view = Bundle.main.loadNibNamed(nibName, owner: self, options: nil)?[0] as? UIView 34 | view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 35 | view.frame = bounds 36 | addSubview(view) 37 | viewDidLoad() 38 | } 39 | 40 | 41 | /// Method for overriding after subview loading 42 | open func viewDidLoad() { 43 | // Perform actions in over-rided method 44 | 45 | } 46 | 47 | } 48 | 49 | 50 | // MARK: - UIView extension 51 | extension UIView { 52 | 53 | /// Load from nib 54 | open class func fromNib (nibName name: String, bundle: Bundle = .main) -> A? { 55 | let nibViews = bundle.loadNibNamed(name, owner: self, options: nil) 56 | return nibViews?.first as? A 57 | } 58 | 59 | /// Load from nib 60 | open class func fromNib() -> T? { 61 | return fromNib(nibName: String(describing: T.self)) 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /AANotifier/Classes/AANotifier+Helper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AANotifier+Helper.swift 3 | // AANotifier 4 | // 5 | // Created by Engr. Ahsan Ali on 11/02/2017. 6 | // Copyright © 2017 AA-Creations. All rights reserved. 7 | // 8 | 9 | import AAViewAnimator 10 | 11 | /// tapped closure 12 | public typealias didTapped = () -> Void 13 | 14 | /// AANotifier position 15 | /// 16 | /// - top: top of screen 17 | /// - bottom: bottom of screen 18 | /// - middle: middle of screen 19 | public enum AANotifierPosition { 20 | case top, bottom, middle 21 | } 22 | 23 | /// AAMargin margins for AANotifier 24 | struct AAMargin { 25 | var H: CGFloat? 26 | var V: CGFloat? 27 | } 28 | 29 | /// AANotifierOptions for AANotifier 30 | /// 31 | /// - duration: time interval for animation 32 | /// - preferedHeight: height of AANotifier 33 | /// - transitionA: AANotifier show animation 34 | /// - transitionB: AANotifier hide animation 35 | /// - position: AANotifier position 36 | /// - hideOnTap: flag for hide on tap 37 | /// - margins: margins horizontal and vertical 38 | /// - deadline: dismiss deadline 39 | public enum AANotifierOptions { 40 | 41 | case preferedHeight(CGFloat) 42 | case transitionA(AAViewAnimators, TimeInterval) 43 | case transitionB(AAViewAnimators, TimeInterval) 44 | case position(AANotifierPosition) 45 | case hideOnTap 46 | case deadline(TimeInterval) 47 | case margins(H: CGFloat?, V: CGFloat?) 48 | } 49 | 50 | // MARK: - UIApplication extension 51 | extension UIApplication { 52 | 53 | /// Status bar view 54 | static var aa_statusBarView: CGRect { 55 | let statusBarFrame: CGRect 56 | if #available(iOS 13.0, *) { 57 | statusBarFrame = UIApplication.shared.keyWindow?.window?.windowScene?.statusBarManager?.statusBarFrame ?? .zero 58 | } else { 59 | statusBarFrame = UIApplication.shared.statusBarFrame 60 | } 61 | return statusBarFrame 62 | } 63 | } 64 | 65 | -------------------------------------------------------------------------------- /Example/AANotifier/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // AANotifier 4 | // 5 | // Created by Engr. Ahsan Ali on 02/11/2017. 6 | // Copyright © 2017 AA-Creations. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // 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. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // 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. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // 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. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/ahsanali.xcuserdatad/xcschemes/AANotifier.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/ahsanali.xcuserdatad/xcschemes/AAViewAnimator.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## AANotifier 5 | 6 | Copyright (c) 2017 engrahsanali 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | 27 | ## AAViewAnimator 28 | 29 | Copyright (c) 2017 engrahsanali 30 | 31 | Permission is hereby granted, free of charge, to any person obtaining a copy 32 | of this software and associated documentation files (the "Software"), to deal 33 | in the Software without restriction, including without limitation the rights 34 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 35 | copies of the Software, and to permit persons to whom the Software is 36 | furnished to do so, subject to the following conditions: 37 | 38 | The above copyright notice and this permission notice shall be included in 39 | all copies or substantial portions of the Software. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 42 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 43 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 44 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 45 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 46 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 47 | THE SOFTWARE. 48 | 49 | Generated by CocoaPods - https://cocoapods.org 50 | -------------------------------------------------------------------------------- /Example/Pods/AAViewAnimator/AAViewAnimator/Classes/AAViewAnimator+Helper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AAViewTransition+Helper.swift 3 | // AAViewAnimator 4 | // 5 | // Created by Engr. Ahsan Ali on 16/02/2017. 6 | // Copyright © 2017 AA-Creations. All rights reserved. 7 | // 8 | 9 | 10 | /// AAViewAnimators options for animations and transitions 11 | /// 12 | /// - fromTop: Transition from Top (View will be visible) 13 | /// - fromBottom: Transition from Bottom (View will be visible) 14 | /// - fromLeft: Transition from Left (View will be visible) 15 | /// - fromRight: Transition from Right (View will be visible) 16 | /// - fromFade: Transition with Fade (View will be visible) 17 | /// - toTop: Transition to Top (View will not be visible) 18 | /// - toBottom: Transition to Bottom (View will not be visible) 19 | /// - toLeft: Transition to Left (View will not be visible) 20 | /// - toRight: Transition to Right (View will not be visible) 21 | /// - toFade: Transition with Fade (View will not be visible) 22 | /// - scale: Animation with Scale effect 23 | /// - vibrateX: Animation with vibrate at x axis effect 24 | /// - vibrateY: Animation with vibrate at y axis effect 25 | /// - rotateLeft: Animation with left rotation effect 26 | /// - rotateRight: Animation with right rotation effect 27 | /// - rotateRound: Animation with round rotation effect 28 | /// - zoomIn: Animation with zoom in effect 29 | /// - zoomOut: Animation with zoom out effect 30 | public enum AAViewAnimators { 31 | case fromTop, fromBottom, fromLeft, fromRight, fromFade 32 | case toTop, toBottom, toLeft, toRight, toFade 33 | case scale(rate:Float) 34 | case vibrateX(rate:CGFloat), vibrateY(rate:CGFloat) 35 | case rotateLeft, rotateRight, rotateRound 36 | case zoomIn, zoomOut 37 | } 38 | 39 | /// AAViewDamping for springiness effect of view 40 | /// 41 | /// - none: no effect (default) 42 | /// - slight: slight bounce 43 | /// - heavy: more bounce 44 | /// - custom: custom values for spring damping and initial velocity 45 | public enum AAViewDamping { 46 | case none, slight, heavy, custom(damping: CGFloat, velocity: CGFloat) 47 | 48 | var values: (damping: CGFloat, velocity: CGFloat) { 49 | switch self { 50 | case .none: return (damping: 1.0, velocity: 1.0) 51 | case .slight: return (damping: 0.7, velocity: 1.5) 52 | case .heavy: return (damping: 0.6, velocity: 2.0) 53 | case .custom(let damping, let velocity): return (damping: damping, velocity: velocity) 54 | } 55 | } 56 | } 57 | 58 | public enum AAViewAnimationKey: String { 59 | case rotation = "AAViewAnimatorRotation" 60 | case scale = "AAViewAnimatorScale" 61 | case vibrate = "AAViewAnimatorPosition" 62 | } 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /Example/AANotifier/StatusView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/AANotifier.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/AAViewAnimator.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/macbookpro.xcuserdatad/xcschemes/AANotifier.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/macbookpro.xcuserdatad/xcschemes/AAViewAnimator.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/ahsanali.xcuserdatad/xcschemes/Pods-AANotifier_Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/macbookpro.xcuserdatad/xcschemes/Pods-AANotifier_Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcuserdata/muhammad.ahsan.xcuserdatad/xcschemes/Pods-AANotifier_Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Example/AANotifier/ToastView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2017 engrahsanali <hafiz.m.ahsan.ali@gmail.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | AANotifier 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Copyright (c) 2017 engrahsanali <hafiz.m.ahsan.ali@gmail.com> 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining a copy 49 | of this software and associated documentation files (the "Software"), to deal 50 | in the Software without restriction, including without limitation the rights 51 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 52 | copies of the Software, and to permit persons to whom the Software is 53 | furnished to do so, subject to the following conditions: 54 | 55 | The above copyright notice and this permission notice shall be included in 56 | all copies or substantial portions of the Software. 57 | 58 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 59 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 60 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 61 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 62 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 63 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 64 | THE SOFTWARE. 65 | 66 | License 67 | MIT 68 | Title 69 | AAViewAnimator 70 | Type 71 | PSGroupSpecifier 72 | 73 | 74 | FooterText 75 | Generated by CocoaPods - https://cocoapods.org 76 | Title 77 | 78 | Type 79 | PSGroupSpecifier 80 | 81 | 82 | StringsTable 83 | Acknowledgements 84 | Title 85 | Acknowledgements 86 | 87 | 88 | -------------------------------------------------------------------------------- /Example/AANotifier/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "57x57", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-57x57@1x.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "57x57", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-57x57@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "60x60", 59 | "idiom" : "iphone", 60 | "filename" : "Icon-App-60x60@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "60x60", 65 | "idiom" : "iphone", 66 | "filename" : "Icon-App-60x60@3x.png", 67 | "scale" : "3x" 68 | }, 69 | { 70 | "size" : "20x20", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-20x20@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "20x20", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-20x20@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "29x29", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-29x29@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "29x29", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-29x29@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "40x40", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-40x40@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "40x40", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-40x40@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "50x50", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-Small-50x50@1x.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "50x50", 113 | "idiom" : "ipad", 114 | "filename" : "Icon-Small-50x50@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "72x72", 119 | "idiom" : "ipad", 120 | "filename" : "Icon-App-72x72@1x.png", 121 | "scale" : "1x" 122 | }, 123 | { 124 | "size" : "72x72", 125 | "idiom" : "ipad", 126 | "filename" : "Icon-App-72x72@2x.png", 127 | "scale" : "2x" 128 | }, 129 | { 130 | "size" : "76x76", 131 | "idiom" : "ipad", 132 | "filename" : "Icon-App-76x76@1x.png", 133 | "scale" : "1x" 134 | }, 135 | { 136 | "size" : "76x76", 137 | "idiom" : "ipad", 138 | "filename" : "Icon-App-76x76@2x.png", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "size" : "83.5x83.5", 143 | "idiom" : "ipad", 144 | "filename" : "Icon-App-83.5x83.5@2x.png", 145 | "scale" : "2x" 146 | }, 147 | { 148 | "idiom" : "ios-marketing", 149 | "size" : "1024x1024", 150 | "scale" : "1x" 151 | } 152 | ], 153 | "info" : { 154 | "version" : 1, 155 | "author" : "xcode" 156 | } 157 | } -------------------------------------------------------------------------------- /Example/AANotifier/InfoView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 24 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Example/AANotifier/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // AANotifier 4 | // 5 | // Created by Engr. Ahsan Ali on 02/11/2017. 6 | // Copyright © 2017 AA-Creations. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AANotifier 11 | 12 | 13 | class ViewController: UIViewController { 14 | 15 | lazy var toastViewNotifier: AANotifier = { 16 | 17 | let notifierView = UIView.fromNib(nibName: "ToastView")! 18 | let options: [AANotifierOptions] = [ 19 | .deadline(2.0), 20 | .transitionA(.fromBottom, 0.4), 21 | .transitionB(.toBottom, 5.0), 22 | .position(.bottom), 23 | .preferedHeight(50), 24 | .margins(H: 60, V: 40) 25 | ] 26 | 27 | let notifier = AANotifier(notifierView, withOptions: options) 28 | return notifier 29 | }() 30 | 31 | lazy var statusViewNotifier: AANotifier = { 32 | 33 | let notifierView = UIView.fromNib(nibName: "StatusView")! 34 | let options: [AANotifierOptions] = [ 35 | .deadline(2.0), 36 | .preferedHeight(50), 37 | .margins(H: 0, V: 30), 38 | .position(.top), 39 | .transitionA(.fromTop, 0.8), 40 | .transitionB(.toTop, 0.8) 41 | ] 42 | let notifier = AANotifier(notifierView, withOptions: options) 43 | return notifier 44 | }() 45 | 46 | lazy var popupViewNotifier: AANotifier = { 47 | 48 | let notifierView = UIView.fromNib(nibName: "PopupView")! 49 | let options: [AANotifierOptions] = [ 50 | .deadline(2.0), 51 | .position(.middle), 52 | .preferedHeight(250), 53 | .margins(H: 20, V: nil), 54 | .transitionA(.fromTop, 0.8), 55 | .transitionB(.toBottom, 0.8) 56 | ] 57 | let button = notifierView.viewWithTag(100) as! UIButton 58 | button.addTarget(self, action: #selector(hidePopupView), for: .touchUpInside) 59 | let notifier = AANotifier(notifierView, withOptions: options) 60 | return notifier 61 | }() 62 | 63 | lazy var infoViewNotifier: AANotifier = { 64 | 65 | let notifierView = UIView.fromNib(nibName: "InfoView")! 66 | let options: [AANotifierOptions] = [ 67 | .deadline(2.0), 68 | .position(.top), 69 | .preferedHeight(80), 70 | .transitionA(.fromTop, 0.8), 71 | .transitionB(.toTop, 0.8) 72 | ] 73 | let notifier = AANotifier(notifierView, withOptions: options) 74 | return notifier 75 | }() 76 | 77 | lazy var snackBarViewNotifier: AANotifier = { 78 | 79 | let notifierView = LikeView() 80 | let options: [AANotifierOptions] = [ 81 | .deadline(2.0), 82 | .position(.bottom), 83 | .preferedHeight(60), 84 | .hideOnTap, 85 | .transitionA(.fromBottom, 0.8), 86 | .transitionB(.toLeft, 0.8) 87 | ] 88 | let notifier = AANotifier(notifierView, withOptions: options) 89 | notifierView.notifer = notifier 90 | 91 | return notifier 92 | }() 93 | 94 | override func viewDidLoad() { 95 | super.viewDidLoad() 96 | } 97 | 98 | override func didReceiveMemoryWarning() { 99 | super.didReceiveMemoryWarning() 100 | // Dispose of any resources that can be recreated. 101 | } 102 | 103 | @objc func hidePopupView() { 104 | popupViewNotifier.hide() 105 | } 106 | 107 | 108 | } 109 | 110 | 111 | extension ViewController { 112 | 113 | @IBAction func snackBarViewAction(_ sender: Any) { 114 | snackBarViewNotifier.show() 115 | } 116 | 117 | @IBAction func bannerViewAction(_ sender: Any) { 118 | infoViewNotifier.show() 119 | } 120 | @IBAction func toastViewAction(_ sender: Any) { 121 | 122 | let notifier = toastViewNotifier 123 | notifier.didTapped = { 124 | notifier.hide() 125 | } 126 | notifier.show() 127 | 128 | } 129 | 130 | @IBAction func statusViewAction(_ sender: Any) { 131 | statusViewNotifier.show() 132 | } 133 | 134 | @IBAction func popupViewAction(_ sender: Any) { 135 | popupViewNotifier.show() 136 | } 137 | 138 | } 139 | 140 | 141 | 142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /Example/AANotifier/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 27 | 28 | 29 | 30 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /Example/AANotifier.xcodeproj/xcshareddata/xcschemes/AANotifier-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 93 | 94 | 95 | 96 | 97 | 98 | 104 | 106 | 112 | 113 | 114 | 115 | 117 | 118 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /Example/AANotifier/LikeView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 28 | 42 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /Example/AANotifier/PopupView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 28 | 34 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Table of Contents 2 | 3 | - [AANotifier](#section-id-4) 4 | - [Description](#section-id-10) 5 | - [Demonstration](#section-id-16) 6 | - [Requirements](#section-id-26) 7 | - [Installation](#section-id-32) 8 | - [CocoaPods](#section-id-37) 9 | - [Carthage](#section-id-63) 10 | - [Manual Installation](#section-id-82) 11 | - [Getting Started](#section-id-87) 12 | - [Define your notifier!](#section-id-90) 13 | - [Show your notifier!](#section-id-104) 14 | - [Hide your notifier!](#section-id-132) 15 | - [AANotifier options](#section-id-150) 16 | - [Contributions & License](#section-id-156) 17 | 18 | 19 |
20 | 21 | #AANotifier 22 | 23 | [![Swift 5.0](https://img.shields.io/badge/Swift-5.0-orange.svg?style=flat)](https://developer.apple.com/swift/) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![CocoaPods](https://img.shields.io/cocoapods/v/AANotifier.svg)](http://cocoadocs.org/docsets/AANotifier) [![License MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat)](https://github.com/Carthage/Carthage) [![Build Status](https://travis-ci.org/EngrAhsanAli/AANotifier.svg?branch=master)](https://travis-ci.org/EngrAhsanAli/AANotifier) 24 | ![License MIT](https://img.shields.io/github/license/mashape/apistatus.svg) [![CocoaPods](https://img.shields.io/cocoapods/p/AANotifier.svg)]() 25 | 26 | 27 |
28 | 29 | ##Description 30 | 31 | 32 | AANotifier allows you to create UIView based fragments to be appear on screen at runtime. It is designed to make custom elements in UIView even from xib based views to animate on screen. 33 | 34 | 35 |
36 | 37 | ##Demonstration 38 | 39 | AANotifier can be a custom popup view, action bar, message display banner etc. 40 | 41 | ![](https://github.com/EngrAhsanAli/AANotifier/blob/master/Screenshots/demo.gif) 42 | 43 | 44 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 45 | 46 | 47 |
48 | 49 | ##Requirements 50 | 51 | - iOS 8.0+ 52 | - Xcode 8.0+ 53 | - Swift 3+ 54 | 55 |
56 | 57 | # Installation 58 | 59 | `AANotifier` can be installed using CocoaPods, Carthage, or manually. 60 | 61 | 62 |
63 | 64 | ##CocoaPods 65 | 66 | `AANotifier` is available through [CocoaPods](http://cocoapods.org). To install CocoaPods, run: 67 | 68 | `$ gem install cocoapods` 69 | 70 | Then create a Podfile with the following contents: 71 | 72 | ``` 73 | source 'https://github.com/CocoaPods/Specs.git' 74 | platform :ios, '8.0' 75 | use_frameworks! 76 | 77 | target '' do 78 | pod 'AANotifier' , '1.2' 79 | end 80 | 81 | ``` 82 | 83 | Finally, run the following command to install it: 84 | ``` 85 | $ pod install 86 | ``` 87 | 88 | 89 | 90 |
91 | 92 | ##Carthage 93 | 94 | To install Carthage, run (using Homebrew): 95 | ``` 96 | $ brew update 97 | $ brew install carthage 98 | ``` 99 | Then add the following line to your Cartfile: 100 | 101 | ``` 102 | github "EngrAhsanAli/AANotifier" "master" 103 | ``` 104 | 105 | Then import the library in all files where you use it: 106 | ```swift 107 | import AANotifier 108 | ``` 109 | 110 | 111 |
112 | 113 | ##Manual Installation 114 | 115 | If you prefer not to use either of the above mentioned dependency managers, you can integrate `AANotifier` into your project manually by adding the files contained in the Classes folder to your project. 116 | 117 | 118 |
119 | 120 | #Getting Started 121 | ---------- 122 | 123 |
124 | 125 | ##Define your notifier! 126 | 127 | You can simply define your notifier with options as lazy initialization in your view controller. 128 | 129 | **Usage:** 130 | ```swift 131 | lazy var myNotifier: AANotifier = { 132 | let notifierView = UIView.fromNib(nibName: "MyNotifier")! 133 | let options: [AANotifierOptions] = [ 134 | .transitionA(.fromBottom, 0.9), // Show notifier animation 135 | .transitionB(.toBottom, 0.9), // Hide notifier animation 136 | .position(.bottom), // notifier position 137 | .preferedHeight(50), // notifier height 138 | .margins(H: 60, V: 40), // notifier margins 139 | .hideOnTap, // Hides on tap 140 | .deadline(2.0) // Deadline of notifier for dismissal 141 | ] 142 | let notifier = AANotifier(notifierView, withOptions: options) 143 | return notifier 144 | }() 145 | 146 | ``` 147 | 148 | 149 | 150 | 151 |
152 | 153 | ##Show your notifier! 154 | You can simply show the notifier by `show` method or `animateNotifer` for animation options. 155 | 156 | **Usage:** 157 | ```swift 158 | // Show simply! 159 | myNotifier.show() 160 | 161 | // Tap listner 162 | notifier.didTapped = { 163 | notifier.hide() 164 | } 165 | ``` 166 | 167 |
168 | 169 | ##Hide your notifier! 170 | 171 | You can simply hide the notifier by `hide` method. 172 | 173 | **Usage:** 174 | ```swift 175 | // Show hide! 176 | myNotifier.hide() 177 | 178 | ``` 179 | 180 |
181 | 182 | ##AANotifier options 183 | 184 | You can use following notifier options for your notifier: 185 | 186 | | Options | Types | Description | 187 | |-----------------|-----------------------|----------------------------------------------| 188 | | `preferedHeight`| `CGFloat` | AANotifier height | 189 | | `transitionA` | `AAViewAnimators, TimeInterval` | Animator for showing notifier | 190 | | `transitionB` | `AAViewAnimators, TimeInterval` | Animator for hiding notifier | 191 | | `position` | `AANotifierPosition` | AANotifier position | 192 | | `hideOnTap` | `---` | Hides on tap if added | 193 | | `margins` | `(CGFloat?, CGFloat?)`| Horizontal and vertical margins respectively | 194 | 195 |
196 | 197 | #Contributions & License 198 | 199 | `AANotifier` is available under the MIT license. See the [LICENSE](./LICENSE) file for more info. 200 | 201 | Pull requests are welcome! The best contributions will consist of substitutions or configurations for classes/methods known to block the main thread during a typical app lifecycle. 202 | 203 | I would love to know if you are using `AANotifier` in your app, send an email to [Engr. Ahsan Ali](mailto:hafiz.m.ahsan.ali@gmail.com) 204 | 205 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Example/Pods/AAViewAnimator/README.md: -------------------------------------------------------------------------------- 1 | # Table of Contents 2 | 3 | - [AAViewAnimator](#section-id-4) 4 | - [Description](#section-id-10) 5 | - [Demonstration](#section-id-16) 6 | - [Requirements](#section-id-26) 7 | - [Installation](#section-id-32) 8 | - [CocoaPods](#section-id-37) 9 | - [Carthage](#section-id-63) 10 | - [Manual Installation](#section-id-82) 11 | - [Getting Started](#section-id-87) 12 | - [Animate your view!](#section-id-90) 13 | - [Apply transition on your view!](#section-id-104) 14 | - [Animation types](#section-id-132) 15 | - [Transition types](#section-id-150) 16 | - [Contributions & License](#section-id-156) 17 | 18 | 19 |
20 | 21 | #AAViewAnimator 22 | 23 | [![Swift 4.0](https://img.shields.io/badge/Swift-4.0-orange.svg?style=flat)](https://developer.apple.com/swift/) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![CocoaPods](https://img.shields.io/cocoapods/v/AAViewAnimator.svg)](http://cocoadocs.org/docsets/AAViewAnimator) [![License MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat)](https://github.com/Carthage/Carthage) [![Build Status](https://travis-ci.org/EngrAhsanAli/AAViewAnimator.svg?branch=master)](https://travis-ci.org/EngrAhsanAli/AAViewAnimator) 24 | ![License MIT](https://img.shields.io/github/license/mashape/apistatus.svg) [![CocoaPods](https://img.shields.io/cocoapods/p/AAViewAnimator.svg)]() 25 | 26 | 27 |
28 | 29 | ##Description 30 | 31 | 32 | AAViewAnimator is a simple, lightweight & easy-to-use rating bar designed to get and set ratings in iOS, written in Swift. It is a customised storyboard based `UIView` class that allows to customise in the `UIStoryboard` without writing code. 33 | 34 | 35 |
36 | 37 | ##Demonstration 38 | 39 | AAViewAnimator is a collection of animations and transitions for `UIView` designed to apply animations on every `UIView` with options in iOS, written in Swift. It allows various options for animations and parameters to make them unique! 40 | 41 | ![](https://github.com/EngrAhsanAli/AAViewAnimator/blob/master/Screenshots/demo.gif) 42 | 43 | 44 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 45 | 46 | 47 |
48 | 49 | ##Requirements 50 | 51 | - iOS 8.0+ 52 | - Xcode 8.0+ 53 | - Swift 3+ 54 | 55 |
56 | 57 | # Installation 58 | 59 | `AAViewAnimator` can be installed using CocoaPods, Carthage, or manually. 60 | 61 | 62 |
63 | 64 | ##CocoaPods 65 | 66 | `AAViewAnimator` is available through [CocoaPods](http://cocoapods.org). To install CocoaPods, run: 67 | 68 | `$ gem install cocoapods` 69 | 70 | Then create a Podfile with the following contents: 71 | 72 | ``` 73 | source 'https://github.com/CocoaPods/Specs.git' 74 | platform :ios, '8.0' 75 | use_frameworks! 76 | 77 | target '' do 78 | pod 'AAViewAnimator', '1.0' 79 | end 80 | 81 | ``` 82 | 83 | Finally, run the following command to install it: 84 | ``` 85 | $ pod install 86 | ``` 87 | 88 | 89 | 90 |
91 | 92 | ##Carthage 93 | 94 | To install Carthage, run (using Homebrew): 95 | ``` 96 | $ brew update 97 | $ brew install carthage 98 | ``` 99 | Then add the following line to your Cartfile: 100 | 101 | ``` 102 | github "EngrAhsanAli/AAViewAnimator" "master" 103 | ``` 104 | 105 | Then import the library in all files where you use it: 106 | ```swift 107 | import AAViewAnimator 108 | ``` 109 | 110 | 111 |
112 | 113 | ##Manual Installation 114 | 115 | If you prefer not to use either of the above mentioned dependency managers, you can integrate `AAViewAnimator` into your project manually by adding the files contained in the Classes folder to your project. 116 | 117 | 118 |
119 | 120 | #Getting Started 121 | ---------- 122 | 123 |
124 | 125 | ##Animate your view! 126 | 127 | You can simply animate your view just by calling `aa_animate` function with animation option 128 | 129 | **Usage:** 130 | ```swift 131 | yourView.aa_animate(duration: 0.5, animation: .scale(rate: 1.2)) 132 | 133 | ``` 134 | 135 | 136 | 137 | 138 |
139 | 140 | ##Apply transition on your view! 141 | 142 | You can simply apply transition your view just by calling `aa_animate` function with animation option 143 | 144 | **Usage:** 145 | ```swift 146 | 147 | yourView.aa_animate(duration: 1.2, springDamping: .slight, animation: animator) { inAnimating, animView in 148 | if inAnimating { 149 | // View is animating 150 | } 151 | else { 152 | // View's animation is done 153 | } 154 | } 155 | 156 | ``` 157 | 158 | 159 | > Note that the function signature for animation is: 160 | ```swift func aa_animate(duration: TimeInterval, springDamping: AAViewDamping, animation: AAViewAnimators, completion: ((_ isAnimating: Bool)->())? = nil)``` 161 | 162 |
163 | 164 | ##Animation types 165 | 166 | | AAViewAnimators | Description | 167 | |---------------------------|-----------------------------------------| 168 | | `scale(rate:Float)` | Animation with scale effect | 169 | | `vibrateX(rate:CGFloat)` | Animation with vibrate at x axis effect | 170 | | `vibrateY(rate:CGFloat)` | Animation with vibrate at y axis effect | 171 | | `rotateLeft` | Animation with left rotation effect | 172 | | `rotateRight` | Animation with right rotation effect | 173 | | `rotateRound` | Animation with round rotation effect | 174 | | `zoomIn` | Animation with zoom in effect | 175 | | `zoomOut` | Animation with zoom out effect | 176 | 177 |
178 | 179 | ##Transition types 180 | 181 | You can use following animation transition: 182 | 183 | | AAViewAnimators | Description | 184 | |-------------------|---------------------------------------------------| 185 | | `fromTop` | Transition from Top (View will be visible) | 186 | | `fromBottom` | Transition from Bottom (View will be visible) | 187 | | `fromLeft` | Transition from Left (View will be visible) | 188 | | `fromRight` | Transition from Right (View will be visible) | 189 | | `fromFade` | Transition with Fade (View will be visible) | 190 | | `toTop` | Transition to Top (View will not be visible) | 191 | | `toBottom` | Transition to Bottom (View will not be visible) | 192 | | `toLeft` | Transition to Left (View will not be visible) | 193 | | `toRight` | Transition to Right (View will not be visible) | 194 | | `toFade` | Transition with Fade (View will not be visible) | 195 | 196 |
197 | 198 | #Contributions & License 199 | 200 | `AAViewAnimator` is available under the MIT license. See the [LICENSE](./LICENSE) file for more info. 201 | 202 | Pull requests are welcome! The best contributions will consist of substitutions or configurations for classes/methods known to block the main thread during a typical app lifecycle. 203 | 204 | I would love to know if you are using `AAViewAnimator` in your app, send an email to [Engr. Ahsan Ali](mailto:hafiz.m.ahsan.ali@gmail.com) 205 | 206 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | function on_error { 7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" 8 | } 9 | trap 'on_error $LINENO' ERR 10 | 11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 13 | # frameworks to, so exit 0 (signalling the script phase was successful). 14 | exit 0 15 | fi 16 | 17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 19 | 20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 22 | 23 | # Used as a return value for each invocation of `strip_invalid_archs` function. 24 | STRIP_BINARY_RETVAL=0 25 | 26 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 27 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 28 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 29 | 30 | # Copies and strips a vendored framework 31 | install_framework() 32 | { 33 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 34 | local source="${BUILT_PRODUCTS_DIR}/$1" 35 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 36 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 37 | elif [ -r "$1" ]; then 38 | local source="$1" 39 | fi 40 | 41 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 42 | 43 | if [ -L "${source}" ]; then 44 | echo "Symlinked..." 45 | source="$(readlink "${source}")" 46 | fi 47 | 48 | # Use filter instead of exclude so missing patterns don't throw errors. 49 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 51 | 52 | local basename 53 | basename="$(basename -s .framework "$1")" 54 | binary="${destination}/${basename}.framework/${basename}" 55 | 56 | if ! [ -r "$binary" ]; then 57 | binary="${destination}/${basename}" 58 | elif [ -L "${binary}" ]; then 59 | echo "Destination binary is symlinked..." 60 | dirname="$(dirname "${binary}")" 61 | binary="${dirname}/$(readlink "${binary}")" 62 | fi 63 | 64 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 65 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 66 | strip_invalid_archs "$binary" 67 | fi 68 | 69 | # Resign the code if required by the build settings to avoid unstable apps 70 | code_sign_if_enabled "${destination}/$(basename "$1")" 71 | 72 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 73 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 74 | local swift_runtime_libs 75 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) 76 | for lib in $swift_runtime_libs; do 77 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 78 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 79 | code_sign_if_enabled "${destination}/${lib}" 80 | done 81 | fi 82 | } 83 | 84 | # Copies and strips a vendored dSYM 85 | install_dsym() { 86 | local source="$1" 87 | if [ -r "$source" ]; then 88 | # Copy the dSYM into a the targets temp dir. 89 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 90 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 91 | 92 | local basename 93 | basename="$(basename -s .framework.dSYM "$source")" 94 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 95 | 96 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 97 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 98 | strip_invalid_archs "$binary" 99 | fi 100 | 101 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 102 | # Move the stripped file into its final destination. 103 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 104 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 105 | else 106 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 107 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 108 | fi 109 | fi 110 | } 111 | 112 | # Signs a framework with the provided identity 113 | code_sign_if_enabled() { 114 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 115 | # Use the current code_sign_identity 116 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 117 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 118 | 119 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 120 | code_sign_cmd="$code_sign_cmd &" 121 | fi 122 | echo "$code_sign_cmd" 123 | eval "$code_sign_cmd" 124 | fi 125 | } 126 | 127 | # Strip invalid architectures 128 | strip_invalid_archs() { 129 | binary="$1" 130 | # Get architectures for current target binary 131 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 132 | # Intersect them with the architectures we are building for 133 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 134 | # If there are no archs supported by this binary then warn the user 135 | if [[ -z "$intersected_archs" ]]; then 136 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 137 | STRIP_BINARY_RETVAL=0 138 | return 139 | fi 140 | stripped="" 141 | for arch in $binary_archs; do 142 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 143 | # Strip non-valid architectures in-place 144 | lipo -remove "$arch" -output "$binary" "$binary" 145 | stripped="$stripped $arch" 146 | fi 147 | done 148 | if [[ "$stripped" ]]; then 149 | echo "Stripped $binary of architectures:$stripped" 150 | fi 151 | STRIP_BINARY_RETVAL=1 152 | } 153 | 154 | 155 | if [[ "$CONFIGURATION" == "Debug" ]]; then 156 | install_framework "${BUILT_PRODUCTS_DIR}/AANotifier/AANotifier.framework" 157 | install_framework "${BUILT_PRODUCTS_DIR}/AAViewAnimator/AAViewAnimator.framework" 158 | fi 159 | if [[ "$CONFIGURATION" == "Release" ]]; then 160 | install_framework "${BUILT_PRODUCTS_DIR}/AANotifier/AANotifier.framework" 161 | install_framework "${BUILT_PRODUCTS_DIR}/AAViewAnimator/AAViewAnimator.framework" 162 | fi 163 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 164 | wait 165 | fi 166 | -------------------------------------------------------------------------------- /AANotifier/Classes/AANotifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AANotifier.swift 3 | // AANotifier 4 | // 5 | // Created by Engr. Ahsan Ali on 11/02/2017. 6 | // Copyright © 2017 AA-Creations. All rights reserved. 7 | // 8 | 9 | import AAViewAnimator 10 | 11 | /// MARK:- AANotifier 12 | // AANotifier allows you to create UIView based fragments to be appear on screen at runtime 13 | // It is designed to make custom elements in UIView even from xib based to animate on screen 14 | // It can be a custom popup view, action bar, message display banner etc. 15 | open class AANotifier { 16 | 17 | /// AANotifier view height 18 | var preferedHeight: CGFloat? 19 | 20 | /// AANotifier view margins 21 | var margin = AAMargin() 22 | 23 | /// AANotifier view show animation 24 | var transitionA: AAViewAnimators = .fromTop 25 | 26 | /// AANotifier view hide animation 27 | var transitionB: AAViewAnimators = .toTop 28 | 29 | /// AANotifier view postion on screen 30 | var position: AANotifierPosition = .bottom 31 | 32 | /// AANotifier animation interval 33 | var durationA: TimeInterval = 0.8 34 | 35 | /// AANotifier animation interval 36 | var durationB: TimeInterval = 0.8 37 | 38 | /// AANotifier flag to hide on tap 39 | var hideOnTap: Bool = false 40 | 41 | /// AANotifier timer for deadline 42 | var deadlineTimer: Timer? 43 | 44 | /// AANotifier deadline interval to disappear the view from screen 45 | open var deadline: TimeInterval? { 46 | didSet { 47 | setTimer() 48 | } 49 | } 50 | 51 | 52 | /// Did Tapped closure 53 | @objc open var didTapped: didTapped? 54 | 55 | /// AANotifier view 56 | var view: UIView 57 | 58 | /// UIWindow root view controller 59 | lazy var keyWindow: UIWindow = { 60 | guard let root = UIApplication.shared.keyWindow else { 61 | fatalError("AANotifier - Application key window not found. Please check UIWindow in AppDelegate.") 62 | } 63 | return root 64 | }() 65 | 66 | 67 | /// Tap gesture 68 | lazy var tapGesture: UITapGestureRecognizer = { 69 | let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.didTappedAction(_:))) 70 | tapGesture.numberOfTapsRequired = 1 71 | return tapGesture 72 | }() 73 | 74 | /// AANotifier init method with view 75 | /// 76 | /// - Parameters: 77 | /// - view: AANotifier view 78 | /// - options: options 79 | public init(_ view: UIView, withOptions options: [AANotifierOptions]) { 80 | self.view = view 81 | setOptions(options) 82 | } 83 | 84 | /// Starts animation 85 | /// 86 | /// - Parameter isVisible: Visibility flag 87 | private func startAnimation(_ isVisible: Bool) { 88 | if isVisible { 89 | addNotifierView() 90 | } 91 | 92 | let transition = isVisible ? transitionA : transitionB 93 | let duration = isVisible ? durationA : durationB 94 | view.aa_animate(duration: duration, repeatCount: 1, springDamping: .none, animation: transition, completion: { isAnimating, view in 95 | 96 | if !isAnimating && !isVisible { 97 | self.removeNotifierView() 98 | } 99 | 100 | 101 | }) 102 | } 103 | 104 | /// AANotifier options if any 105 | /// 106 | /// - Parameter options: AANotifierOptions 107 | private func setOptions(_ options: [AANotifierOptions]){ 108 | 109 | options.forEach { (option) in 110 | switch option { 111 | case let .preferedHeight(value): 112 | preferedHeight = value 113 | case let .transitionA(value, duration): 114 | transitionA = value 115 | durationA = duration 116 | case let .transitionB(value, duration): 117 | transitionB = value 118 | durationB = duration 119 | case let .position(value): 120 | position = value 121 | case .hideOnTap: 122 | hideOnTap = true 123 | case let .deadline (value): 124 | deadline = value 125 | case let .margins(value1, value2): 126 | margin = AAMargin(H: value1, V: value2) 127 | } 128 | } 129 | } 130 | 131 | /// AANotifier hide view 132 | @objc open func hide() { 133 | deadlineTimer?.invalidate() 134 | startAnimation(false) 135 | } 136 | 137 | /// AANotifier animate notifier with completion 138 | open func show() { 139 | setTimer() 140 | startAnimation(true) 141 | } 142 | 143 | /// AANotifier remove view 144 | private func removeNotifierView() { 145 | deadlineTimer?.invalidate() 146 | self.view.removeGestureRecognizer(self.tapGesture) 147 | self.view.removeFromSuperview() 148 | NSLayoutConstraint.deactivate(constraints) 149 | } 150 | 151 | /// AANotifier add view 152 | private func addNotifierView() { 153 | view.translatesAutoresizingMaskIntoConstraints = false 154 | view.addGestureRecognizer(tapGesture) 155 | keyWindow.addSubview(view) 156 | NSLayoutConstraint.activate(constraints) 157 | 158 | } 159 | 160 | /// didTappedAction Selector 161 | /// 162 | /// - Parameter sender: Tap Gesture 163 | @objc private func didTappedAction(_ sender: UITapGestureRecognizer) { 164 | if hideOnTap { 165 | hide() 166 | } 167 | didTapped?() 168 | } 169 | 170 | func setTimer() { 171 | deadlineTimer?.invalidate() 172 | guard let interval = deadline else { 173 | return 174 | } 175 | deadlineTimer = Timer.scheduledTimer(timeInterval: interval, 176 | target: self, 177 | selector: #selector(hide), 178 | userInfo: nil, 179 | repeats: false) 180 | } 181 | 182 | } 183 | 184 | 185 | 186 | 187 | // MARK: - AutoLayout implementation 188 | fileprivate extension AANotifier { 189 | 190 | /// AutoLayout constraints 191 | var constraints: [NSLayoutConstraint] { 192 | 193 | let horizontalMargin = margin.H ?? 0 194 | var verticalMargin = margin.V ?? 0 195 | var heightConstant = preferedHeight ?? view.subviews.first!.frame.size.height 196 | 197 | var baseline: NSLayoutConstraint 198 | 199 | switch position { 200 | case .top: 201 | let statusBarHeight = statusBarFrame.height 202 | if statusBarHeight > 0 { 203 | let statusBarHeight = statusBarHeight + 5 204 | heightConstant += statusBarHeight 205 | verticalMargin -= statusBarHeight 206 | } 207 | baseline = getConstraint(.top, constant: verticalMargin) 208 | case .bottom: 209 | baseline = getConstraint(.bottom, constant: -verticalMargin) 210 | case .middle: 211 | baseline = getConstraint(.centerY) 212 | } 213 | 214 | let height = NSLayoutConstraint(item: view, attribute: .height, 215 | relatedBy: .equal, toItem: nil, 216 | attribute: .notAnAttribute, multiplier: 1, 217 | constant: heightConstant) 218 | 219 | let left = getConstraint(.left, constant: horizontalMargin) 220 | 221 | let right = getConstraint(.right, constant: -horizontalMargin) 222 | 223 | return [height, left, right, baseline] 224 | 225 | } 226 | 227 | /// Get Layout constraints helper 228 | func getConstraint(_ attr: NSLayoutConstraint.Attribute, constant: CGFloat = 0) -> NSLayoutConstraint { 229 | return NSLayoutConstraint(item: view, attribute: attr, relatedBy: .equal, toItem: keyWindow, attribute: attr, multiplier: 1, constant: constant) 230 | } 231 | 232 | var statusBarFrame: CGRect { 233 | let statusBarFrame: CGRect 234 | if #available(iOS 13.0, *) { 235 | statusBarFrame = view.window?.windowScene?.statusBarManager?.statusBarFrame ?? .zero 236 | } else { 237 | statusBarFrame = UIApplication.shared.statusBarFrame 238 | } 239 | return statusBarFrame 240 | } 241 | } 242 | 243 | 244 | -------------------------------------------------------------------------------- /Example/Pods/AAViewAnimator/AAViewAnimator/Classes/AAViewAnimator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AAViewAnimator.swift 3 | // AAViewAnimator 4 | // 5 | // Created by Engr. Ahsan Ali on 16/02/2017. 6 | // Copyright © 2017 AA-Creations. All rights reserved. 7 | // 8 | 9 | 10 | /// MARK:- AAViewAnimator 11 | //AAViewAnimator is a collection of animations and transitions for UIView designed to apply animations on every UIView with options in iOS, written in Swift. 12 | // It allows various options for animations and parameters to make them unique! 13 | 14 | open class AAViewAnimator { 15 | 16 | /// UIView instance 17 | fileprivate var view: UIView 18 | 19 | /// Auto repeat 20 | fileprivate var repeatCount: Float 21 | 22 | /// Time interval for animation 23 | fileprivate var duration: TimeInterval 24 | 25 | /// view visibility after animation 26 | fileprivate var viewVisibility: Bool = true 27 | 28 | /// AAViewDamping for spring animation 29 | fileprivate var springDamping: AAViewDamping 30 | 31 | /// AAViewAnimators animators 32 | fileprivate var animation: AAViewAnimators 33 | 34 | fileprivate var isViewAnimating: IsAnimating? 35 | 36 | /// AAViewAnimator init 37 | /// 38 | /// - Parameters: 39 | /// - view: view for animation 40 | /// - duration: Time Interval 41 | /// - springDamping: AAViewDamping 42 | /// - animator: AAViewAnimators 43 | public init(_ view: UIView, 44 | duration: TimeInterval, 45 | repeatCount: Float, 46 | springDamping: AAViewDamping?, 47 | animation: AAViewAnimators) { 48 | self.view = view 49 | self.duration = duration 50 | self.animation = animation 51 | self.repeatCount = repeatCount 52 | self.springDamping = springDamping ?? .none 53 | 54 | } 55 | 56 | /// Animate with AAViewAnimators options 57 | /// 58 | /// - Parameter completion: completion 59 | func animate(_ completion: IsAnimating?) { 60 | 61 | self.isViewAnimating = completion 62 | 63 | switch animation { 64 | case .vibrateX, .vibrateY, .scale, 65 | .zoomIn, .zoomOut, 66 | .rotateLeft, .rotateRight, .rotateRound: 67 | viewAnimation() 68 | case .fromTop, .fromBottom, .fromLeft, .fromRight, .fromFade, 69 | .toTop, .toBottom, .toLeft, .toRight, .toFade: 70 | viewTransition() 71 | 72 | break 73 | } 74 | } 75 | 76 | /// View animations 77 | fileprivate func viewAnimation() { 78 | 79 | CATransaction.begin() 80 | CATransaction.setCompletionBlock({ 81 | self.isViewAnimating?(false, self.view) 82 | }) 83 | 84 | switch animation { 85 | case .vibrateX(let rate): vibrate(rate, vibrateX: true) 86 | 87 | case .vibrateY(let rate): vibrate(rate, vibrateX: false) 88 | 89 | case .scale(let rate): scaleBounce(rate) 90 | 91 | case .rotateLeft: rotateHorizontal(true) 92 | 93 | case .rotateRight: rotateHorizontal(false) 94 | 95 | case .rotateRound: rotateRound() 96 | 97 | case .zoomIn: zoomIn() 98 | 99 | case .zoomOut: zoomOut() 100 | 101 | default: 102 | break 103 | } 104 | 105 | CATransaction.commit() 106 | isViewAnimating?(true, view) 107 | } 108 | 109 | /// View Transitions 110 | /// 111 | /// - Parameter completion: completion 112 | fileprivate func viewTransition() { 113 | 114 | let screenHeight: CGFloat = UIScreen.main.bounds.height 115 | let screenWidth: CGFloat = UIScreen.main.bounds.width 116 | 117 | var translationX: CGFloat = 0 118 | var translationY: CGFloat = 0 119 | 120 | var alphaStart: CGFloat = 0.2 121 | var alphaEnd: CGFloat = 1 122 | 123 | if !viewVisibility { 124 | alphaStart = 1 125 | alphaEnd = 0.2 126 | } 127 | 128 | switch animation { 129 | case .fromTop, .fromBottom, .fromLeft, .fromRight, .fromFade: 130 | viewVisibility = true 131 | case .toTop, .toBottom, .toLeft, .toRight, .toFade: 132 | viewVisibility = false 133 | default: 134 | return 135 | } 136 | 137 | switch animation { 138 | case .fromTop, .toTop: 139 | translationY = -screenHeight 140 | case .fromBottom, .toBottom: 141 | translationY = screenHeight 142 | case .fromLeft, .toLeft: 143 | translationX = -screenWidth 144 | case .fromRight, .toRight: 145 | translationX = screenWidth 146 | case .fromFade, .toFade: 147 | alphaStart = viewVisibility ? 0 : 1 148 | alphaEnd = viewVisibility ? 1 : 0 149 | default: 150 | return 151 | } 152 | 153 | let transform = CGAffineTransform(translationX: translationX, y: translationY) 154 | let start: CGAffineTransform = viewVisibility ? transform : .identity 155 | let end: CGAffineTransform = viewVisibility ? .identity : transform 156 | 157 | view.transform = start 158 | view.alpha = alphaStart 159 | 160 | let (damping, velocity) = springDamping.values 161 | 162 | UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: damping, initialSpringVelocity: velocity, options: [.allowUserInteraction], animations: { 163 | self.setRepeatCount() 164 | self.view.transform = end 165 | self.view.alpha = alphaEnd 166 | 167 | self.isViewAnimating?(true, self.view) 168 | 169 | }) { _ in 170 | self.isViewAnimating?(false, self.view) 171 | } 172 | } 173 | 174 | 175 | /// Vibrates the view at position 176 | /// 177 | /// - Parameters: 178 | /// - rate: CGFloat 179 | /// - vibrateX: flag for X-axis 180 | fileprivate func vibrate(_ rate: CGFloat, vibrateX: Bool) { 181 | let animation = CABasicAnimation(keyPath: "position") 182 | animation.duration = duration 183 | animation.repeatCount = repeatCount 184 | animation.autoreverses = true 185 | animation.isRemovedOnCompletion = true 186 | 187 | if vibrateX { 188 | animation.fromValue = NSValue(cgPoint: CGPoint(x: view.center.x - rate, y: view.center.y)) 189 | animation.toValue = NSValue(cgPoint: CGPoint(x: view.center.x + rate, y: view.center.y)) 190 | } 191 | else { 192 | animation.fromValue = NSValue(cgPoint: CGPoint(x: view.center.x, y: view.center.y - rate)) 193 | animation.toValue = NSValue(cgPoint: CGPoint(x: view.center.x, y: view.center.y + rate)) 194 | } 195 | 196 | view.addAnimation(animation, forKey: .vibrate) 197 | 198 | } 199 | 200 | /// Rotates the view horizontally 201 | /// 202 | /// - Parameter isLeft: Bool 203 | fileprivate func rotateHorizontal(_ fromLeft: Bool) { 204 | 205 | let direction: UIView.AnimationOptions = fromLeft ? .transitionFlipFromLeft : .transitionFlipFromRight 206 | 207 | UIView.transition(with: view, duration: duration, options: direction, animations: { 208 | self.setRepeatCount() 209 | }, completion: nil) 210 | 211 | } 212 | 213 | /// Scale bounce effect 214 | /// 215 | /// - Parameter rate: Float 216 | fileprivate func scaleBounce(_ rate:Float) { 217 | let animation = CAKeyframeAnimation(keyPath: "transform.scale") 218 | animation.duration = duration 219 | animation.repeatCount = repeatCount 220 | animation.values = [1.0,rate*1.1,1.1,0.8,1.0] 221 | animation.isRemovedOnCompletion = true 222 | view.addAnimation(animation, forKey: .scale) 223 | } 224 | 225 | /// Rotates the view at 360 degree 226 | fileprivate func rotateRound() { 227 | let animation = CABasicAnimation(keyPath: "transform.rotation.z") 228 | animation.fromValue = 0.0 229 | animation.toValue = CGFloat(.pi * 2.0) 230 | animation.duration = duration 231 | animation.repeatCount = repeatCount 232 | animation.isRemovedOnCompletion = true 233 | view.addAnimation(animation, forKey: .rotation) 234 | } 235 | 236 | /// Zoom in effect of view 237 | fileprivate func zoomIn() { 238 | 239 | self.scaledHidden() 240 | UIView.animate(withDuration: duration, animations: { 241 | self.view.transform = .identity 242 | }, completion: nil) 243 | 244 | } 245 | 246 | /// Zoom out effect of view 247 | fileprivate func zoomOut() { 248 | 249 | UIView.animate(withDuration: duration, animations: { 250 | self.view.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) 251 | }) { _ in 252 | self.scaledHidden() 253 | } 254 | 255 | } 256 | 257 | /// Set global animation repeat count 258 | fileprivate func setRepeatCount() { 259 | UIView.setAnimationRepeatCount(repeatCount) 260 | } 261 | 262 | /// Hide a view with scale transformation to zero 263 | fileprivate func scaledHidden() { 264 | view.transform = CGAffineTransform(scaleX: 0, y: 0) 265 | } 266 | } 267 | 268 | 269 | 270 | -------------------------------------------------------------------------------- /Example/AANotifier/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 40 | 57 | 72 | 87 | 97 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | -------------------------------------------------------------------------------- /Example/AANotifier.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 420943051E65E65B001FB091 /* PopupView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 420943041E65E65B001FB091 /* PopupView.xib */; }; 11 | 423591F71E549F29001C2B59 /* LikeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 423591F61E549F29001C2B59 /* LikeView.swift */; }; 12 | 423591F91E54B095001C2B59 /* StatusView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 423591F81E54B095001C2B59 /* StatusView.xib */; }; 13 | 423591FB1E54CE26001C2B59 /* ToastView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 423591FA1E54CE26001C2B59 /* ToastView.xib */; }; 14 | 42F6E9951E524AE200880D03 /* InfoView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 42F6E9941E524AE200880D03 /* InfoView.xib */; }; 15 | 42F6E9971E524AED00880D03 /* LikeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 42F6E9961E524AED00880D03 /* LikeView.xib */; }; 16 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 17 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; 18 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 19 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 20 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 21 | 7440CA4D4669A014A38F3BAA /* Pods_AANotifier_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3D57A3F1043077E76EA7364 /* Pods_AANotifier_Example.framework */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXFileReference section */ 25 | 39AD9229AA21286A4179E2DE /* AANotifier.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = AANotifier.podspec; path = ../AANotifier.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 26 | 420943041E65E65B001FB091 /* PopupView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PopupView.xib; sourceTree = ""; }; 27 | 423591F61E549F29001C2B59 /* LikeView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LikeView.swift; sourceTree = ""; }; 28 | 423591F81E54B095001C2B59 /* StatusView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = StatusView.xib; sourceTree = ""; }; 29 | 423591FA1E54CE26001C2B59 /* ToastView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ToastView.xib; sourceTree = ""; }; 30 | 42F6E9941E524AE200880D03 /* InfoView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = InfoView.xib; sourceTree = ""; }; 31 | 42F6E9961E524AED00880D03 /* LikeView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LikeView.xib; sourceTree = ""; }; 32 | 6021D6D67342E281EA57666B /* Pods_AANotifier_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AANotifier_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | 607FACD01AFB9204008FA782 /* AANotifier_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AANotifier_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 34 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 35 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 36 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 37 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 38 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 39 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 40 | 70909127B5B18B24EAE86931 /* Pods-AANotifier_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AANotifier_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AANotifier_Tests/Pods-AANotifier_Tests.debug.xcconfig"; sourceTree = ""; }; 41 | 852E79550BB9111FB5E1EA70 /* Pods-AANotifier_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AANotifier_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-AANotifier_Tests/Pods-AANotifier_Tests.release.xcconfig"; sourceTree = ""; }; 42 | AD6A173415D2045F59D18F4E /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 43 | B2D63BD66D4CAEC2F502B192 /* Pods-AANotifier_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AANotifier_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example.debug.xcconfig"; sourceTree = ""; }; 44 | C2CA035625A698F83969E9EF /* Pods-AANotifier_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AANotifier_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example.release.xcconfig"; sourceTree = ""; }; 45 | D6A4805F3EA25177B5DF49D4 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 46 | F3D57A3F1043077E76EA7364 /* Pods_AANotifier_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AANotifier_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 47 | /* End PBXFileReference section */ 48 | 49 | /* Begin PBXFrameworksBuildPhase section */ 50 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 51 | isa = PBXFrameworksBuildPhase; 52 | buildActionMask = 2147483647; 53 | files = ( 54 | 7440CA4D4669A014A38F3BAA /* Pods_AANotifier_Example.framework in Frameworks */, 55 | ); 56 | runOnlyForDeploymentPostprocessing = 0; 57 | }; 58 | /* End PBXFrameworksBuildPhase section */ 59 | 60 | /* Begin PBXGroup section */ 61 | 3F964497D103A5702D5D1108 /* Frameworks */ = { 62 | isa = PBXGroup; 63 | children = ( 64 | F3D57A3F1043077E76EA7364 /* Pods_AANotifier_Example.framework */, 65 | 6021D6D67342E281EA57666B /* Pods_AANotifier_Tests.framework */, 66 | ); 67 | name = Frameworks; 68 | sourceTree = ""; 69 | }; 70 | 42F6E9981E52535500880D03 /* Xibs */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 42F6E9941E524AE200880D03 /* InfoView.xib */, 74 | 42F6E9961E524AED00880D03 /* LikeView.xib */, 75 | 423591FA1E54CE26001C2B59 /* ToastView.xib */, 76 | 423591F81E54B095001C2B59 /* StatusView.xib */, 77 | 420943041E65E65B001FB091 /* PopupView.xib */, 78 | ); 79 | name = Xibs; 80 | sourceTree = ""; 81 | }; 82 | 607FACC71AFB9204008FA782 = { 83 | isa = PBXGroup; 84 | children = ( 85 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 86 | 607FACD21AFB9204008FA782 /* Example for AANotifier */, 87 | 607FACD11AFB9204008FA782 /* Products */, 88 | AB2004A092E0D41C378058A1 /* Pods */, 89 | 3F964497D103A5702D5D1108 /* Frameworks */, 90 | ); 91 | sourceTree = ""; 92 | }; 93 | 607FACD11AFB9204008FA782 /* Products */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | 607FACD01AFB9204008FA782 /* AANotifier_Example.app */, 97 | ); 98 | name = Products; 99 | sourceTree = ""; 100 | }; 101 | 607FACD21AFB9204008FA782 /* Example for AANotifier */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 105 | 607FACD71AFB9204008FA782 /* ViewController.swift */, 106 | 423591F61E549F29001C2B59 /* LikeView.swift */, 107 | 42F6E9981E52535500880D03 /* Xibs */, 108 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 109 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 110 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 111 | 607FACD31AFB9204008FA782 /* Supporting Files */, 112 | ); 113 | name = "Example for AANotifier"; 114 | path = AANotifier; 115 | sourceTree = ""; 116 | }; 117 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 607FACD41AFB9204008FA782 /* Info.plist */, 121 | ); 122 | name = "Supporting Files"; 123 | sourceTree = ""; 124 | }; 125 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | 39AD9229AA21286A4179E2DE /* AANotifier.podspec */, 129 | D6A4805F3EA25177B5DF49D4 /* README.md */, 130 | AD6A173415D2045F59D18F4E /* LICENSE */, 131 | ); 132 | name = "Podspec Metadata"; 133 | sourceTree = ""; 134 | }; 135 | AB2004A092E0D41C378058A1 /* Pods */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | B2D63BD66D4CAEC2F502B192 /* Pods-AANotifier_Example.debug.xcconfig */, 139 | C2CA035625A698F83969E9EF /* Pods-AANotifier_Example.release.xcconfig */, 140 | 70909127B5B18B24EAE86931 /* Pods-AANotifier_Tests.debug.xcconfig */, 141 | 852E79550BB9111FB5E1EA70 /* Pods-AANotifier_Tests.release.xcconfig */, 142 | ); 143 | name = Pods; 144 | sourceTree = ""; 145 | }; 146 | /* End PBXGroup section */ 147 | 148 | /* Begin PBXNativeTarget section */ 149 | 607FACCF1AFB9204008FA782 /* AANotifier_Example */ = { 150 | isa = PBXNativeTarget; 151 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AANotifier_Example" */; 152 | buildPhases = ( 153 | A72EE6B492E9614A6C8EFDB8 /* [CP] Check Pods Manifest.lock */, 154 | 607FACCC1AFB9204008FA782 /* Sources */, 155 | 607FACCD1AFB9204008FA782 /* Frameworks */, 156 | 607FACCE1AFB9204008FA782 /* Resources */, 157 | EB9CF5C2BB17F9FB42F0189C /* [CP] Embed Pods Frameworks */, 158 | ); 159 | buildRules = ( 160 | ); 161 | dependencies = ( 162 | ); 163 | name = AANotifier_Example; 164 | productName = AANotifier; 165 | productReference = 607FACD01AFB9204008FA782 /* AANotifier_Example.app */; 166 | productType = "com.apple.product-type.application"; 167 | }; 168 | /* End PBXNativeTarget section */ 169 | 170 | /* Begin PBXProject section */ 171 | 607FACC81AFB9204008FA782 /* Project object */ = { 172 | isa = PBXProject; 173 | attributes = { 174 | LastSwiftUpdateCheck = 0720; 175 | LastUpgradeCheck = 1020; 176 | ORGANIZATIONNAME = CocoaPods; 177 | TargetAttributes = { 178 | 607FACCF1AFB9204008FA782 = { 179 | CreatedOnToolsVersion = 6.3.1; 180 | DevelopmentTeam = 5J29YQGG4K; 181 | LastSwiftMigration = 1020; 182 | }; 183 | }; 184 | }; 185 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AANotifier" */; 186 | compatibilityVersion = "Xcode 3.2"; 187 | developmentRegion = English; 188 | hasScannedForEncodings = 0; 189 | knownRegions = ( 190 | English, 191 | en, 192 | Base, 193 | ); 194 | mainGroup = 607FACC71AFB9204008FA782; 195 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 196 | projectDirPath = ""; 197 | projectRoot = ""; 198 | targets = ( 199 | 607FACCF1AFB9204008FA782 /* AANotifier_Example */, 200 | ); 201 | }; 202 | /* End PBXProject section */ 203 | 204 | /* Begin PBXResourcesBuildPhase section */ 205 | 607FACCE1AFB9204008FA782 /* Resources */ = { 206 | isa = PBXResourcesBuildPhase; 207 | buildActionMask = 2147483647; 208 | files = ( 209 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 210 | 42F6E9951E524AE200880D03 /* InfoView.xib in Resources */, 211 | 42F6E9971E524AED00880D03 /* LikeView.xib in Resources */, 212 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 213 | 423591FB1E54CE26001C2B59 /* ToastView.xib in Resources */, 214 | 420943051E65E65B001FB091 /* PopupView.xib in Resources */, 215 | 423591F91E54B095001C2B59 /* StatusView.xib in Resources */, 216 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 217 | ); 218 | runOnlyForDeploymentPostprocessing = 0; 219 | }; 220 | /* End PBXResourcesBuildPhase section */ 221 | 222 | /* Begin PBXShellScriptBuildPhase section */ 223 | A72EE6B492E9614A6C8EFDB8 /* [CP] Check Pods Manifest.lock */ = { 224 | isa = PBXShellScriptBuildPhase; 225 | buildActionMask = 2147483647; 226 | files = ( 227 | ); 228 | inputPaths = ( 229 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 230 | "${PODS_ROOT}/Manifest.lock", 231 | ); 232 | name = "[CP] Check Pods Manifest.lock"; 233 | outputPaths = ( 234 | "$(DERIVED_FILE_DIR)/Pods-AANotifier_Example-checkManifestLockResult.txt", 235 | ); 236 | runOnlyForDeploymentPostprocessing = 0; 237 | shellPath = /bin/sh; 238 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 239 | showEnvVarsInLog = 0; 240 | }; 241 | EB9CF5C2BB17F9FB42F0189C /* [CP] Embed Pods Frameworks */ = { 242 | isa = PBXShellScriptBuildPhase; 243 | buildActionMask = 2147483647; 244 | files = ( 245 | ); 246 | inputPaths = ( 247 | "${PODS_ROOT}/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example-frameworks.sh", 248 | "${BUILT_PRODUCTS_DIR}/AANotifier/AANotifier.framework", 249 | "${BUILT_PRODUCTS_DIR}/AAViewAnimator/AAViewAnimator.framework", 250 | ); 251 | name = "[CP] Embed Pods Frameworks"; 252 | outputPaths = ( 253 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AANotifier.framework", 254 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AAViewAnimator.framework", 255 | ); 256 | runOnlyForDeploymentPostprocessing = 0; 257 | shellPath = /bin/sh; 258 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AANotifier_Example/Pods-AANotifier_Example-frameworks.sh\"\n"; 259 | showEnvVarsInLog = 0; 260 | }; 261 | /* End PBXShellScriptBuildPhase section */ 262 | 263 | /* Begin PBXSourcesBuildPhase section */ 264 | 607FACCC1AFB9204008FA782 /* Sources */ = { 265 | isa = PBXSourcesBuildPhase; 266 | buildActionMask = 2147483647; 267 | files = ( 268 | 423591F71E549F29001C2B59 /* LikeView.swift in Sources */, 269 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, 270 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 271 | ); 272 | runOnlyForDeploymentPostprocessing = 0; 273 | }; 274 | /* End PBXSourcesBuildPhase section */ 275 | 276 | /* Begin PBXVariantGroup section */ 277 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 278 | isa = PBXVariantGroup; 279 | children = ( 280 | 607FACDA1AFB9204008FA782 /* Base */, 281 | ); 282 | name = Main.storyboard; 283 | sourceTree = ""; 284 | }; 285 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 286 | isa = PBXVariantGroup; 287 | children = ( 288 | 607FACDF1AFB9204008FA782 /* Base */, 289 | ); 290 | name = LaunchScreen.xib; 291 | sourceTree = ""; 292 | }; 293 | /* End PBXVariantGroup section */ 294 | 295 | /* Begin XCBuildConfiguration section */ 296 | 607FACED1AFB9204008FA782 /* Debug */ = { 297 | isa = XCBuildConfiguration; 298 | buildSettings = { 299 | ALWAYS_SEARCH_USER_PATHS = NO; 300 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 301 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 302 | CLANG_CXX_LIBRARY = "libc++"; 303 | CLANG_ENABLE_MODULES = YES; 304 | CLANG_ENABLE_OBJC_ARC = YES; 305 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 306 | CLANG_WARN_BOOL_CONVERSION = YES; 307 | CLANG_WARN_COMMA = YES; 308 | CLANG_WARN_CONSTANT_CONVERSION = YES; 309 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 310 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 311 | CLANG_WARN_EMPTY_BODY = YES; 312 | CLANG_WARN_ENUM_CONVERSION = YES; 313 | CLANG_WARN_INFINITE_RECURSION = YES; 314 | CLANG_WARN_INT_CONVERSION = YES; 315 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 316 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 317 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 318 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 319 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 320 | CLANG_WARN_STRICT_PROTOTYPES = YES; 321 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 322 | CLANG_WARN_UNREACHABLE_CODE = YES; 323 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 324 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 325 | COPY_PHASE_STRIP = NO; 326 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 327 | ENABLE_STRICT_OBJC_MSGSEND = YES; 328 | ENABLE_TESTABILITY = YES; 329 | GCC_C_LANGUAGE_STANDARD = gnu99; 330 | GCC_DYNAMIC_NO_PIC = NO; 331 | GCC_NO_COMMON_BLOCKS = YES; 332 | GCC_OPTIMIZATION_LEVEL = 0; 333 | GCC_PREPROCESSOR_DEFINITIONS = ( 334 | "DEBUG=1", 335 | "$(inherited)", 336 | ); 337 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 338 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 339 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 340 | GCC_WARN_UNDECLARED_SELECTOR = YES; 341 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 342 | GCC_WARN_UNUSED_FUNCTION = YES; 343 | GCC_WARN_UNUSED_VARIABLE = YES; 344 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 345 | MTL_ENABLE_DEBUG_INFO = YES; 346 | ONLY_ACTIVE_ARCH = YES; 347 | SDKROOT = iphoneos; 348 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 349 | }; 350 | name = Debug; 351 | }; 352 | 607FACEE1AFB9204008FA782 /* Release */ = { 353 | isa = XCBuildConfiguration; 354 | buildSettings = { 355 | ALWAYS_SEARCH_USER_PATHS = NO; 356 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 357 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 358 | CLANG_CXX_LIBRARY = "libc++"; 359 | CLANG_ENABLE_MODULES = YES; 360 | CLANG_ENABLE_OBJC_ARC = YES; 361 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 362 | CLANG_WARN_BOOL_CONVERSION = YES; 363 | CLANG_WARN_COMMA = YES; 364 | CLANG_WARN_CONSTANT_CONVERSION = YES; 365 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 366 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 367 | CLANG_WARN_EMPTY_BODY = YES; 368 | CLANG_WARN_ENUM_CONVERSION = YES; 369 | CLANG_WARN_INFINITE_RECURSION = YES; 370 | CLANG_WARN_INT_CONVERSION = YES; 371 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 372 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 373 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 374 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 375 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 376 | CLANG_WARN_STRICT_PROTOTYPES = YES; 377 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 378 | CLANG_WARN_UNREACHABLE_CODE = YES; 379 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 380 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 381 | COPY_PHASE_STRIP = NO; 382 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 383 | ENABLE_NS_ASSERTIONS = NO; 384 | ENABLE_STRICT_OBJC_MSGSEND = YES; 385 | GCC_C_LANGUAGE_STANDARD = gnu99; 386 | GCC_NO_COMMON_BLOCKS = YES; 387 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 388 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 389 | GCC_WARN_UNDECLARED_SELECTOR = YES; 390 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 391 | GCC_WARN_UNUSED_FUNCTION = YES; 392 | GCC_WARN_UNUSED_VARIABLE = YES; 393 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 394 | MTL_ENABLE_DEBUG_INFO = NO; 395 | SDKROOT = iphoneos; 396 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 397 | VALIDATE_PRODUCT = YES; 398 | }; 399 | name = Release; 400 | }; 401 | 607FACF01AFB9204008FA782 /* Debug */ = { 402 | isa = XCBuildConfiguration; 403 | baseConfigurationReference = B2D63BD66D4CAEC2F502B192 /* Pods-AANotifier_Example.debug.xcconfig */; 404 | buildSettings = { 405 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 406 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 407 | DEVELOPMENT_TEAM = 5J29YQGG4K; 408 | INFOPLIST_FILE = AANotifier/Info.plist; 409 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 410 | MODULE_NAME = ExampleApp; 411 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 412 | PRODUCT_NAME = "$(TARGET_NAME)"; 413 | SWIFT_VERSION = 5.0; 414 | }; 415 | name = Debug; 416 | }; 417 | 607FACF11AFB9204008FA782 /* Release */ = { 418 | isa = XCBuildConfiguration; 419 | baseConfigurationReference = C2CA035625A698F83969E9EF /* Pods-AANotifier_Example.release.xcconfig */; 420 | buildSettings = { 421 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 422 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 423 | DEVELOPMENT_TEAM = 5J29YQGG4K; 424 | INFOPLIST_FILE = AANotifier/Info.plist; 425 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 426 | MODULE_NAME = ExampleApp; 427 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 428 | PRODUCT_NAME = "$(TARGET_NAME)"; 429 | SWIFT_VERSION = 5.0; 430 | }; 431 | name = Release; 432 | }; 433 | /* End XCBuildConfiguration section */ 434 | 435 | /* Begin XCConfigurationList section */ 436 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AANotifier" */ = { 437 | isa = XCConfigurationList; 438 | buildConfigurations = ( 439 | 607FACED1AFB9204008FA782 /* Debug */, 440 | 607FACEE1AFB9204008FA782 /* Release */, 441 | ); 442 | defaultConfigurationIsVisible = 0; 443 | defaultConfigurationName = Release; 444 | }; 445 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AANotifier_Example" */ = { 446 | isa = XCConfigurationList; 447 | buildConfigurations = ( 448 | 607FACF01AFB9204008FA782 /* Debug */, 449 | 607FACF11AFB9204008FA782 /* Release */, 450 | ); 451 | defaultConfigurationIsVisible = 0; 452 | defaultConfigurationName = Release; 453 | }; 454 | /* End XCConfigurationList section */ 455 | }; 456 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 457 | } 458 | --------------------------------------------------------------------------------