├── BunbunuCustom ├── .DS_Store ├── Pods │ ├── Target Support Files │ │ ├── pop │ │ │ ├── pop-prefix.pch │ │ │ ├── pop.modulemap │ │ │ ├── pop-dummy.m │ │ │ ├── pop.xcconfig │ │ │ ├── pop-umbrella.h │ │ │ └── Info.plist │ │ ├── SnapKit │ │ │ ├── SnapKit-prefix.pch │ │ │ ├── SnapKit.modulemap │ │ │ ├── SnapKit-dummy.m │ │ │ ├── SnapKit-umbrella.h │ │ │ ├── SnapKit.xcconfig │ │ │ └── Info.plist │ │ ├── UIColor_Hex_Swift │ │ │ ├── UIColor_Hex_Swift-prefix.pch │ │ │ ├── UIColor_Hex_Swift.modulemap │ │ │ ├── UIColor_Hex_Swift-dummy.m │ │ │ ├── UIColor_Hex_Swift-umbrella.h │ │ │ ├── UIColor_Hex_Swift.xcconfig │ │ │ └── Info.plist │ │ └── Pods-BunbunuCustom │ │ │ ├── Pods-BunbunuCustom.modulemap │ │ │ ├── Pods-BunbunuCustom-dummy.m │ │ │ ├── Pods-BunbunuCustom-umbrella.h │ │ │ ├── Info.plist │ │ │ ├── Pods-BunbunuCustom.debug.xcconfig │ │ │ ├── Pods-BunbunuCustom.release.xcconfig │ │ │ ├── Pods-BunbunuCustom-acknowledgements.markdown │ │ │ ├── Pods-BunbunuCustom-frameworks.sh │ │ │ ├── Pods-BunbunuCustom-acknowledgements.plist │ │ │ └── Pods-BunbunuCustom-resources.sh │ ├── Manifest.lock │ ├── UIColor_Hex_Swift │ │ ├── HEXColor │ │ │ └── HEXColor.h │ │ ├── LICENSE │ │ └── README.md │ ├── pop │ │ ├── pop │ │ │ ├── POPAnimationPrivate.h │ │ │ ├── POP.h │ │ │ ├── POPDefines.h │ │ │ ├── POPAnimationEventInternal.h │ │ │ ├── POPAnimator.h │ │ │ ├── POPAnimationExtras.h │ │ │ ├── POPAction.h │ │ │ ├── POPGeometry.h │ │ │ ├── POPAnimationTracer.h │ │ │ ├── POPCustomAnimation.h │ │ │ ├── POPMath.h │ │ │ ├── POPAnimationEvent.h │ │ │ ├── POPCustomAnimation.mm │ │ │ ├── POPAnimationTracerInternal.h │ │ │ ├── POPAnimatorPrivate.h │ │ │ ├── WebCore │ │ │ │ ├── FloatConversion.h │ │ │ │ └── UnitBezier.h │ │ │ ├── POPBasicAnimation.h │ │ │ ├── POPMath.mm │ │ │ ├── POPDecayAnimation.h │ │ │ ├── POPPropertyAnimation.h │ │ │ ├── POPGeometry.mm │ │ │ ├── POPSpringAnimation.h │ │ │ ├── POPAnimationRuntime.h │ │ │ ├── POPBasicAnimation.mm │ │ │ ├── POPBasicAnimationInternal.h │ │ │ ├── POPAnimationEvent.mm │ │ │ ├── POPPropertyAnimation.mm │ │ │ ├── POPCGUtils.h │ │ │ ├── POPSpringAnimationInternal.h │ │ │ ├── POPDecayAnimationInternal.h │ │ │ ├── POPAnimationExtras.mm │ │ │ ├── POPCGUtils.mm │ │ │ ├── POPSpringSolver.h │ │ │ ├── POPSpringAnimation.mm │ │ │ └── POPLayerExtras.h │ │ └── LICENSE │ └── SnapKit │ │ ├── LICENSE │ │ ├── README.md │ │ └── Source │ │ ├── SnapKit.swift │ │ ├── ConstraintRelation.swift │ │ ├── EdgeInsets.swift │ │ ├── ViewController+SnapKit.swift │ │ ├── LayoutConstraint.swift │ │ └── ConstraintItem.swift ├── BunbunuCustom │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── time.imageset │ │ │ ├── time.png │ │ │ └── Contents.json │ │ ├── app_icon_60.imageset │ │ │ ├── app_icon_60@3x.png │ │ │ └── Contents.json │ │ ├── icon_list_sms.imageset │ │ │ ├── icon_list_sms.png │ │ │ ├── icon_list_sms@2x.png │ │ │ ├── icon_list_sms@3x.png │ │ │ └── Contents.json │ │ ├── icon_list_web.imageset │ │ │ ├── icon_list_web.png │ │ │ ├── icon_list_web@2x.png │ │ │ ├── icon_list_web@3x.png │ │ │ └── Contents.json │ │ ├── icon_list_like.imageset │ │ │ ├── icon_list_like.png │ │ │ ├── icon_list_like@2x.png │ │ │ ├── icon_list_like@3x.png │ │ │ └── Contents.json │ │ ├── icon_list_text.imageset │ │ │ ├── icon_list_text.png │ │ │ ├── icon_list_text@2x.png │ │ │ ├── icon_list_text@3x.png │ │ │ └── Contents.json │ │ ├── icon_list_email.imageset │ │ │ ├── icon_list_email.png │ │ │ ├── icon_list_email@2x.png │ │ │ ├── icon_list_email@3x.png │ │ │ └── Contents.json │ │ ├── icon_list_phone.imageset │ │ │ ├── icon_list_phone.png │ │ │ ├── icon_list_phone@2x.png │ │ │ ├── icon_list_phone@3x.png │ │ │ └── Contents.json │ │ ├── img_member_photo.imageset │ │ │ ├── img_member_photo.png │ │ │ ├── img_member_photo@2x.png │ │ │ ├── img_member_photo@3x.png │ │ │ └── Contents.json │ │ ├── icon_list_namecard.imageset │ │ │ ├── icon_list_namecard.png │ │ │ ├── icon_list_namecard@2x.png │ │ │ ├── icon_list_namecard@3x.png │ │ │ └── Contents.json │ │ ├── icon_list_position.imageset │ │ │ ├── icon_list_position.png │ │ │ ├── icon_list_position@2x.png │ │ │ ├── icon_list_position@3x.png │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Extension │ │ ├── StringExtension.swift │ │ ├── UIColorExtension.swift │ │ └── UIViewControllerExtension.swift │ ├── ViewController.swift │ ├── Info.plist │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ ├── ImageView │ │ ├── ImageViewGroupViewController.swift │ │ ├── CircleImageView.swift │ │ ├── CircleImageView.xib │ │ └── CirclePregressDemoView.swift │ ├── AppDelegate.swift │ └── Button │ │ ├── ButtonGroupViewController.swift │ │ ├── ToggleButtonView.xib │ │ ├── ToggleButton.swift │ │ └── ToggleButtonView.swift ├── Podfile ├── BunbunuCustom.xcodeproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── BunbunuCustom.xcworkspace │ └── contents.xcworkspacedata ├── Podfile.lock └── BunbunuCustomTests │ ├── Info.plist │ └── BunbunuCustomTests.swift ├── LICENSE ├── README.md └── .gitignore /BunbunuCustom/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/.DS_Store -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/pop/pop-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/UIColor_Hex_Swift/UIColor_Hex_Swift-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /BunbunuCustom/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '8.0' 2 | use_frameworks! 3 | 4 | target 'BunbunuCustom' do 5 | pod 'UIColor_Hex_Swift' 6 | pod 'pop' 7 | pod 'SnapKit' 8 | end -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/pop/pop.modulemap: -------------------------------------------------------------------------------- 1 | framework module pop { 2 | umbrella header "pop-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/time.imageset/time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/time.imageset/time.png -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/pop/pop-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_pop : NSObject 3 | @end 4 | @implementation PodsDummy_pop 5 | @end 6 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/SnapKit/SnapKit.modulemap: -------------------------------------------------------------------------------- 1 | framework module SnapKit { 2 | umbrella header "SnapKit-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/SnapKit/SnapKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SnapKit : NSObject 3 | @end 4 | @implementation PodsDummy_SnapKit 5 | @end 6 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/app_icon_60.imageset/app_icon_60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/app_icon_60.imageset/app_icon_60@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_sms.imageset/icon_list_sms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_sms.imageset/icon_list_sms.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_web.imageset/icon_list_web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_web.imageset/icon_list_web.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_like.imageset/icon_list_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_like.imageset/icon_list_like.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_sms.imageset/icon_list_sms@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_sms.imageset/icon_list_sms@2x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_sms.imageset/icon_list_sms@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_sms.imageset/icon_list_sms@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_text.imageset/icon_list_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_text.imageset/icon_list_text.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_web.imageset/icon_list_web@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_web.imageset/icon_list_web@2x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_web.imageset/icon_list_web@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_web.imageset/icon_list_web@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double SnapKitVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_email.imageset/icon_list_email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_email.imageset/icon_list_email.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_like.imageset/icon_list_like@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_like.imageset/icon_list_like@2x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_like.imageset/icon_list_like@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_like.imageset/icon_list_like@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_phone.imageset/icon_list_phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_phone.imageset/icon_list_phone.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_text.imageset/icon_list_text@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_text.imageset/icon_list_text@2x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_text.imageset/icon_list_text@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_text.imageset/icon_list_text@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/UIColor_Hex_Swift/UIColor_Hex_Swift.modulemap: -------------------------------------------------------------------------------- 1 | framework module UIColor_Hex_Swift { 2 | umbrella header "UIColor_Hex_Swift-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_email.imageset/icon_list_email@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_email.imageset/icon_list_email@2x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_email.imageset/icon_list_email@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_email.imageset/icon_list_email@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_phone.imageset/icon_list_phone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_phone.imageset/icon_list_phone@2x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_phone.imageset/icon_list_phone@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_phone.imageset/icon_list_phone@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/img_member_photo.imageset/img_member_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/img_member_photo.imageset/img_member_photo.png -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/Pods-BunbunuCustom.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_BunbunuCustom { 2 | umbrella header "Pods-BunbunuCustom-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_namecard.imageset/icon_list_namecard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_namecard.imageset/icon_list_namecard.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_position.imageset/icon_list_position.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_position.imageset/icon_list_position.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/img_member_photo.imageset/img_member_photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/img_member_photo.imageset/img_member_photo@2x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/img_member_photo.imageset/img_member_photo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/img_member_photo.imageset/img_member_photo@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/UIColor_Hex_Swift/UIColor_Hex_Swift-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_UIColor_Hex_Swift : NSObject 3 | @end 4 | @implementation PodsDummy_UIColor_Hex_Swift 5 | @end 6 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_namecard.imageset/icon_list_namecard@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_namecard.imageset/icon_list_namecard@2x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_namecard.imageset/icon_list_namecard@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_namecard.imageset/icon_list_namecard@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_position.imageset/icon_list_position@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_position.imageset/icon_list_position@2x.png -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_position.imageset/icon_list_position@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzef/BunbunuCustom/HEAD/BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_position.imageset/icon_list_position@3x.png -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/Pods-BunbunuCustom-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_BunbunuCustom : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_BunbunuCustom 5 | @end 6 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/Pods-BunbunuCustom-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_BunbunuCustomVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_BunbunuCustomVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/UIColor_Hex_Swift/UIColor_Hex_Swift-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "HEXColor.h" 4 | 5 | FOUNDATION_EXPORT double UIColor_Hex_SwiftVersionNumber; 6 | FOUNDATION_EXPORT const unsigned char UIColor_Hex_SwiftVersionString[]; 7 | 8 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/time.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "time.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/app_icon_60.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "app_icon_60@3x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /BunbunuCustom/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - pop (1.0.9) 3 | - SnapKit (0.21.1) 4 | - UIColor_Hex_Swift (2.1) 5 | 6 | DEPENDENCIES: 7 | - pop 8 | - SnapKit 9 | - UIColor_Hex_Swift 10 | 11 | SPEC CHECKSUMS: 12 | pop: f667631a5108a2e60d9e8797c9b32ddaf2080bce 13 | SnapKit: bbad04cb016c7cead63965f16b00c09318d271ee 14 | UIColor_Hex_Swift: e91dc51f6bf252ec7bf74c8704ceedeeb7640c1c 15 | 16 | PODFILE CHECKSUM: ce70acaa34dba210d116d13710bb6269d5a43f06 17 | 18 | COCOAPODS: 1.0.1 19 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - pop (1.0.9) 3 | - SnapKit (0.21.1) 4 | - UIColor_Hex_Swift (2.1) 5 | 6 | DEPENDENCIES: 7 | - pop 8 | - SnapKit 9 | - UIColor_Hex_Swift 10 | 11 | SPEC CHECKSUMS: 12 | pop: f667631a5108a2e60d9e8797c9b32ddaf2080bce 13 | SnapKit: bbad04cb016c7cead63965f16b00c09318d271ee 14 | UIColor_Hex_Swift: e91dc51f6bf252ec7bf74c8704ceedeeb7640c1c 15 | 16 | PODFILE CHECKSUM: ce70acaa34dba210d116d13710bb6269d5a43f06 17 | 18 | COCOAPODS: 1.0.1 19 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_sms.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_list_sms.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_list_sms@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_list_sms@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_web.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_list_web.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_list_web@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_list_web@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_like.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_list_like.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_list_like@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_list_like@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_text.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_list_text.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_list_text@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_list_text@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_email.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_list_email.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_list_email@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_list_email@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_phone.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_list_phone.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_list_phone@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_list_phone@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/img_member_photo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "img_member_photo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "img_member_photo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "img_member_photo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/SnapKit/SnapKit.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SnapKit 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 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 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_namecard.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_list_namecard.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_list_namecard@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_list_namecard@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/icon_list_position.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_list_position.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_list_position@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_list_position@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Extension/StringExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StringExtension.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/5/23. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension String { 12 | func stringSize(attribute: [String : AnyObject], size: CGSize) -> CGSize { 13 | let attributedText = NSAttributedString.init(string: self, attributes: attribute) 14 | return attributedText.boundingRectWithSize(size, options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil).size 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/UIColor_Hex_Swift/HEXColor/HEXColor.h: -------------------------------------------------------------------------------- 1 | // 2 | // HEXColor.h 3 | // HEXColor 4 | // 5 | // Created by Yuki Nagai on 10/5/15. 6 | // Copyright © 2015 P.D.Q. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for HEXColor. 12 | FOUNDATION_EXPORT double HEXColorVersionNumber; 13 | 14 | //! Project version string for HEXColor. 15 | FOUNDATION_EXPORT const unsigned char HEXColorVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/pop/pop.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_CXX_LANGUAGE_STANDARD = c++11 2 | CLANG_CXX_LIBRARY = libc++ 3 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/pop 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 6 | OTHER_LDFLAGS = -l"c++" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Extension/UIColorExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/5/23. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIColor { 12 | func darkerColor() -> UIColor { 13 | var red : CGFloat = 0 14 | var green : CGFloat = 0 15 | var blue : CGFloat = 0 16 | var alpha: CGFloat = 0 17 | self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) 18 | return UIColor(red: red - 0.1, green: green - 0.1, blue: blue - 0.1, alpha: alpha) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/UIColor_Hex_Swift/UIColor_Hex_Swift.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/UIColor_Hex_Swift 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_LDFLAGS = -framework "UIKit" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/pop/pop-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "POP.h" 4 | #import "POPAnimatableProperty.h" 5 | #import "POPAnimation.h" 6 | #import "POPAnimationEvent.h" 7 | #import "POPAnimationExtras.h" 8 | #import "POPAnimationTracer.h" 9 | #import "POPAnimator.h" 10 | #import "POPBasicAnimation.h" 11 | #import "POPCustomAnimation.h" 12 | #import "POPDecayAnimation.h" 13 | #import "POPDefines.h" 14 | #import "POPGeometry.h" 15 | #import "POPLayerExtras.h" 16 | #import "POPPropertyAnimation.h" 17 | #import "POPSpringAnimation.h" 18 | 19 | FOUNDATION_EXPORT double popVersionNumber; 20 | FOUNDATION_EXPORT const unsigned char popVersionString[]; 21 | 22 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustomTests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimationPrivate.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #define POP_ANIMATION_FRICTION_FOR_QC_FRICTION(qcFriction) (25.0 + (((qcFriction - 8.0) / 2.0) * (25.0 - 19.0))) 13 | #define POP_ANIMATION_TENSION_FOR_QC_TENSION(qcTension) (194.0 + (((qcTension - 30.0) / 50.0) * (375.0 - 194.0))) 14 | 15 | #define QC_FRICTION_FOR_POP_ANIMATION_FRICTION(fbFriction) (8.0 + 2.0 * ((fbFriction - 25.0)/(25.0 - 19.0))) 16 | #define QC_TENSION_FOR_POP_ANIMATION_TENSION(fbTension) (30.0 + 50.0 * ((fbTension - 194.0)/(375.0 - 194.0))) 17 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POP.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #ifndef POP_POP_H 11 | #define POP_POP_H 12 | 13 | #import 14 | 15 | #import 16 | #import 17 | #import 18 | #import 19 | #import 20 | #import 21 | #import 22 | #import 23 | #import 24 | #import 25 | #import 26 | #import 27 | #import 28 | 29 | #endif /* POP_POP_H */ 30 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/pop/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.9 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/SnapKit/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.21.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/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 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/UIColor_Hex_Swift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 2.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/Pods-BunbunuCustom.debug.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SnapKit" "$PODS_CONFIGURATION_BUILD_DIR/UIColor_Hex_Swift" "$PODS_CONFIGURATION_BUILD_DIR/pop" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/SnapKit/SnapKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIColor_Hex_Swift/UIColor_Hex_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/pop/pop.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "UIColor_Hex_Swift" -framework "pop" 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_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/Pods-BunbunuCustom.release.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SnapKit" "$PODS_CONFIGURATION_BUILD_DIR/UIColor_Hex_Swift" "$PODS_CONFIGURATION_BUILD_DIR/pop" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/SnapKit/SnapKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIColor_Hex_Swift/UIColor_Hex_Swift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/pop/pop.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "UIColor_Hex_Swift" -framework "pop" 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_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPDefines.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #ifndef POP_POPDefines_h 11 | #define POP_POPDefines_h 12 | 13 | #import 14 | 15 | #ifdef __cplusplus 16 | # define POP_EXTERN_C_BEGIN extern "C" { 17 | # define POP_EXTERN_C_END } 18 | #else 19 | # define POP_EXTERN_C_BEGIN 20 | # define POP_EXTERN_C_END 21 | #endif 22 | 23 | #define POP_ARRAY_COUNT(x) sizeof(x) / sizeof(x[0]) 24 | 25 | #if defined (__cplusplus) && defined (__GNUC__) 26 | # define POP_NOTHROW __attribute__ ((nothrow)) 27 | #else 28 | # define POP_NOTHROW 29 | #endif 30 | 31 | #if TARGET_OS_MAC 32 | #define SCENEKIT_SDK_AVAILABLE defined(POP_USE_SCENEKIT) 33 | #elif TARGET_OS_IPHONE 34 | #define SCENEKIT_SDK_AVAILABLE defined(POP_USE_SCENEKIT) 35 | #endif 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 LeeZheYu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/SnapKit/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/UIColor_Hex_Swift/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 R0CKSTAR 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimationEventInternal.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "POPAnimationEvent.h" 13 | 14 | @interface POPAnimationEvent () 15 | 16 | /** 17 | @abstract Default initializer. 18 | */ 19 | - (instancetype)initWithType:(POPAnimationEventType)type time:(CFTimeInterval)time; 20 | 21 | /** 22 | @abstract Readwrite redefinition of public property. 23 | */ 24 | @property (readwrite, nonatomic, copy) NSString *animationDescription; 25 | 26 | @end 27 | 28 | @interface POPAnimationValueEvent () 29 | 30 | /** 31 | @abstract Default initializer. 32 | */ 33 | - (instancetype)initWithType:(POPAnimationEventType)type time:(CFTimeInterval)time value:(id)value; 34 | 35 | /** 36 | @abstract Readwrite redefinition of public property. 37 | */ 38 | @property (readwrite, nonatomic, strong) id velocity; 39 | 40 | @end 41 | 42 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/SnapKit/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. 4 | 5 | [![Build Status](https://travis-ci.org/SnapKit/SnapKit.svg)](https://travis-ci.org/SnapKit/SnapKit) 6 | [![Cocoapods Compatible](https://img.shields.io/cocoapods/v/SnapKit.svg)](https://img.shields.io/cocoapods/v/SnapKit.svg) 7 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 8 | 9 | ```swift 10 | import SnapKit 11 | 12 | class MyViewController: UIViewController { 13 | 14 | lazy var box = UIView() 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | 19 | self.view.addSubview(box) 20 | box.snp_makeConstraints { make in 21 | make.width.height.equalTo(50) 22 | make.center.equalTo(self.view) 23 | } 24 | } 25 | 26 | } 27 | ``` 28 | 29 | ## Resources 30 | 31 | * [Documentation](http://snapkit.io/docs/) 32 | * [F.A.Q.](http://snapkit.io/faq/) 33 | * [Legacy Platforms (iOS 7.0, OS X 10.9)](http://snapkit.io/legacy-platforms/) 34 | 35 | ## License 36 | 37 | MIT license. See the `LICENSE` file for details. 38 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimator.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @protocol POPAnimatorDelegate; 13 | 14 | /** 15 | @abstract The animator class renders animations. 16 | */ 17 | @interface POPAnimator : NSObject 18 | 19 | /** 20 | @abstract The shared animator instance. 21 | @discussion Consumers should generally use the shared instance in lieu of creating new instances. 22 | */ 23 | + (instancetype)sharedAnimator; 24 | 25 | /** 26 | @abstract The optional animator delegate. 27 | */ 28 | @property (weak, nonatomic) id delegate; 29 | 30 | @end 31 | 32 | /** 33 | @abstract The animator delegate. 34 | */ 35 | @protocol POPAnimatorDelegate 36 | 37 | /** 38 | @abstract Called on each frame before animation application. 39 | */ 40 | - (void)animatorWillAnimate:(POPAnimator *)animator; 41 | 42 | /** 43 | @abstract Called on each frame after animation application. 44 | */ 45 | - (void)animatorDidAnimate:(POPAnimator *)animator; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "83.5x83.5", 66 | "scale" : "2x" 67 | } 68 | ], 69 | "info" : { 70 | "version" : 1, 71 | "author" : "xcode" 72 | } 73 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BunbunuCustom 2 | 3 | ###### 抽些空檔將這些年來做過的custom view 整理在這個專案 4 | 5 | ====== 6 | #### Circle Progress ImageView 7 | ###### 設定原圖片和準備加載圖片 8 | ```swift 9 | demoCircleProgressImageView.image = old_image 10 | demoCircleProgressImageView.newImage = new_image 11 | ``` 12 | 13 | ###### 參數為 NSProgress 14 | ```swift 15 | demoCircleProgressImageView.progress = progress 16 | ``` 17 | 18 | ###### 自定義成功和失敗 closure 19 | ```swift 20 | demoCircleProgressImageView.completion = { 21 | //what you want to do when upload succeed, this will execute the code block after the animtaion finished 22 | } 23 | demoCircleProgressImageView.failure = { 24 | //what you want to do when upload failed 25 | } 26 | ``` 27 | ###### Public Method 28 | * func progressSucceed() 29 | * func progressFailed() 30 | * func resetProgress() 31 | 32 | ###### 補充 33 | 1. 使用 CADisplayLink 補齊中間進度動畫 34 | 2. 進度動畫 100% 結束前已透過 progressSucceed() 指定成功狀態,則會在進度完成時自動運行成功動畫 35 | 3. 進度至 100% 仍未指定成功或失敗,則會停留在等待狀態,並不會預設成功 36 | 4. 中途更改狀態為失敗,會中止目前進度,立即開始失敗動畫將進度條歸零並回復原本圖片 37 | 5. ContentMode 只實做出 AspectFil 和 AspectFill 38 | 39 | ![circledemo](https://cloud.githubusercontent.com/assets/3096210/16827101/f434a3b0-49b5-11e6-897d-995d54c632c1.gif) 40 | 41 | ====== 42 | #### Toggle Button 43 | ![togglebtndemo](https://cloud.githubusercontent.com/assets/3096210/16827105/f7aeebd6-49b5-11e6-8b58-1491ccf4e462.gif) 44 | 45 | ====== 46 | #### Style Button 47 | ![StyleButton](https://cloud.githubusercontent.com/assets/3096210/15464680/416bf128-2103-11e6-8ede-11af3645c6b8.png) 48 | 49 | ##License 50 | This project is under MIT License. See LICENSE file for more information. 51 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/5/22. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | private let reuseIdentifier = "basicCell" 12 | class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 13 | @IBOutlet weak var tableView: UITableView! 14 | let menu = ["Button", "ImageView"] 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | } 19 | override func viewWillAppear(animated: Bool) { 20 | super.viewWillAppear(animated) 21 | if let index = tableView.indexPathForSelectedRow { 22 | tableView.deselectRowAtIndexPath(index, animated: true) 23 | } 24 | } 25 | 26 | // MARK: - TableView 27 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 28 | return menu.count 29 | } 30 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 31 | let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) 32 | cell.textLabel?.text = menu[indexPath.row] 33 | return cell 34 | } 35 | func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 36 | let vcName = menu[indexPath.row] 37 | if let vc = storyboard?.instantiateViewControllerWithIdentifier(vcName) { 38 | self.showViewController(vc, sender: nil) 39 | } 40 | } 41 | } 42 | 43 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimationExtras.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import 13 | #import 14 | 15 | /** 16 | @abstract The current drag coefficient. 17 | @discussion A value greater than 1.0 indicates Simulator slow-motion animations are enabled. Defaults to 1.0. 18 | */ 19 | extern CGFloat POPAnimationDragCoefficient(); 20 | 21 | @interface CAAnimation (POPAnimationExtras) 22 | 23 | /** 24 | @abstract Apply the current drag coefficient to animation speed. 25 | @discussion Convenience utility to respect Simulator slow-motion animation settings. 26 | */ 27 | - (void)pop_applyDragCoefficient; 28 | 29 | @end 30 | 31 | @interface POPSpringAnimation (POPAnimationExtras) 32 | 33 | /** 34 | @abstract Converts from spring bounciness and speed to tension, friction and mass dynamics values. 35 | */ 36 | + (void)convertBounciness:(CGFloat)bounciness speed:(CGFloat)speed toTension:(CGFloat *)outTension friction:(CGFloat *)outFriction mass:(CGFloat *)outMass; 37 | 38 | /** 39 | @abstract Converts from dynamics tension, friction and mass to spring bounciness and speed values. 40 | */ 41 | + (void)convertTension:(CGFloat)tension friction:(CGFloat)friction toBounciness:(CGFloat *)outBounciness speed:(CGFloat *)outSpeed; 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/LICENSE: -------------------------------------------------------------------------------- 1 | BSD License 2 | 3 | For Pop software 4 | 5 | Copyright (c) 2014, Facebook, Inc. All rights reserved. 6 | 7 | Redistribution and use in source and binary forms, with or without modification, 8 | are permitted provided that the following conditions are met: 9 | 10 | * Redistributions of source code must retain the above copyright notice, this 11 | list of conditions and the following disclaimer. 12 | 13 | * Redistributions in binary form must reproduce the above copyright notice, 14 | this list of conditions and the following disclaimer in the documentation 15 | and/or other materials provided with the distribution. 16 | 17 | * Neither the name Facebook nor the names of its contributors may be used to 18 | endorse or promote products derived from this software without specific 19 | prior written permission. 20 | 21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 22 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 25 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 28 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | 20 | ## Other 21 | *.xccheckout 22 | *.moved-aside 23 | *.xcuserstate 24 | *.xcscmblueprint 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/screenshots 64 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/UIColor_Hex_Swift/README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | UIColor+Hex, now Swift. 6 | ================= 7 | Convenience method for creating autoreleased color using RGBA hex string. 8 | 9 | var strokeColor = UIColor(rgba: "#ffcc00").CGColor // Solid color 10 | 11 | var fillColor = UIColor(rgba: "#ffcc00dd").CGColor // Color with alpha 12 | 13 | var backgroundColor = UIColor(rgba: "#FFF") // Supports shorthand 3 character representation 14 | 15 | var menuTextColor = UIColor(rgba: "#013E") // Supports shorthand 4 character representation (with alpha) 16 | 17 | var hexString = UIColor.redColor().hexString(false) // "#FF0000" 18 | 19 | ##Installation 20 | 21 | ###[CocoaPods](http://cocoapods.org) 22 | 23 | Simply add the following lines to your `Podfile`: 24 | ```ruby 25 | # required by CocoaPods 0.36.0.rc.1 for Swift Pods 26 | use_frameworks! 27 | 28 | pod 'UIColor_Hex_Swift', '~> 2.1' 29 | ``` 30 | 31 | Then import it where you use it: 32 | ``` 33 | import UIColor_Hex_Swift 34 | ``` 35 | 36 | *(CocoaPods v0.36 or later required. See [this blog post](http://blog.cocoapods.org/Pod-Authors-Guide-to-CocoaPods-Frameworks/) for details.)* 37 | 38 | ###[Carthage](http://github.com/Carthage/Carthage) 39 | 40 | Simply add the following line to your `Cartfile`: 41 | 42 | ```ruby 43 | github "yeahdongcn/UIColor-Hex-Swift" >= 2.1 44 | ``` 45 | ================= 46 | See more in [RSBarcodes_Swift](https://github.com/yeahdongcn/RSBarcodes_Swift) and [objc version](https://github.com/yeahdongcn/RSBarcodes) 47 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAction.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #ifndef POPACTION_H 11 | #define POPACTION_H 12 | 13 | #import 14 | 15 | #import 16 | 17 | #ifdef __cplusplus 18 | 19 | namespace POP { 20 | 21 | /** 22 | @abstract Disables Core Animation actions using RAII. 23 | @discussion The disablement of actions is scoped to the current transaction. 24 | */ 25 | class ActionDisabler 26 | { 27 | BOOL state; 28 | 29 | public: 30 | ActionDisabler() POP_NOTHROW 31 | { 32 | state = [CATransaction disableActions]; 33 | [CATransaction setDisableActions:YES]; 34 | } 35 | 36 | ~ActionDisabler() 37 | { 38 | [CATransaction setDisableActions:state]; 39 | } 40 | }; 41 | 42 | /** 43 | @abstract Enables Core Animation actions using RAII. 44 | @discussion The enablement of actions is scoped to the current transaction. 45 | */ 46 | class ActionEnabler 47 | { 48 | BOOL state; 49 | 50 | public: 51 | ActionEnabler() POP_NOTHROW 52 | { 53 | state = [CATransaction disableActions]; 54 | [CATransaction setDisableActions:NO]; 55 | } 56 | 57 | ~ActionEnabler() 58 | { 59 | [CATransaction setDisableActions:state]; 60 | } 61 | }; 62 | 63 | } 64 | 65 | #endif /* __cplusplus */ 66 | 67 | #endif /* POPACTION_H */ 68 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/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 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPGeometry.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #if TARGET_OS_IPHONE 13 | #import 14 | #endif 15 | 16 | #if !TARGET_OS_IPHONE 17 | 18 | /** NSValue extensions to support animatable types. */ 19 | @interface NSValue (POP) 20 | 21 | /** 22 | @abstract Creates an NSValue given a CGPoint. 23 | */ 24 | + (NSValue *)valueWithCGPoint:(CGPoint)point; 25 | 26 | /** 27 | @abstract Creates an NSValue given a CGSize. 28 | */ 29 | + (NSValue *)valueWithCGSize:(CGSize)size; 30 | 31 | /** 32 | @abstract Creates an NSValue given a CGRect. 33 | */ 34 | + (NSValue *)valueWithCGRect:(CGRect)rect; 35 | 36 | /** 37 | @abstract Creates an NSValue given a CFRange. 38 | */ 39 | + (NSValue *)valueWithCFRange:(CFRange)range; 40 | 41 | /** 42 | @abstract Creates an NSValue given a CGAffineTransform. 43 | */ 44 | + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform; 45 | 46 | /** 47 | @abstract Returns the underlying CGPoint value. 48 | */ 49 | - (CGPoint)CGPointValue; 50 | 51 | /** 52 | @abstract Returns the underlying CGSize value. 53 | */ 54 | - (CGSize)CGSizeValue; 55 | 56 | /** 57 | @abstract Returns the underlying CGRect value. 58 | */ 59 | - (CGRect)CGRectValue; 60 | 61 | /** 62 | @abstract Returns the underlying CFRange value. 63 | */ 64 | - (CFRange)CFRangeValue; 65 | 66 | /** 67 | @abstract Returns the underlying CGAffineTransform value. 68 | */ 69 | - (CGAffineTransform)CGAffineTransformValue; 70 | 71 | @end 72 | 73 | #endif 74 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimationTracer.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import 13 | 14 | @class POPAnimation; 15 | 16 | /** 17 | @abstract Tracer of animation events to fasciliate unit testing & debugging. 18 | */ 19 | @interface POPAnimationTracer : NSObject 20 | 21 | /** 22 | @abstract Start recording events. 23 | */ 24 | - (void)start; 25 | 26 | /** 27 | @abstract Stop recording events. 28 | */ 29 | - (void)stop; 30 | 31 | /** 32 | @abstract Resets any recoded events. Continues recording events if already started. 33 | */ 34 | - (void)reset; 35 | 36 | /** 37 | @abstract Property representing all recorded events. 38 | @discussion Events are returned in order of occurence. 39 | */ 40 | @property (nonatomic, assign, readonly) NSArray *allEvents; 41 | 42 | /** 43 | @abstract Property representing all recorded write events for convenience. 44 | @discussion Events are returned in order of occurence. 45 | */ 46 | @property (nonatomic, assign, readonly) NSArray *writeEvents; 47 | 48 | /** 49 | @abstract Queries for events of specified type. 50 | @param type The type of event to return. 51 | @returns An array of events of specified type in order of occurence. 52 | */ 53 | - (NSArray *)eventsWithType:(POPAnimationEventType)type; 54 | 55 | /** 56 | @abstract Property indicating whether tracer should automatically log events and reset collection on animation completion. 57 | */ 58 | @property (nonatomic, assign) BOOL shouldLogAndResetOnCompletion; 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/SnapKit/Source/SnapKit.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | public typealias InterfaceLayoutDirection = UIUserInterfaceLayoutDirection 27 | public typealias LayoutSupport = UILayoutSupport 28 | #else 29 | import AppKit 30 | public typealias InterfaceLayoutDirection = NSUserInterfaceLayoutDirection 31 | public class LayoutSupport {} 32 | #endif 33 | 34 | /** 35 | Used to configure different parts of SnapKit 36 | */ 37 | public struct Config { 38 | 39 | /// The interface layout direction 40 | public static var interfaceLayoutDirection = InterfaceLayoutDirection.LeftToRight 41 | 42 | } -------------------------------------------------------------------------------- /BunbunuCustom/Pods/SnapKit/Source/ConstraintRelation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | /** 31 | Used to define `NSLayoutRelation` 32 | */ 33 | internal enum ConstraintRelation: Int { 34 | case Equal = 1, LessThanOrEqualTo, GreaterThanOrEqualTo 35 | 36 | internal var layoutRelation: NSLayoutRelation { 37 | get { 38 | switch(self) { 39 | case .LessThanOrEqualTo: 40 | return .LessThanOrEqual 41 | case .GreaterThanOrEqualTo: 42 | return .GreaterThanOrEqual 43 | default: 44 | return .Equal 45 | } 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /BunbunuCustom/Pods/SnapKit/Source/EdgeInsets.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | public typealias EdgeInsets = UIEdgeInsets 27 | public func EdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> EdgeInsets { 28 | return EdgeInsets(top: top, left: left, bottom: bottom, right: right) 29 | } 30 | public let EdgeInsetsZero = EdgeInsets(top: 0, left: 0, bottom: 0, right: 0) 31 | #else 32 | import AppKit 33 | public typealias EdgeInsets = NSEdgeInsets 34 | public func EdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> EdgeInsets { 35 | return EdgeInsets(top: top, left: left, bottom: bottom, right: right) 36 | } 37 | public let EdgeInsetsZero = EdgeInsets(top: 0, left: 0, bottom: 0, right: 0) 38 | #endif 39 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPCustomAnimation.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @class POPCustomAnimation; 13 | 14 | /** 15 | @abstract POPCustomAnimationBlock is the callback block of a custom animation. 16 | @discussion This block will be executed for each animation frame and should update the property or properties being animated based on current timing. 17 | @param target The object being animated. Reference the passed in target to help avoid retain loops. 18 | @param animation The custom animation instance. Use to determine the current and elapsed time since last callback. Reference the passed in animation to help avoid retain loops. 19 | @return Flag indicating whether the animation should continue animating. Return NO to indicate animation is done. 20 | */ 21 | typedef BOOL (^POPCustomAnimationBlock)(id target, POPCustomAnimation *animation); 22 | 23 | /** 24 | @abstract POPCustomAnimation is a concrete animation subclass for custom animations. 25 | */ 26 | @interface POPCustomAnimation : POPAnimation 27 | 28 | /** 29 | @abstract Creates and returns an initialized custom animation instance. 30 | @discussion This is the designated initializer. 31 | @param block The custom animation callback block. See {@ref POPCustomAnimationBlock}. 32 | @return The initialized custom animation instance. 33 | */ 34 | + (instancetype)animationWithBlock:(POPCustomAnimationBlock)block; 35 | 36 | /** 37 | @abstract The current animation time at time of callback. 38 | */ 39 | @property (readonly, nonatomic) CFTimeInterval currentTime; 40 | 41 | /** 42 | @abstract The elapsed animation time since last callback. 43 | */ 44 | @property (readonly, nonatomic) CFTimeInterval elapsedTime; 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPMath.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import 13 | 14 | #import "POPDefines.h" 15 | #import "POPVector.h" 16 | 17 | NS_INLINE CGFloat sqrtr(CGFloat f) 18 | { 19 | #if CGFLOAT_IS_DOUBLE 20 | return sqrt(f); 21 | #else 22 | return sqrtf(f); 23 | #endif 24 | } 25 | 26 | // round to nearest sub; pass 2.0 to round to every 0.5 (eg: retina pixels) 27 | NS_INLINE CGFloat POPSubRound(CGFloat f, CGFloat sub) 28 | { 29 | return round(f * sub) / sub; 30 | } 31 | 32 | #define MIX(a, b, f) ((a) + (f) * ((b) - (a))) 33 | 34 | // the longer the duration, the higher the necessary precision 35 | #define SOLVE_EPS(dur) (1. / (1000. * (dur))) 36 | 37 | #define _EQLF_(x, y, epsilon) (fabsf ((x) - (y)) < epsilon) 38 | 39 | extern void POPInterpolateVector(NSUInteger count, CGFloat *dst, const CGFloat *from, const CGFloat *to, CGFloat f); 40 | 41 | extern double POPTimingFunctionSolve(const double vec[4], double t, double eps); 42 | 43 | // quadratic mapping of t [0, 1] to [start, end] 44 | extern double POPQuadraticOutInterpolation(double t, double start, double end); 45 | 46 | // normalize value to [0, 1] based on its range [startValue, endValue] 47 | extern double POPNormalize(double value, double startValue, double endValue); 48 | 49 | // project a normalized value [0, 1] to a given range [start, end] 50 | extern double POPProjectNormal(double n, double start, double end); 51 | 52 | // solve a quadratic equation of the form a * x^2 + b * x + c = 0 53 | extern void POPQuadraticSolve(CGFloat a, CGFloat b, CGFloat c, CGFloat &x1, CGFloat &x2); 54 | 55 | // for a given tension return the bouncy 3 friction that produces no bounce 56 | extern double POPBouncy3NoBounce(double tension); 57 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Extension/UIViewControllerExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewControllerExtension.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/7/13. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIViewController { 12 | private static func findBestViewController(vc:UIViewController) -> UIViewController! { 13 | if ((vc.presentedViewController) != nil) { 14 | return UIViewController.findBestViewController(vc.presentedViewController!) 15 | } 16 | else if (vc.isKindOfClass(UISplitViewController.classForCoder())) { 17 | let splite = vc as! UISplitViewController 18 | if (splite.viewControllers.count > 0) { 19 | return UIViewController.findBestViewController(splite.viewControllers.last!) 20 | } 21 | 22 | else { 23 | return vc 24 | } 25 | } 26 | else if(vc.isKindOfClass(UINavigationController.classForCoder())) { 27 | let svc = vc as! UINavigationController 28 | if (svc.viewControllers.count > 0) { 29 | return UIViewController.findBestViewController(svc.topViewController!) 30 | } 31 | else { 32 | return vc 33 | } 34 | } 35 | else if (vc.isKindOfClass(UITabBarController.classForCoder())) { 36 | let svc = vc as! UITabBarController 37 | if (svc.viewControllers?.count > 0) { 38 | return UIViewController.findBestViewController(svc.selectedViewController!) 39 | } 40 | else { 41 | return vc 42 | } 43 | } 44 | else { 45 | return vc 46 | } 47 | } 48 | 49 | static func currentViewController() -> UIViewController { 50 | let vc:UIViewController! = UIApplication.sharedApplication().keyWindow?.rootViewController 51 | return UIViewController.findBestViewController(vc) 52 | } 53 | } 54 | 55 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimationEvent.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | /** 13 | @abstract Enumeraton of animation event types. 14 | */ 15 | typedef NS_ENUM(NSUInteger, POPAnimationEventType) { 16 | kPOPAnimationEventPropertyRead = 0, 17 | kPOPAnimationEventPropertyWrite, 18 | kPOPAnimationEventToValueUpdate, 19 | kPOPAnimationEventFromValueUpdate, 20 | kPOPAnimationEventVelocityUpdate, 21 | kPOPAnimationEventBouncinessUpdate, 22 | kPOPAnimationEventSpeedUpdate, 23 | kPOPAnimationEventFrictionUpdate, 24 | kPOPAnimationEventMassUpdate, 25 | kPOPAnimationEventTensionUpdate, 26 | kPOPAnimationEventDidStart, 27 | kPOPAnimationEventDidStop, 28 | kPOPAnimationEventDidReachToValue, 29 | kPOPAnimationEventAutoreversed 30 | }; 31 | 32 | /** 33 | @abstract The base animation event class. 34 | */ 35 | @interface POPAnimationEvent : NSObject 36 | 37 | /** 38 | @abstract The event type. See {@ref POPAnimationEventType} for possible values. 39 | */ 40 | @property (readonly, nonatomic, assign) POPAnimationEventType type; 41 | 42 | /** 43 | @abstract The time of event. 44 | */ 45 | @property (readonly, nonatomic, assign) CFTimeInterval time; 46 | 47 | /** 48 | @abstract Optional string describing the animation at time of event. 49 | */ 50 | @property (readonly, nonatomic, copy) NSString *animationDescription; 51 | 52 | @end 53 | 54 | /** 55 | @abstract An animation event subclass for recording value and velocity. 56 | */ 57 | @interface POPAnimationValueEvent : POPAnimationEvent 58 | 59 | /** 60 | @abstract The value recorded. 61 | */ 62 | @property (readonly, nonatomic, strong) id value; 63 | 64 | /** 65 | @abstract The velocity recorded, if any. 66 | */ 67 | @property (readonly, nonatomic, strong) id velocity; 68 | 69 | @end 70 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPCustomAnimation.mm: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPAnimationInternal.h" 11 | 12 | #import "POPCustomAnimation.h" 13 | 14 | @interface POPCustomAnimation () 15 | @property (nonatomic, copy) POPCustomAnimationBlock animate; 16 | @end 17 | 18 | @implementation POPCustomAnimation 19 | @synthesize currentTime = _currentTime; 20 | @synthesize elapsedTime = _elapsedTime; 21 | @synthesize animate = _animate; 22 | 23 | + (instancetype)animationWithBlock:(BOOL(^)(id target, POPCustomAnimation *))block 24 | { 25 | POPCustomAnimation *b = [[self alloc] _init]; 26 | b.animate = block; 27 | return b; 28 | } 29 | 30 | - (id)_init 31 | { 32 | self = [super _init]; 33 | if (nil != self) { 34 | _state->type = kPOPAnimationCustom; 35 | } 36 | return self; 37 | } 38 | 39 | - (CFTimeInterval)beginTime 40 | { 41 | POPAnimationState *s = POPAnimationGetState(self); 42 | return s->startTime > 0 ? s->startTime : s->beginTime; 43 | } 44 | 45 | - (BOOL)_advance:(id)object currentTime:(CFTimeInterval)currentTime elapsedTime:(CFTimeInterval)elapsedTime 46 | { 47 | _currentTime = currentTime; 48 | _elapsedTime = elapsedTime; 49 | return _animate(object, self); 50 | } 51 | 52 | - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug 53 | { 54 | [s appendFormat:@"; elapsedTime = %f; currentTime = %f;", _elapsedTime, _currentTime]; 55 | } 56 | 57 | @end 58 | 59 | /** 60 | * Note that only the animate block is copied, but not the current/elapsed times 61 | */ 62 | @implementation POPCustomAnimation (NSCopying) 63 | 64 | - (instancetype)copyWithZone:(NSZone *)zone { 65 | 66 | POPCustomAnimation *copy = [super copyWithZone:zone]; 67 | 68 | if (copy) { 69 | copy.animate = self.animate; 70 | } 71 | 72 | return copy; 73 | } 74 | 75 | @end -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimationTracerInternal.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import 13 | 14 | @interface POPAnimationTracer (Internal) 15 | 16 | /** 17 | @abstract Designated initalizer. Pass the animation being traced. 18 | */ 19 | - (instancetype)initWithAnimation:(POPAnimation *)anAnim; 20 | 21 | /** 22 | @abstract Records read value. 23 | */ 24 | - (void)readPropertyValue:(id)aValue; 25 | 26 | /** 27 | @abstract Records write value. 28 | */ 29 | - (void)writePropertyValue:(id)aValue; 30 | 31 | /** 32 | Records to value update. 33 | */ 34 | - (void)updateToValue:(id)aValue; 35 | 36 | /** 37 | @abstract Records from value update. 38 | */ 39 | - (void)updateFromValue:(id)aValue; 40 | 41 | /** 42 | @abstract Records from value update. 43 | */ 44 | - (void)updateVelocity:(id)aValue; 45 | 46 | /** 47 | @abstract Records bounciness update. 48 | */ 49 | - (void)updateBounciness:(float)aFloat; 50 | 51 | /** 52 | @abstract Records speed update. 53 | */ 54 | - (void)updateSpeed:(float)aFloat; 55 | 56 | /** 57 | @abstract Records friction update. 58 | */ 59 | - (void)updateFriction:(float)aFloat; 60 | 61 | /** 62 | @abstract Records mass update. 63 | */ 64 | - (void)updateMass:(float)aFloat; 65 | 66 | /** 67 | @abstract Records tension update. 68 | */ 69 | - (void)updateTension:(float)aFloat; 70 | 71 | /** 72 | @abstract Records did add. 73 | */ 74 | - (void)didAdd; 75 | 76 | /** 77 | @abstract Records did start. 78 | */ 79 | - (void)didStart; 80 | 81 | /** 82 | @abstract Records did stop. 83 | */ 84 | - (void)didStop:(BOOL)finished; 85 | 86 | /** 87 | @abstract Records did reach to value. 88 | */ 89 | - (void)didReachToValue:(id)aValue; 90 | 91 | /** 92 | @abstract Records when an autoreverse animation takes place. 93 | */ 94 | - (void)autoreversed; 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimatorPrivate.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @class POPAnimation; 13 | 14 | @protocol POPAnimatorObserving 15 | @required 16 | 17 | /** 18 | @abstract Called on each observer after animator has advanced. Core Animation actions are disabled by default. 19 | */ 20 | - (void)animatorDidAnimate:(POPAnimator *)animator; 21 | 22 | @end 23 | 24 | @interface POPAnimator () 25 | 26 | #if !TARGET_OS_IPHONE 27 | /** 28 | Determines whether or not to use a high priority background thread for animation updates. Using a background thread can result in faster, more responsive updates, but may be less compatible. Defaults to YES. 29 | */ 30 | + (BOOL)disableBackgroundThread; 31 | + (void)setDisableBackgroundThread:(BOOL)flag; 32 | #endif 33 | 34 | /** 35 | Used for externally driven animator instances. 36 | */ 37 | @property (assign, nonatomic) BOOL disableDisplayLink; 38 | 39 | /** 40 | Time used when starting animations. Defaults to 0 meaning current media time is used. Exposed for unit testing. 41 | */ 42 | @property (assign, nonatomic) CFTimeInterval beginTime; 43 | 44 | /** 45 | Exposed for unit testing. 46 | */ 47 | - (void)renderTime:(CFTimeInterval)time; 48 | 49 | /** 50 | Funnel methods for category additions. 51 | */ 52 | - (void)addAnimation:(POPAnimation *)anim forObject:(id)obj key:(NSString *)key; 53 | - (void)removeAllAnimationsForObject:(id)obj; 54 | - (void)removeAnimationForObject:(id)obj key:(NSString *)key; 55 | - (NSArray *)animationKeysForObject:(id)obj; 56 | - (POPAnimation *)animationForObject:(id)obj key:(NSString *)key; 57 | 58 | /** 59 | @abstract Add an animator observer. Observer will be notified of each subsequent animator advance until removal. 60 | */ 61 | - (void)addObserver:(id)observer; 62 | 63 | /** 64 | @abstract Remove an animator observer. 65 | */ 66 | - (void)removeObserver:(id)observer; 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/ImageView/ImageViewGroupViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageViewGroupViewController.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/7/7. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | private let reuseIdentifier = "customCell" 12 | class ImageViewGroupViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 13 | @IBOutlet weak var tableView: UITableView! 14 | let items = ["CircleImageView", "CircleProgressImageView"] 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | } 19 | 20 | // MARK: - TableView 21 | func numberOfSectionsInTableView(tableView: UITableView) -> Int { 22 | return items.count 23 | } 24 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 25 | return 1 26 | } 27 | func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 28 | switch section { 29 | case 0: 30 | return NSStringFromClass(CircleImageView) 31 | case 1: 32 | return NSStringFromClass(CircleProgressImageView) 33 | default: 34 | return "" 35 | } 36 | } 37 | func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 38 | let cellName = items[indexPath.section] 39 | if let view = NSBundle.mainBundle().loadNibNamed(cellName, owner: nil, options: nil)[0] as? UIView { 40 | return view.frame.height 41 | } else { 42 | return tableView.estimatedRowHeight 43 | } 44 | } 45 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 46 | if let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as? ViewCell { 47 | let cellName = items[indexPath.section] 48 | if let view = NSBundle.mainBundle().loadNibNamed(cellName, owner: nil, options: nil)[0] as? UIView { 49 | cell.configureCell(view) 50 | } 51 | return cell 52 | } else { 53 | return UITableViewCell() 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/SnapKit/Source/ViewController+SnapKit.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | 27 | /** 28 | Used to expose public API on view controllers 29 | */ 30 | public extension UIViewController { 31 | 32 | /// top layout guide top 33 | public var snp_topLayoutGuideTop: ConstraintItem { return ConstraintItem(object: self.topLayoutGuide, attributes: ConstraintAttributes.Top) } 34 | 35 | /// top layout guide bottom 36 | public var snp_topLayoutGuideBottom: ConstraintItem { return ConstraintItem(object: self.topLayoutGuide, attributes: ConstraintAttributes.Bottom) } 37 | 38 | /// bottom layout guide top 39 | public var snp_bottomLayoutGuideTop: ConstraintItem { return ConstraintItem(object: self.bottomLayoutGuide, attributes: ConstraintAttributes.Top) } 40 | 41 | /// bottom layout guide bottom 42 | public var snp_bottomLayoutGuideBottom: ConstraintItem { return ConstraintItem(object: self.bottomLayoutGuide, attributes: ConstraintAttributes.Bottom) } 43 | 44 | } 45 | #endif 46 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/5/22. 6 | // Copyright © 2016年 LEE ZHE YU. 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: [NSObject: AnyObject]?) -> 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 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/WebCore/FloatConversion.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2007 Apple Inc. All rights reserved. 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions 6 | * are met: 7 | * 8 | * 1. Redistributions of source code must retain the above copyright 9 | * notice, this list of conditions and the following disclaimer. 10 | * 2. Redistributions in binary form must reproduce the above copyright 11 | * notice, this list of conditions and the following disclaimer in the 12 | * documentation and/or other materials provided with the distribution. 13 | * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14 | * its contributors may be used to endorse or promote products derived 15 | * from this software without specific prior written permission. 16 | * 17 | * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | */ 28 | 29 | #ifndef FloatConversion_h 30 | #define FloatConversion_h 31 | 32 | #include 33 | 34 | namespace WebCore { 35 | 36 | template 37 | float narrowPrecisionToFloat(T); 38 | 39 | template<> 40 | inline float narrowPrecisionToFloat(double number) 41 | { 42 | return static_cast(number); 43 | } 44 | 45 | template 46 | CGFloat narrowPrecisionToCGFloat(T); 47 | 48 | template<> 49 | inline CGFloat narrowPrecisionToCGFloat(double number) 50 | { 51 | return static_cast(number); 52 | } 53 | 54 | } // namespace WebCore 55 | 56 | #endif // FloatConversion_h 57 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/SnapKit/Source/LayoutConstraint.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | /** 31 | Used to add extra information to the actual `NSLayoutConstraint`'s that will UIKit/AppKit will utilize 32 | */ 33 | public class LayoutConstraint: NSLayoutConstraint { 34 | 35 | internal var snp_constraint: Constraint? = nil 36 | 37 | } 38 | 39 | internal func ==(left: LayoutConstraint, right: LayoutConstraint) -> Bool { 40 | if left.firstItem !== right.firstItem { 41 | return false 42 | } 43 | if left.secondItem !== right.secondItem { 44 | return false 45 | } 46 | if left.firstAttribute != right.firstAttribute { 47 | return false 48 | } 49 | if left.secondAttribute != right.secondAttribute { 50 | return false 51 | } 52 | if left.relation != right.relation { 53 | return false 54 | } 55 | if left.priority != right.priority { 56 | return false 57 | } 58 | if left.multiplier != right.multiplier { 59 | return false 60 | } 61 | return true 62 | } 63 | 64 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Button/ButtonGroupViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ButtonGroup.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/5/23. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | private let reuseIdentifier = "customCell" 12 | class ButtonGroupViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 13 | @IBOutlet weak var tableView: UITableView! 14 | let items = ["StyleButtonView", "ToggleButtonView"] 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | } 19 | 20 | // MARK: - TableView 21 | func numberOfSectionsInTableView(tableView: UITableView) -> Int { 22 | return items.count 23 | } 24 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 25 | return 1 26 | } 27 | func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 28 | switch section { 29 | case 0: 30 | return NSStringFromClass(StyleButton) 31 | case 1: 32 | return NSStringFromClass(ToggleButton) 33 | default: 34 | return "" 35 | } 36 | } 37 | func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 38 | let cellName = items[indexPath.section] 39 | if let view = NSBundle.mainBundle().loadNibNamed(cellName, owner: nil, options: nil)[0] as? UIView { 40 | return view.frame.height 41 | } else { 42 | return tableView.estimatedRowHeight 43 | } 44 | } 45 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 46 | if let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as? ViewCell { 47 | let cellName = items[indexPath.section] 48 | if let view = NSBundle.mainBundle().loadNibNamed(cellName, owner: nil, options: nil)[0] as? UIView { 49 | cell.configureCell(view) 50 | } 51 | return cell 52 | } else { 53 | return UITableViewCell() 54 | } 55 | } 56 | } 57 | 58 | class ViewCell: UITableViewCell { 59 | func configureCell(view: UIView) { 60 | view.frame = self.contentView.frame 61 | self.contentView.addSubview(view) 62 | } 63 | } -------------------------------------------------------------------------------- /BunbunuCustom/Pods/SnapKit/Source/ConstraintItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-2015 SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | /** 31 | Used to assist in building a constraint 32 | */ 33 | public class ConstraintItem { 34 | 35 | internal init(object: AnyObject?, attributes: ConstraintAttributes) { 36 | self.object = object 37 | self.attributes = attributes 38 | } 39 | 40 | internal weak var object: AnyObject? 41 | internal var attributes: ConstraintAttributes 42 | 43 | internal var view: View? { 44 | return self.object as? View 45 | } 46 | 47 | @available(iOS 7.0, *) 48 | internal var layoutSupport: LayoutSupport? { 49 | return self.object as? LayoutSupport 50 | } 51 | } 52 | 53 | 54 | internal func ==(left: ConstraintItem, right: ConstraintItem) -> Bool { 55 | if left.object == nil { 56 | return false 57 | } 58 | if right.object == nil { 59 | return false 60 | } 61 | if left.object !== right.object { 62 | return false 63 | } 64 | if left.attributes != right.attributes { 65 | return false 66 | } 67 | return true 68 | } -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPBasicAnimation.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | /** 13 | @abstract A concrete basic animation class. 14 | @discussion Animation is achieved through interpolation. 15 | */ 16 | @interface POPBasicAnimation : POPPropertyAnimation 17 | 18 | /** 19 | @abstract The designated initializer. 20 | @returns An instance of a basic animation. 21 | */ 22 | + (instancetype)animation; 23 | 24 | /** 25 | @abstract Convenience initializer that returns an animation with animatable property of name. 26 | @param name The name of the animatable property. 27 | @returns An instance of a basic animation configured with specified animatable property. 28 | */ 29 | + (instancetype)animationWithPropertyNamed:(NSString *)name; 30 | 31 | /** 32 | @abstract Convenience constructor. 33 | @returns Returns a basic animation with kCAMediaTimingFunctionDefault timing function. 34 | */ 35 | + (instancetype)defaultAnimation; 36 | 37 | /** 38 | @abstract Convenience constructor. 39 | @returns Returns a basic animation with kCAMediaTimingFunctionLinear timing function. 40 | */ 41 | + (instancetype)linearAnimation; 42 | 43 | /** 44 | @abstract Convenience constructor. 45 | @returns Returns a basic animation with kCAMediaTimingFunctionEaseIn timing function. 46 | */ 47 | + (instancetype)easeInAnimation; 48 | 49 | /** 50 | @abstract Convenience constructor. 51 | @returns Returns a basic animation with kCAMediaTimingFunctionEaseOut timing function. 52 | */ 53 | + (instancetype)easeOutAnimation; 54 | 55 | /** 56 | @abstract Convenience constructor. 57 | @returns Returns a basic animation with kCAMediaTimingFunctionEaseInEaseOut timing function. 58 | */ 59 | + (instancetype)easeInEaseOutAnimation; 60 | 61 | /** 62 | @abstract The duration in seconds. Defaults to 0.4. 63 | */ 64 | @property (assign, nonatomic) CFTimeInterval duration; 65 | 66 | /** 67 | @abstract A timing function defining the pacing of the animation. Defaults to nil indicating pacing according to kCAMediaTimingFunctionDefault. 68 | */ 69 | @property (strong, nonatomic) CAMediaTimingFunction *timingFunction; 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/ImageView/CircleImageView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CircleImageView.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/7/7. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @IBDesignable 12 | class CircleImageView: UIView { 13 | var imgRatio: CGFloat = 1 14 | var imgSize = CGSizeZero 15 | @IBInspectable var image: UIImage? { 16 | didSet { 17 | if let w = image?.size.width, let h = image?.size.height { 18 | imgRatio = w / h 19 | imgSize = CGSize(width: w, height: h) 20 | } 21 | self.setNeedsDisplay() 22 | } 23 | } 24 | 25 | override func drawRect(rect: CGRect) { 26 | var size = CGSize(width: imgSize.width, height: imgSize.height) 27 | var imgRect = CGRect(x: 0, y: 0, width: rect.width, height: rect.height) 28 | 29 | let rectRatio = rect.width / rect.height 30 | switch contentMode { 31 | case .ScaleAspectFill: 32 | if rectRatio > imgRatio { 33 | size = CGSize(width: rect.width, height: rect.width / imgRatio) 34 | imgRect = CGRect(x: 0, y: (rect.height - size.height) / 2, width: size.width, height: size.height) 35 | } else { 36 | size = CGSize(width: rect.height * imgRatio, height: rect.height) 37 | imgRect = CGRect(x: (rect.width - size.width) / 2, y: 0, width: size.width, height: size.height) 38 | } 39 | case .ScaleAspectFit: 40 | if rectRatio > imgRatio { 41 | size = CGSize(width: rect.height * imgRatio, height: rect.height) 42 | imgRect = CGRect(x: (rect.width - size.width) / 2, y: 0, width: size.width, height: size.height) 43 | } else { 44 | size = CGSize(width: rect.width, height: rect.width / imgRatio) 45 | imgRect = CGRect(x: 0, y: (rect.height - size.height) / 2, width: size.width, height: size.height) 46 | } 47 | default: 48 | break 49 | } 50 | image?.drawInRect(imgRect) 51 | 52 | let circleShapeLayer = CAShapeLayer() 53 | circleShapeLayer.path = UIBezierPath(ovalInRect: rect).CGPath 54 | self.layer.mask = circleShapeLayer 55 | } 56 | 57 | override var contentMode: UIViewContentMode { 58 | didSet { 59 | self.setNeedsDisplay() 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPMath.mm: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPMath.h" 11 | 12 | #import "POPAnimationPrivate.h" 13 | #import "UnitBezier.h" 14 | 15 | void POPInterpolateVector(NSUInteger count, CGFloat *dst, const CGFloat *from, const CGFloat *to, CGFloat f) 16 | { 17 | for (NSUInteger idx = 0; idx < count; idx++) { 18 | dst[idx] = MIX(from[idx], to[idx], f); 19 | } 20 | } 21 | 22 | double POPTimingFunctionSolve(const double vec[4], double t, double eps) 23 | { 24 | WebCore::UnitBezier bezier(vec[0], vec[1], vec[2], vec[3]); 25 | return bezier.solve(t, eps); 26 | } 27 | 28 | double POPNormalize(double value, double startValue, double endValue) 29 | { 30 | return (value - startValue) / (endValue - startValue); 31 | } 32 | 33 | double POPProjectNormal(double n, double start, double end) 34 | { 35 | return start + (n * (end - start)); 36 | } 37 | 38 | static double linear_interpolation(double t, double start, double end) 39 | { 40 | return t * end + (1.f - t) * start; 41 | } 42 | 43 | double POPQuadraticOutInterpolation(double t, double start, double end) 44 | { 45 | return linear_interpolation(2*t - t*t, start, end); 46 | } 47 | 48 | static double b3_friction1(double x) 49 | { 50 | return (0.0007 * pow(x, 3)) - (0.031 * pow(x, 2)) + 0.64 * x + 1.28; 51 | } 52 | 53 | static double b3_friction2(double x) 54 | { 55 | return (0.000044 * pow(x, 3)) - (0.006 * pow(x, 2)) + 0.36 * x + 2.; 56 | } 57 | 58 | static double b3_friction3(double x) 59 | { 60 | return (0.00000045 * pow(x, 3)) - (0.000332 * pow(x, 2)) + 0.1078 * x + 5.84; 61 | } 62 | 63 | double POPBouncy3NoBounce(double tension) 64 | { 65 | double friction = 0; 66 | if (tension <= 18.) { 67 | friction = b3_friction1(tension); 68 | } else if (tension > 18 && tension <= 44) { 69 | friction = b3_friction2(tension); 70 | } else if (tension > 44) { 71 | friction = b3_friction3(tension); 72 | } else { 73 | assert(false); 74 | } 75 | return friction; 76 | } 77 | 78 | void POPQuadraticSolve(CGFloat a, CGFloat b, CGFloat c, CGFloat &x1, CGFloat &x2) 79 | { 80 | CGFloat discriminant = sqrt(b * b - 4 * a * c); 81 | x1 = (-b + discriminant) / (2 * a); 82 | x2 = (-b - discriminant) / (2 * a); 83 | } 84 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPDecayAnimation.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | /** 13 | @abstract A concrete decay animation class. 14 | @discussion Animation is achieved through gradual decay of animation value. 15 | */ 16 | @interface POPDecayAnimation : POPPropertyAnimation 17 | 18 | /** 19 | @abstract The designated initializer. 20 | @returns An instance of a decay animation. 21 | */ 22 | + (instancetype)animation; 23 | 24 | /** 25 | @abstract Convenience initializer that returns an animation with animatable property of name. 26 | @param name The name of the animatable property. 27 | @returns An instance of a decay animation configured with specified animatable property. 28 | */ 29 | + (instancetype)animationWithPropertyNamed:(NSString *)name; 30 | 31 | /** 32 | @abstract The current velocity value. 33 | @discussion Set before animation start to account for initial velocity. Expressed in change of value units per second. The only POPValueTypes supported for velocity are: kPOPValuePoint, kPOPValueInteger, kPOPValueFloat, kPOPValueRect, and kPOPValueSize. 34 | */ 35 | @property (copy, nonatomic) id velocity; 36 | 37 | /** 38 | @abstract The original velocity value. 39 | @discussion Since the velocity property is modified as the animation progresses, this property stores the original, passed in velocity to support autoreverse and repeatCount. 40 | */ 41 | @property (copy, nonatomic, readonly) id originalVelocity; 42 | 43 | /** 44 | @abstract The deceleration factor. 45 | @discussion Values specifies should be in the range [0, 1]. Lower values results in faster deceleration. Defaults to 0.998. 46 | */ 47 | @property (assign, nonatomic) CGFloat deceleration; 48 | 49 | /** 50 | @abstract The expected duration. 51 | @discussion Derived based on input velocity and deceleration values. 52 | */ 53 | @property (readonly, assign, nonatomic) CFTimeInterval duration; 54 | 55 | /** 56 | The to value is derived based on input velocity and deceleration. 57 | */ 58 | - (void)setToValue:(id)toValue NS_UNAVAILABLE; 59 | 60 | /** 61 | @abstract The reversed velocity. 62 | @discussion The reversed velocity based on the originalVelocity when the animation was set up. 63 | */ 64 | - (id)reversedVelocity; 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPPropertyAnimation.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | #import 12 | 13 | /** 14 | @abstract Flags for clamping animation values. 15 | @discussion Animation values can optionally be clamped to avoid overshoot. kPOPAnimationClampStart ensures values are more than fromValue and kPOPAnimationClampEnd ensures values are less than toValue. 16 | */ 17 | typedef NS_OPTIONS(NSUInteger, POPAnimationClampFlags) 18 | { 19 | kPOPAnimationClampNone = 0, 20 | kPOPAnimationClampStart = 1UL << 0, 21 | kPOPAnimationClampEnd = 1UL << 1, 22 | kPOPAnimationClampBoth = kPOPAnimationClampStart | kPOPAnimationClampEnd, 23 | }; 24 | 25 | /** 26 | @abstract The semi-concrete property animation subclass. 27 | */ 28 | @interface POPPropertyAnimation : POPAnimation 29 | 30 | /** 31 | @abstract The property to animate. 32 | */ 33 | @property (strong, nonatomic) POPAnimatableProperty *property; 34 | 35 | /** 36 | @abstract The value to animate from. 37 | @discussion The value type should match the property. If unspecified, the value is initialized to the object's current value on animation start. 38 | */ 39 | @property (copy, nonatomic) id fromValue; 40 | 41 | /** 42 | @abstract The value to animate to. 43 | @discussion The value type should match the property. If unspecified, the value is initialized to the object's current value on animation start. 44 | */ 45 | @property (copy, nonatomic) id toValue; 46 | 47 | /** 48 | @abstract The rounding factor applied to the current animated value. 49 | @discussion Specify 1.0 to animate between integral values. Defaults to 0 meaning no rounding. 50 | */ 51 | @property (assign, nonatomic) CGFloat roundingFactor; 52 | 53 | /** 54 | @abstract The clamp mode applied to the current animated value. 55 | @discussion See {@ref POPAnimationClampFlags} for possible values. Defaults to kPOPAnimationClampNone. 56 | */ 57 | @property (assign, nonatomic) NSUInteger clampMode; 58 | 59 | /** 60 | @abstract The flag indicating whether values should be "added" each frame, rather than set. 61 | @discussion Addition may be type dependent. Defaults to NO. 62 | */ 63 | @property (assign, nonatomic, getter = isAdditive) BOOL additive; 64 | 65 | @end 66 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPGeometry.mm: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPGeometry.h" 11 | 12 | #if !TARGET_OS_IPHONE 13 | @implementation NSValue (POP) 14 | 15 | + (NSValue *)valueWithCGPoint:(CGPoint)point { 16 | return [NSValue valueWithBytes:&point objCType:@encode(CGPoint)]; 17 | } 18 | 19 | + (NSValue *)valueWithCGSize:(CGSize)size { 20 | return [NSValue valueWithBytes:&size objCType:@encode(CGSize)]; 21 | } 22 | 23 | + (NSValue *)valueWithCGRect:(CGRect)rect { 24 | return [NSValue valueWithBytes:&rect objCType:@encode(CGRect)]; 25 | } 26 | 27 | + (NSValue *)valueWithCFRange:(CFRange)range { 28 | return [NSValue valueWithBytes:&range objCType:@encode(CFRange)]; 29 | } 30 | 31 | + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform 32 | { 33 | return [NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)]; 34 | } 35 | 36 | - (CGPoint)CGPointValue { 37 | CGPoint result; 38 | [self getValue:&result]; 39 | return result; 40 | } 41 | 42 | - (CGSize)CGSizeValue { 43 | CGSize result; 44 | [self getValue:&result]; 45 | return result; 46 | } 47 | 48 | - (CGRect)CGRectValue { 49 | CGRect result; 50 | [self getValue:&result]; 51 | return result; 52 | } 53 | 54 | - (CFRange)CFRangeValue { 55 | CFRange result; 56 | [self getValue:&result]; 57 | return result; 58 | } 59 | 60 | - (CGAffineTransform)CGAffineTransformValue { 61 | CGAffineTransform result; 62 | [self getValue:&result]; 63 | return result; 64 | } 65 | @end 66 | 67 | #endif 68 | 69 | #if TARGET_OS_IPHONE 70 | #import "POPDefines.h" 71 | 72 | #if SCENEKIT_SDK_AVAILABLE 73 | #import 74 | 75 | /** 76 | Dirty hacks because iOS is weird and decided to define both SCNVector3's and SCNVector4's objCType as "t". However @encode(SCNVector3) and @encode(SCNVector4) both return the proper definition ("{SCNVector3=fff}" and "{SCNVector4=ffff}" respectively) 77 | 78 | [[NSValue valueWithSCNVector3:SCNVector3Make(0.0, 0.0, 0.0)] objcType] returns "t", whereas it should return "{SCNVector3=fff}". 79 | 80 | *flips table* 81 | */ 82 | @implementation NSValue (SceneKitFixes) 83 | 84 | + (NSValue *)valueWithSCNVector3:(SCNVector3)vec3 { 85 | return [NSValue valueWithBytes:&vec3 objCType:@encode(SCNVector3)]; 86 | } 87 | 88 | + (NSValue *)valueWithSCNVector4:(SCNVector4)vec4 { 89 | return [NSValue valueWithBytes:&vec4 objCType:@encode(SCNVector4)]; 90 | } 91 | 92 | @end 93 | #endif 94 | #endif 95 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustomTests/BunbunuCustomTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BunbunuCustomTests.swift 3 | // BunbunuCustomTests 4 | // 5 | // Created by LEE ZHE YU on 2016/5/23. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | @testable import BunbunuCustom 10 | import XCTest 11 | 12 | class BunbunuCustomTests: XCTestCase { 13 | var vc: ViewController? 14 | var buttonGroup: ButtonGroupViewController? 15 | var imageViewGroup: ImageViewGroupViewController? 16 | let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 17 | override func setUp() { 18 | super.setUp() 19 | if let rootVC = storyboard.instantiateInitialViewController() as? UINavigationController { 20 | if let vc = rootVC.viewControllers.first as? ViewController { 21 | self.vc = vc 22 | } 23 | } 24 | } 25 | 26 | override func tearDown() { 27 | super.tearDown() 28 | } 29 | 30 | func testViewControllerIdentifier() { 31 | guard let vc = vc else { 32 | XCTFail("Menu ViewController Nil") 33 | return 34 | } 35 | for identifier in vc.menu { 36 | if identifier.containsString("Button") { 37 | XCTAssertTrue(vc.menu.contains(identifier), "menu doesn'e include ButtonGroup") 38 | buttonGroup = storyboard.instantiateViewControllerWithIdentifier(identifier) as? ButtonGroupViewController 39 | XCTAssertNotNil(buttonGroup, "buttonGroup is Nil") 40 | } 41 | if identifier.containsString("ImageView") { 42 | XCTAssertTrue(vc.menu.contains(identifier), "menu doesn'e include ImageView") 43 | imageViewGroup = storyboard.instantiateViewControllerWithIdentifier(identifier) as? ImageViewGroupViewController 44 | XCTAssertNotNil(imageViewGroup, "ImageView is Nil") 45 | } 46 | } 47 | } 48 | 49 | func testButtonGroupViewIdentifier() { 50 | guard let vc = buttonGroup else { 51 | return 52 | } 53 | for identifer in vc.items { 54 | XCTAssertNotNil(NSBundle.mainBundle().loadNibNamed(identifer, owner: nil, options: nil)[0] as? UIView) 55 | } 56 | } 57 | 58 | func testImageViewGroupViewIdentifier() { 59 | guard let vc = imageViewGroup else { 60 | return 61 | } 62 | for identifer in vc.items { 63 | XCTAssertNotNil(NSBundle.mainBundle().loadNibNamed(identifer, owner: nil, options: nil)[0] as? UIView) 64 | } 65 | } 66 | 67 | func testPerformanceExample() { 68 | // This is an example of a performance test case. 69 | self.measureBlock { 70 | // Put the code you want to measure the time of here. 71 | } 72 | } 73 | 74 | } 75 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPSpringAnimation.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | /** 13 | @abstract A concrete spring animation class. 14 | @discussion Animation is achieved through modeling spring dynamics. 15 | */ 16 | @interface POPSpringAnimation : POPPropertyAnimation 17 | 18 | /** 19 | @abstract The designated initializer. 20 | @returns An instance of a spring animation. 21 | */ 22 | + (instancetype)animation; 23 | 24 | /** 25 | @abstract Convenience initializer that returns an animation with animatable property of name. 26 | @param name The name of the animatable property. 27 | @returns An instance of a spring animation configured with specified animatable property. 28 | */ 29 | + (instancetype)animationWithPropertyNamed:(NSString *)name; 30 | 31 | /** 32 | @abstract The current velocity value. 33 | @discussion Set before animation start to account for initial velocity. Expressed in change of value units per second. 34 | */ 35 | @property (copy, nonatomic) id velocity; 36 | 37 | /** 38 | @abstract The effective bounciness. 39 | @discussion Use in conjunction with 'springSpeed' to change animation effect. Values are converted into corresponding dynamics constants. Higher values increase spring movement range resulting in more oscillations and springiness. Defined as a value in the range [0, 20]. Defaults to 4. 40 | */ 41 | @property (assign, nonatomic) CGFloat springBounciness; 42 | 43 | /** 44 | @abstract The effective speed. 45 | @discussion Use in conjunction with 'springBounciness' to change animation effect. Values are converted into corresponding dynamics constants. Higher values increase the dampening power of the spring resulting in a faster initial velocity and more rapid bounce slowdown. Defined as a value in the range [0, 20]. Defaults to 12. 46 | */ 47 | @property (assign, nonatomic) CGFloat springSpeed; 48 | 49 | /** 50 | @abstract The tension used in the dynamics simulation. 51 | @discussion Can be used over bounciness and speed for finer grain tweaking of animation effect. 52 | */ 53 | @property (assign, nonatomic) CGFloat dynamicsTension; 54 | 55 | /** 56 | @abstract The friction used in the dynamics simulation. 57 | @discussion Can be used over bounciness and speed for finer grain tweaking of animation effect. 58 | */ 59 | @property (assign, nonatomic) CGFloat dynamicsFriction; 60 | 61 | /** 62 | @abstract The mass used in the dynamics simulation. 63 | @discussion Can be used over bounciness and speed for finer grain tweaking of animation effect. 64 | */ 65 | @property (assign, nonatomic) CGFloat dynamicsMass; 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/ImageView/CircleImageView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/ImageView/CirclePregressDemoView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CirclePregressDemoView.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/7/7. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CirclePregressDemoView: UIView { 12 | @IBOutlet weak var progressLabel: UILabel! 13 | @IBOutlet weak var statusLabel: UILabel! 14 | @IBOutlet weak var demoCircleProgressImageView: CircleProgressImageView! 15 | 16 | let progress = NSProgress(totalUnitCount: 100) 17 | 18 | override func awakeFromNib() { 19 | demoCircleProgressImageView.completion = { 20 | let alertVC = UIAlertController(title: "INFO", message: "SUCCEED", preferredStyle: UIAlertControllerStyle.Alert) 21 | alertVC.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil)) 22 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(500 * NSEC_PER_MSEC)), dispatch_get_main_queue(), { 23 | UIViewController.currentViewController().presentViewController(alertVC, animated: true, completion: nil) 24 | }) 25 | } 26 | demoCircleProgressImageView.failure = { 27 | let alertVC = UIAlertController(title: "INFO", message: "FAILED", preferredStyle: UIAlertControllerStyle.Alert) 28 | alertVC.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil)) 29 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(500 * NSEC_PER_MSEC)), dispatch_get_main_queue(), { 30 | UIViewController.currentViewController().presentViewController(alertVC, animated: true, completion: nil) 31 | }) 32 | } 33 | } 34 | @IBAction func succeedAction(sender: AnyObject) { 35 | statusLabel.text = "Succeed" 36 | demoCircleProgressImageView.progressSucceed() 37 | } 38 | @IBAction func failedAction(sender: AnyObject) { 39 | statusLabel.text = "Failed" 40 | progress.completedUnitCount = 0 41 | progressLabel.text = "\(progress.completedUnitCount)" 42 | demoCircleProgressImageView.progressFailed() 43 | } 44 | @IBAction func resetAction(sender: AnyObject) { 45 | demoCircleProgressImageView.image = UIImage(named: "app_icon_60") 46 | statusLabel.text = "Normal" 47 | progress.completedUnitCount = 0 48 | progressLabel.text = "\(progress.completedUnitCount)" 49 | demoCircleProgressImageView.resetProgress() 50 | } 51 | @IBAction func startAction(sender: AnyObject) { 52 | if statusLabel.text != "Succeed" { 53 | statusLabel.text = "InProgress" 54 | } 55 | progress.completedUnitCount += 33 56 | if progress.completedUnitCount > 100 { 57 | progress.completedUnitCount = 100 58 | } 59 | progressLabel.text = "\(progress.completedUnitCount)" 60 | demoCircleProgressImageView.progress = progress 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimationRuntime.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import 13 | 14 | #import "POPVector.h" 15 | 16 | enum POPValueType 17 | { 18 | kPOPValueUnknown = 0, 19 | kPOPValueInteger, 20 | kPOPValueFloat, 21 | kPOPValuePoint, 22 | kPOPValueSize, 23 | kPOPValueRect, 24 | kPOPValueEdgeInsets, 25 | kPOPValueAffineTransform, 26 | kPOPValueTransform, 27 | kPOPValueRange, 28 | kPOPValueColor, 29 | kPOPValueSCNVector3, 30 | kPOPValueSCNVector4, 31 | }; 32 | 33 | using namespace POP; 34 | 35 | /** 36 | Returns value type based on objc type description, given list of supported value types and length. 37 | */ 38 | extern POPValueType POPSelectValueType(const char *objctype, const POPValueType *types, size_t length); 39 | 40 | /** 41 | Returns value type based on objc object, given a list of supported value types and length. 42 | */ 43 | extern POPValueType POPSelectValueType(id obj, const POPValueType *types, size_t length); 44 | 45 | /** 46 | Array of all value types. 47 | */ 48 | extern const POPValueType kPOPAnimatableAllTypes[12]; 49 | 50 | /** 51 | Array of all value types supported for animation. 52 | */ 53 | extern const POPValueType kPOPAnimatableSupportTypes[10]; 54 | 55 | /** 56 | Returns a string description of a value type. 57 | */ 58 | extern NSString *POPValueTypeToString(POPValueType t); 59 | 60 | /** 61 | Returns a mutable dictionary of weak pointer keys to weak pointer values. 62 | */ 63 | extern CFMutableDictionaryRef POPDictionaryCreateMutableWeakPointerToWeakPointer(NSUInteger capacity) CF_RETURNS_RETAINED; 64 | 65 | /** 66 | Returns a mutable dictionary of weak pointer keys to weak pointer values. 67 | */ 68 | extern CFMutableDictionaryRef POPDictionaryCreateMutableWeakPointerToStrongObject(NSUInteger capacity) CF_RETURNS_RETAINED; 69 | 70 | /** 71 | Box a vector. 72 | */ 73 | extern id POPBox(VectorConstRef vec, POPValueType type, bool force = false); 74 | 75 | /** 76 | Unbox a vector. 77 | */ 78 | extern VectorRef POPUnbox(id value, POPValueType &type, NSUInteger &count, bool validate); 79 | 80 | /** 81 | Read/write block typedefs for convenience. 82 | */ 83 | typedef void(^pop_animatable_read_block)(id obj, CGFloat *value); 84 | typedef void(^pop_animatable_write_block)(id obj, const CGFloat *value); 85 | 86 | /** 87 | Read object value and return a Vector4r. 88 | */ 89 | NS_INLINE Vector4r read_values(pop_animatable_read_block read, id obj, size_t count) 90 | { 91 | Vector4r vec = Vector4r::Zero(); 92 | if (0 == count) 93 | return vec; 94 | 95 | read(obj, vec.data()); 96 | 97 | return vec; 98 | } 99 | 100 | NS_INLINE NSString *POPStringFromBOOL(BOOL value) 101 | { 102 | return value ? @"YES" : @"NO"; 103 | } 104 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPBasicAnimation.mm: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPBasicAnimationInternal.h" 11 | 12 | @implementation POPBasicAnimation 13 | 14 | #undef __state 15 | #define __state ((POPBasicAnimationState *)_state) 16 | 17 | #pragma mark - Lifecycle 18 | 19 | + (instancetype)animation 20 | { 21 | return [[self alloc] init]; 22 | } 23 | 24 | + (instancetype)animationWithPropertyNamed:(NSString *)aName 25 | { 26 | POPBasicAnimation *anim = [self animation]; 27 | anim.property = [POPAnimatableProperty propertyWithName:aName]; 28 | return anim; 29 | } 30 | 31 | - (void)_initState 32 | { 33 | _state = new POPBasicAnimationState(self); 34 | } 35 | 36 | + (instancetype)linearAnimation 37 | { 38 | POPBasicAnimation *anim = [self animation]; 39 | anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 40 | return anim; 41 | } 42 | 43 | + (instancetype)easeInAnimation 44 | { 45 | POPBasicAnimation *anim = [self animation]; 46 | anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 47 | return anim; 48 | } 49 | 50 | + (instancetype)easeOutAnimation 51 | { 52 | POPBasicAnimation *anim = [self animation]; 53 | anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 54 | return anim; 55 | } 56 | 57 | + (instancetype)easeInEaseOutAnimation 58 | { 59 | POPBasicAnimation *anim = [self animation]; 60 | anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 61 | return anim; 62 | } 63 | 64 | + (instancetype)defaultAnimation 65 | { 66 | POPBasicAnimation *anim = [self animation]; 67 | anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]; 68 | return anim; 69 | } 70 | 71 | - (id)init 72 | { 73 | return [self _init]; 74 | } 75 | 76 | #pragma mark - Properties 77 | 78 | DEFINE_RW_PROPERTY(POPBasicAnimationState, duration, setDuration:, CFTimeInterval); 79 | DEFINE_RW_PROPERTY_OBJ(POPBasicAnimationState, timingFunction, setTimingFunction:, CAMediaTimingFunction*, __state->updatedTimingFunction();); 80 | 81 | #pragma mark - Utility 82 | 83 | - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug 84 | { 85 | [super _appendDescription:s debug:debug]; 86 | if (__state->duration) 87 | [s appendFormat:@"; duration = %f", __state->duration]; 88 | } 89 | 90 | @end 91 | 92 | @implementation POPBasicAnimation (NSCopying) 93 | 94 | - (instancetype)copyWithZone:(NSZone *)zone { 95 | 96 | POPBasicAnimation *copy = [super copyWithZone:zone]; 97 | 98 | if (copy) { 99 | copy.duration = self.duration; 100 | copy.timingFunction = self.timingFunction; // not a 'copy', but timing functions are publicly immutable. 101 | } 102 | 103 | return copy; 104 | } 105 | 106 | @end -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPBasicAnimationInternal.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPBasicAnimation.h" 11 | 12 | #import "POPPropertyAnimationInternal.h" 13 | 14 | // default animation duration 15 | static CGFloat const kPOPAnimationDurationDefault = 0.4; 16 | 17 | // progress threshold for computing done 18 | static CGFloat const kPOPProgressThreshold = 1e-6; 19 | 20 | static void interpolate(POPValueType valueType, NSUInteger count, const CGFloat *fromVec, const CGFloat *toVec, CGFloat *outVec, CGFloat p) 21 | { 22 | switch (valueType) { 23 | case kPOPValueInteger: 24 | case kPOPValueFloat: 25 | case kPOPValuePoint: 26 | case kPOPValueSize: 27 | case kPOPValueRect: 28 | case kPOPValueEdgeInsets: 29 | case kPOPValueColor: 30 | POPInterpolateVector(count, outVec, fromVec, toVec, p); 31 | break; 32 | default: 33 | NSCAssert(false, @"unhandled type %d", valueType); 34 | break; 35 | } 36 | } 37 | 38 | struct _POPBasicAnimationState : _POPPropertyAnimationState 39 | { 40 | CAMediaTimingFunction *timingFunction; 41 | double timingControlPoints[4]; 42 | CFTimeInterval duration; 43 | CFTimeInterval timeProgress; 44 | 45 | _POPBasicAnimationState(id __unsafe_unretained anim) : _POPPropertyAnimationState(anim), 46 | timingFunction(nil), 47 | timingControlPoints{0.}, 48 | duration(kPOPAnimationDurationDefault), 49 | timeProgress(0.) 50 | { 51 | type = kPOPAnimationBasic; 52 | } 53 | 54 | bool isDone() { 55 | if (_POPPropertyAnimationState::isDone()) { 56 | return true; 57 | } 58 | return timeProgress + kPOPProgressThreshold >= 1.; 59 | } 60 | 61 | void updatedTimingFunction() 62 | { 63 | float vec[4] = {0.}; 64 | [timingFunction getControlPointAtIndex:1 values:&vec[0]]; 65 | [timingFunction getControlPointAtIndex:2 values:&vec[2]]; 66 | for (NSUInteger idx = 0; idx < POP_ARRAY_COUNT(vec); idx++) { 67 | timingControlPoints[idx] = vec[idx]; 68 | } 69 | } 70 | 71 | bool advance(CFTimeInterval time, CFTimeInterval dt, id obj) { 72 | // default timing function 73 | if (!timingFunction) { 74 | ((POPBasicAnimation *)self).timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]; 75 | } 76 | 77 | // solve for normalized time, aka progresss [0, 1] 78 | CGFloat p = 1.0f; 79 | if (duration > 0.0f) { 80 | // cap local time to duration 81 | CFTimeInterval t = MIN(time - startTime, duration) / duration; 82 | p = POPTimingFunctionSolve(timingControlPoints, t, SOLVE_EPS(duration)); 83 | timeProgress = t; 84 | } else { 85 | timeProgress = 1.; 86 | } 87 | 88 | // interpolate and advance 89 | interpolate(valueType, valueCount, fromVec->data(), toVec->data(), currentVec->data(), p); 90 | progress = p; 91 | clampCurrentValue(); 92 | 93 | return true; 94 | } 95 | }; 96 | 97 | typedef struct _POPBasicAnimationState POPBasicAnimationState; 98 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimationEvent.mm: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPAnimationEvent.h" 11 | #import "POPAnimationEventInternal.h" 12 | 13 | static NSString *stringFromType(POPAnimationEventType aType) 14 | { 15 | switch (aType) { 16 | case kPOPAnimationEventPropertyRead: 17 | return @"read"; 18 | case kPOPAnimationEventPropertyWrite: 19 | return @"write"; 20 | case kPOPAnimationEventToValueUpdate: 21 | return @"toValue"; 22 | case kPOPAnimationEventFromValueUpdate: 23 | return @"fromValue"; 24 | case kPOPAnimationEventVelocityUpdate: 25 | return @"velocity"; 26 | case kPOPAnimationEventSpeedUpdate: 27 | return @"speed"; 28 | case kPOPAnimationEventBouncinessUpdate: 29 | return @"bounciness"; 30 | case kPOPAnimationEventFrictionUpdate: 31 | return @"friction"; 32 | case kPOPAnimationEventMassUpdate: 33 | return @"mass"; 34 | case kPOPAnimationEventTensionUpdate: 35 | return @"tension"; 36 | case kPOPAnimationEventDidStart: 37 | return @"didStart"; 38 | case kPOPAnimationEventDidStop: 39 | return @"didStop"; 40 | case kPOPAnimationEventDidReachToValue: 41 | return @"didReachToValue"; 42 | case kPOPAnimationEventAutoreversed: 43 | return @"autoreversed"; 44 | default: 45 | return nil; 46 | } 47 | } 48 | 49 | @implementation POPAnimationEvent 50 | @synthesize type = _type; 51 | @synthesize time = _time; 52 | @synthesize animationDescription = _animationDescription; 53 | 54 | - (instancetype)initWithType:(POPAnimationEventType)aType time:(CFTimeInterval)aTime 55 | { 56 | self = [super init]; 57 | if (nil != self) { 58 | _type = aType; 59 | _time = aTime; 60 | } 61 | return self; 62 | } 63 | 64 | - (NSString *)description 65 | { 66 | NSMutableString *s = [NSMutableString stringWithFormat:@""]; 69 | return s; 70 | } 71 | 72 | // subclass override 73 | - (void)_appendDescription:(NSMutableString *)s 74 | { 75 | if (0 != _animationDescription.length) { 76 | [s appendFormat:@"; animation = %@", _animationDescription]; 77 | } 78 | } 79 | 80 | @end 81 | 82 | @implementation POPAnimationValueEvent 83 | @synthesize value = _value; 84 | @synthesize velocity = _velocity; 85 | 86 | - (instancetype)initWithType:(POPAnimationEventType)aType time:(CFTimeInterval)aTime value:(id)aValue 87 | { 88 | self = [self initWithType:aType time:aTime]; 89 | if (nil != self) { 90 | _value = aValue; 91 | } 92 | return self; 93 | } 94 | 95 | - (void)_appendDescription:(NSMutableString *)s 96 | { 97 | [super _appendDescription:s]; 98 | 99 | if (nil != _value) { 100 | [s appendFormat:@"; value = %@", _value]; 101 | } 102 | 103 | if (nil != _velocity) { 104 | [s appendFormat:@"; velocity = %@", _velocity]; 105 | } 106 | } 107 | 108 | @end 109 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Button/ToggleButtonView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Button/ToggleButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FilterButton.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/5/23. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import UIColor_Hex_Swift 11 | 12 | private let unFlagBgColor = UIColor(rgba: "#dcdce4") 13 | private let flagBGColor = UIColor.whiteColor() 14 | private let unFlagBorderColor = UIColor.blackColor() 15 | private let flagBorderColor = UIColor(rgba: "#53BC4A") 16 | private let unFlagIconColor = UIColor(rgba: "#999999") 17 | private let flagIconColor = UIColor(rgba: "#53BC4A") 18 | 19 | @IBDesignable 20 | class ToggleButton: StyleButton { 21 | @IBInspectable var flag: Bool = false { 22 | didSet { 23 | self.borderColor = (flag ? flagBorderColor : unFlagBorderColor) 24 | self.bgColor = (flag ? flagBGColor : unFlagBgColor) 25 | self.setNeedsDisplay() 26 | } 27 | } 28 | 29 | convenience init(flag: Bool, icon: UIImage?, title: String, clickClosure: (() -> ())?) { 30 | self.init(borderWidth: 1, borderColor: (flag ? flagBorderColor : unFlagBorderColor), bgColor: (flag ? flagBGColor : unFlagBgColor), textColor: UIColor.blackColor(), highlightBorderColor: nil, highlightBgColor: nil, highlightTextColor: nil, disabledColor: UIColor.lightGrayColor(), cornerRadius: CornerRadiusIntensity.Quarter, clickClosure: clickClosure) 31 | self.clickClosure = clickClosure 32 | self.flag = flag 33 | self.iconImage = icon 34 | self.iconMargin = 24.0 35 | self.titleLabel?.font = UIFont.systemFontOfSize(15.0) 36 | self.setTitle(title, forState: .Normal) 37 | } 38 | 39 | override func clickEvent() { 40 | self.flag = !self.flag 41 | self.setNeedsDisplay() 42 | clickClosure?() 43 | } 44 | 45 | override func drawRect(rect: CGRect) { 46 | super.drawRect(rect) 47 | 48 | let flagIconSize = CGSizeMake(rect.size.height / 3, rect.size.height / 3) 49 | let flagIconMargin = (rect.height - flagIconSize.height) / 2 50 | let flagIconRect = CGRect(x: flagIconMargin, y: flagIconMargin, width: flagIconSize.width, height: flagIconSize.height) 51 | let flagIconPath = UIBezierPath() 52 | flagIconPath.lineCapStyle = CGLineCap.Round 53 | flagIconPath.lineWidth = 3 54 | if flag { 55 | flagIconColor.setStroke() 56 | flagIconPath.moveToPoint(CGPoint(x: CGRectGetMinX(flagIconRect), y: CGRectGetMinY(flagIconRect))) 57 | flagIconPath.addLineToPoint(CGPoint(x: CGRectGetMaxX(flagIconRect), y: CGRectGetMaxY(flagIconRect))) 58 | flagIconPath.moveToPoint(CGPoint(x: CGRectGetMaxX(flagIconRect), y: CGRectGetMinY(flagIconRect))) 59 | flagIconPath.addLineToPoint(CGPoint(x: CGRectGetMinX(flagIconRect), y: CGRectGetMaxY(flagIconRect))) 60 | } else { 61 | unFlagIconColor.setStroke() 62 | flagIconPath.moveToPoint(CGPoint(x: CGRectGetMidX(flagIconRect), y: CGRectGetMinY(flagIconRect))) 63 | flagIconPath.addLineToPoint(CGPoint(x: CGRectGetMidX(flagIconRect), y: CGRectGetMaxY(flagIconRect))) 64 | flagIconPath.moveToPoint(CGPoint(x: CGRectGetMinX(flagIconRect), y: CGRectGetMidY(flagIconRect))) 65 | flagIconPath.addLineToPoint(CGPoint(x: CGRectGetMaxX(flagIconRect), y: CGRectGetMidY(flagIconRect))) 66 | } 67 | flagIconPath.stroke() 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /BunbunuCustom/BunbunuCustom/Button/ToggleButtonView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FilterButtonView.swift 3 | // BunbunuCustom 4 | // 5 | // Created by LEE ZHE YU on 2016/5/23. 6 | // Copyright © 2016年 LEE ZHE YU. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | private let reuseIdentifier = "filterCell" 12 | class ToggleButtonView: UIView, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, ToggleButtonCellProtocol { 13 | @IBOutlet weak var collectionView: UICollectionView! 14 | var filterArray = [ 15 | ("icon_list_like", "LIKE", false), 16 | ("icon_list_web", "WEB", false), 17 | ("icon_list_text", "TEXT", false), 18 | ("icon_list_namecard", "NAME CARD", false), 19 | ("icon_list_position", "POSITION", false), 20 | ("icon_list_email", "E-MAIL", false), 21 | ("icon_list_sms", "SMS", false), 22 | ("icon_list_phone", "PHONE", false) 23 | ] 24 | 25 | override func awakeFromNib() { 26 | collectionView.registerClass(ToggleButtonCell.classForCoder(), forCellWithReuseIdentifier: reuseIdentifier) 27 | } 28 | 29 | // MARK: Delegate 30 | func chageFlagSatus(item: (String, String, Bool)) { 31 | filterArray = filterArray.map({ (icon: String, title: String, flag: Bool) -> (String, String, Bool) in 32 | var mapItem = (icon, title, flag) 33 | if title == item.1 { 34 | mapItem.2 = !flag 35 | } 36 | return mapItem 37 | }) 38 | } 39 | 40 | // MARK: UICollectionViewDelegateFlowLayout 41 | func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 42 | let (_, title, _) = filterArray[indexPath.row] 43 | let size = title.stringSize([NSFontAttributeName: UIFont.systemFontOfSize(15)], size: CGSizeZero) 44 | return CGSize(width: 60 + size.width, height: 44) 45 | } 46 | func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { 47 | return UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8) 48 | } 49 | 50 | // MARK: UICollectionViewDataSource 51 | func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 52 | return 1 53 | } 54 | func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 55 | return filterArray.count 56 | } 57 | func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 58 | if let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as? ToggleButtonCell { 59 | cell.configureCell(filterArray[indexPath.row]) 60 | cell.delegate = self 61 | return cell 62 | } else { 63 | return UICollectionViewCell() 64 | } 65 | } 66 | } 67 | 68 | protocol ToggleButtonCellProtocol: class { 69 | func chageFlagSatus(item: (String, String, Bool)) 70 | } 71 | class ToggleButtonCell: UICollectionViewCell { 72 | weak var delegate: ToggleButtonCellProtocol? 73 | func configureCell(item: (icon: String, title: String, flag: Bool)) { 74 | let size = item.title.stringSize([NSFontAttributeName: UIFont.systemFontOfSize(15)], size: CGSizeZero) 75 | let button = ToggleButton(flag: item.flag, icon: UIImage(named: item.icon), title: item.title) { 76 | self.delegate?.chageFlagSatus(item) 77 | } 78 | button.frame = CGRectMake(0, 7, 60 + size.width, 30) 79 | for v in self.contentView.subviews { 80 | v.removeFromSuperview() 81 | } 82 | self.contentView.addSubview(button) 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPPropertyAnimation.mm: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPPropertyAnimationInternal.h" 11 | 12 | @implementation POPPropertyAnimation 13 | 14 | #pragma mark - Lifecycle 15 | 16 | #undef __state 17 | #define __state ((POPPropertyAnimationState *)_state) 18 | 19 | - (void)_initState 20 | { 21 | _state = new POPPropertyAnimationState(self); 22 | } 23 | 24 | #pragma mark - Properties 25 | 26 | DEFINE_RW_FLAG(POPPropertyAnimationState, additive, isAdditive, setAdditive:); 27 | DEFINE_RW_PROPERTY(POPPropertyAnimationState, roundingFactor, setRoundingFactor:, CGFloat); 28 | DEFINE_RW_PROPERTY(POPPropertyAnimationState, clampMode, setClampMode:, NSUInteger); 29 | DEFINE_RW_PROPERTY_OBJ(POPPropertyAnimationState, property, setProperty:, POPAnimatableProperty*, ((POPPropertyAnimationState*)_state)->updatedDynamicsThreshold();); 30 | DEFINE_RW_PROPERTY_OBJ_COPY(POPPropertyAnimationState, progressMarkers, setProgressMarkers:, NSArray*, ((POPPropertyAnimationState*)_state)->updatedProgressMarkers();); 31 | 32 | - (id)fromValue 33 | { 34 | return POPBox(__state->fromVec, __state->valueType); 35 | } 36 | 37 | - (void)setFromValue:(id)aValue 38 | { 39 | POPPropertyAnimationState *s = __state; 40 | VectorRef vec = POPUnbox(aValue, s->valueType, s->valueCount, YES); 41 | if (!vec_equal(vec, s->fromVec)) { 42 | s->fromVec = vec; 43 | 44 | if (s->tracing) { 45 | [s->tracer updateFromValue:aValue]; 46 | } 47 | } 48 | } 49 | 50 | - (id)toValue 51 | { 52 | return POPBox(__state->toVec, __state->valueType); 53 | } 54 | 55 | - (void)setToValue:(id)aValue 56 | { 57 | POPPropertyAnimationState *s = __state; 58 | VectorRef vec = POPUnbox(aValue, s->valueType, s->valueCount, YES); 59 | 60 | if (!vec_equal(vec, s->toVec)) { 61 | s->toVec = vec; 62 | 63 | // invalidate to dependent state 64 | s->didReachToValue = false; 65 | s->distanceVec = NULL; 66 | 67 | if (s->tracing) { 68 | [s->tracer updateToValue:aValue]; 69 | } 70 | 71 | // automatically unpause active animations 72 | if (s->active && s->paused) { 73 | s->setPaused(false); 74 | } 75 | } 76 | } 77 | 78 | - (id)currentValue 79 | { 80 | return POPBox(__state->currentValue(), __state->valueType); 81 | } 82 | 83 | #pragma mark - Utility 84 | 85 | - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug 86 | { 87 | [s appendFormat:@"; from = %@; to = %@", describe(__state->fromVec), describe(__state->toVec)]; 88 | 89 | if (_state->active) 90 | [s appendFormat:@"; currentValue = %@", describe(__state->currentValue())]; 91 | 92 | if (__state->velocityVec && 0 != __state->velocityVec->norm()) 93 | [s appendFormat:@"; velocity = %@", describe(__state->velocityVec)]; 94 | 95 | if (!self.removedOnCompletion) 96 | [s appendFormat:@"; removedOnCompletion = %@", POPStringFromBOOL(self.removedOnCompletion)]; 97 | 98 | if (__state->progressMarkers) 99 | [s appendFormat:@"; progressMarkers = [%@]", [__state->progressMarkers componentsJoinedByString:@", "]]; 100 | 101 | if (_state->active) 102 | [s appendFormat:@"; progress = %f", __state->progress]; 103 | } 104 | 105 | @end 106 | 107 | @implementation POPPropertyAnimation (NSCopying) 108 | 109 | - (instancetype)copyWithZone:(NSZone *)zone { 110 | 111 | POPPropertyAnimation *copy = [super copyWithZone:zone]; 112 | 113 | if (copy) { 114 | copy.property = [self.property copyWithZone:zone]; 115 | copy.fromValue = self.fromValue; 116 | copy.toValue = self.toValue; 117 | copy.roundingFactor = self.roundingFactor; 118 | copy.clampMode = self.clampMode; 119 | copy.additive = self.additive; 120 | } 121 | 122 | return copy; 123 | } 124 | 125 | @end -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/WebCore/UnitBezier.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2008 Apple Inc. All Rights Reserved. 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions 6 | * are met: 7 | * 1. Redistributions of source code must retain the above copyright 8 | * notice, this list of conditions and the following disclaimer. 9 | * 2. Redistributions in binary form must reproduce the above copyright 10 | * notice, this list of conditions and the following disclaimer in the 11 | * documentation and/or other materials provided with the distribution. 12 | * 13 | * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 | * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | */ 25 | 26 | #ifndef UnitBezier_h 27 | #define UnitBezier_h 28 | 29 | #include 30 | 31 | namespace WebCore { 32 | 33 | struct UnitBezier { 34 | UnitBezier(double p1x, double p1y, double p2x, double p2y) 35 | { 36 | // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1). 37 | cx = 3.0 * p1x; 38 | bx = 3.0 * (p2x - p1x) - cx; 39 | ax = 1.0 - cx -bx; 40 | 41 | cy = 3.0 * p1y; 42 | by = 3.0 * (p2y - p1y) - cy; 43 | ay = 1.0 - cy - by; 44 | } 45 | 46 | double sampleCurveX(double t) 47 | { 48 | // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule. 49 | return ((ax * t + bx) * t + cx) * t; 50 | } 51 | 52 | double sampleCurveY(double t) 53 | { 54 | return ((ay * t + by) * t + cy) * t; 55 | } 56 | 57 | double sampleCurveDerivativeX(double t) 58 | { 59 | return (3.0 * ax * t + 2.0 * bx) * t + cx; 60 | } 61 | 62 | // Given an x value, find a parametric value it came from. 63 | double solveCurveX(double x, double epsilon) 64 | { 65 | double t0; 66 | double t1; 67 | double t2; 68 | double x2; 69 | double d2; 70 | int i; 71 | 72 | // First try a few iterations of Newton's method -- normally very fast. 73 | for (t2 = x, i = 0; i < 8; i++) { 74 | x2 = sampleCurveX(t2) - x; 75 | if (fabs (x2) < epsilon) 76 | return t2; 77 | d2 = sampleCurveDerivativeX(t2); 78 | if (fabs(d2) < 1e-6) 79 | break; 80 | t2 = t2 - x2 / d2; 81 | } 82 | 83 | // Fall back to the bisection method for reliability. 84 | t0 = 0.0; 85 | t1 = 1.0; 86 | t2 = x; 87 | 88 | if (t2 < t0) 89 | return t0; 90 | if (t2 > t1) 91 | return t1; 92 | 93 | while (t0 < t1) { 94 | x2 = sampleCurveX(t2); 95 | if (fabs(x2 - x) < epsilon) 96 | return t2; 97 | if (x > x2) 98 | t0 = t2; 99 | else 100 | t1 = t2; 101 | t2 = (t1 - t0) * .5 + t0; 102 | } 103 | 104 | // Failure. 105 | return t2; 106 | } 107 | 108 | double solve(double x, double epsilon) 109 | { 110 | return sampleCurveY(solveCurveX(x, epsilon)); 111 | } 112 | 113 | private: 114 | double ax; 115 | double bx; 116 | double cx; 117 | 118 | double ay; 119 | double by; 120 | double cy; 121 | }; 122 | } 123 | #endif 124 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPCGUtils.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #if TARGET_OS_IPHONE 13 | #import 14 | #else 15 | #import 16 | #endif 17 | 18 | #import "POPDefines.h" 19 | 20 | #if SCENEKIT_SDK_AVAILABLE 21 | #import 22 | #endif 23 | 24 | POP_EXTERN_C_BEGIN 25 | 26 | NS_INLINE CGPoint values_to_point(const CGFloat values[]) 27 | { 28 | return CGPointMake(values[0], values[1]); 29 | } 30 | 31 | NS_INLINE CGSize values_to_size(const CGFloat values[]) 32 | { 33 | return CGSizeMake(values[0], values[1]); 34 | } 35 | 36 | NS_INLINE CGRect values_to_rect(const CGFloat values[]) 37 | { 38 | return CGRectMake(values[0], values[1], values[2], values[3]); 39 | } 40 | 41 | #if SCENEKIT_SDK_AVAILABLE 42 | NS_INLINE SCNVector3 values_to_vec3(const CGFloat values[]) 43 | { 44 | return SCNVector3Make(values[0], values[1], values[2]); 45 | } 46 | 47 | NS_INLINE SCNVector4 values_to_vec4(const CGFloat values[]) 48 | { 49 | return SCNVector4Make(values[0], values[1], values[2], values[3]); 50 | } 51 | #endif 52 | 53 | #if TARGET_OS_IPHONE 54 | 55 | NS_INLINE UIEdgeInsets values_to_edge_insets(const CGFloat values[]) 56 | { 57 | return UIEdgeInsetsMake(values[0], values[1], values[2], values[3]); 58 | } 59 | 60 | #endif 61 | 62 | NS_INLINE void values_from_point(CGFloat values[], CGPoint p) 63 | { 64 | values[0] = p.x; 65 | values[1] = p.y; 66 | } 67 | 68 | NS_INLINE void values_from_size(CGFloat values[], CGSize s) 69 | { 70 | values[0] = s.width; 71 | values[1] = s.height; 72 | } 73 | 74 | NS_INLINE void values_from_rect(CGFloat values[], CGRect r) 75 | { 76 | values[0] = r.origin.x; 77 | values[1] = r.origin.y; 78 | values[2] = r.size.width; 79 | values[3] = r.size.height; 80 | } 81 | 82 | #if SCENEKIT_SDK_AVAILABLE 83 | NS_INLINE void values_from_vec3(CGFloat values[], SCNVector3 v) 84 | { 85 | values[0] = v.x; 86 | values[1] = v.y; 87 | values[2] = v.z; 88 | } 89 | 90 | NS_INLINE void values_from_vec4(CGFloat values[], SCNVector4 v) 91 | { 92 | values[0] = v.x; 93 | values[1] = v.y; 94 | values[2] = v.z; 95 | values[3] = v.w; 96 | } 97 | #endif 98 | 99 | #if TARGET_OS_IPHONE 100 | 101 | NS_INLINE void values_from_edge_insets(CGFloat values[], UIEdgeInsets i) 102 | { 103 | values[0] = i.top; 104 | values[1] = i.left; 105 | values[2] = i.bottom; 106 | values[3] = i.right; 107 | } 108 | 109 | #endif 110 | 111 | /** 112 | Takes a CGColorRef and converts it into RGBA components, if necessary. 113 | */ 114 | extern void POPCGColorGetRGBAComponents(CGColorRef color, CGFloat components[]); 115 | 116 | /** 117 | Takes RGBA components and returns a CGColorRef. 118 | */ 119 | extern CGColorRef POPCGColorRGBACreate(const CGFloat components[]) CF_RETURNS_RETAINED; 120 | 121 | /** 122 | Takes a color reference and returns a CGColor. 123 | */ 124 | extern CGColorRef POPCGColorWithColor(id color) CF_RETURNS_NOT_RETAINED; 125 | 126 | #if TARGET_OS_IPHONE 127 | 128 | /** 129 | Takes a UIColor and converts it into RGBA components, if necessary. 130 | */ 131 | extern void POPUIColorGetRGBAComponents(UIColor *color, CGFloat components[]); 132 | 133 | /** 134 | Takes RGBA components and returns a UIColor. 135 | */ 136 | extern UIColor *POPUIColorRGBACreate(const CGFloat components[]) NS_RETURNS_RETAINED; 137 | 138 | #else 139 | 140 | /** 141 | Takes a NSColor and converts it into RGBA components, if necessary. 142 | */ 143 | extern void POPNSColorGetRGBAComponents(NSColor *color, CGFloat components[]); 144 | 145 | /** 146 | Takes RGBA components and returns a NSColor. 147 | */ 148 | extern NSColor *POPNSColorRGBACreate(const CGFloat components[]) NS_RETURNS_RETAINED; 149 | 150 | #endif 151 | 152 | POP_EXTERN_C_END 153 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPSpringAnimationInternal.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "POPAnimationExtras.h" 13 | #import "POPPropertyAnimationInternal.h" 14 | 15 | struct _POPSpringAnimationState : _POPPropertyAnimationState 16 | { 17 | SpringSolver4d *solver; 18 | CGFloat springSpeed; 19 | CGFloat springBounciness; // normalized springiness 20 | CGFloat dynamicsTension; // tension 21 | CGFloat dynamicsFriction; // friction 22 | CGFloat dynamicsMass; // mass 23 | 24 | _POPSpringAnimationState(id __unsafe_unretained anim) : _POPPropertyAnimationState(anim), 25 | solver(nullptr), 26 | springSpeed(12.), 27 | springBounciness(4.), 28 | dynamicsTension(0), 29 | dynamicsFriction(0), 30 | dynamicsMass(0) 31 | { 32 | type = kPOPAnimationSpring; 33 | } 34 | 35 | bool hasConverged() 36 | { 37 | NSUInteger count = valueCount; 38 | if (shouldRound()) { 39 | return vec_equal(previous2Vec, previousVec) && vec_equal(previousVec, toVec); 40 | } else { 41 | if (!previousVec || !previous2Vec) 42 | return false; 43 | 44 | CGFloat t = dynamicsThreshold / 5; 45 | 46 | const CGFloat *toValues = toVec->data(); 47 | const CGFloat *previousValues = previousVec->data(); 48 | const CGFloat *previous2Values = previous2Vec->data(); 49 | 50 | for (NSUInteger idx = 0; idx < count; idx++) { 51 | if ((std::abs(toValues[idx] - previousValues[idx]) >= t) || (std::abs(previous2Values[idx] - previousValues[idx]) >= t)) { 52 | return false; 53 | } 54 | } 55 | return true; 56 | } 57 | } 58 | 59 | bool isDone() { 60 | if (_POPPropertyAnimationState::isDone()) { 61 | return true; 62 | } 63 | return solver->started() && (hasConverged() || solver->hasConverged()); 64 | } 65 | 66 | void updatedDynamics() 67 | { 68 | if (NULL != solver) { 69 | solver->setConstants(dynamicsTension, dynamicsFriction, dynamicsMass); 70 | } 71 | } 72 | 73 | void updatedDynamicsThreshold() 74 | { 75 | _POPPropertyAnimationState::updatedDynamicsThreshold(); 76 | if (NULL != solver) { 77 | solver->setThreshold(dynamicsThreshold); 78 | } 79 | } 80 | 81 | void updatedBouncinessAndSpeed() { 82 | [POPSpringAnimation convertBounciness:springBounciness speed:springSpeed toTension:&dynamicsTension friction:&dynamicsFriction mass:&dynamicsMass]; 83 | updatedDynamics(); 84 | } 85 | 86 | bool advance(CFTimeInterval time, CFTimeInterval dt, id obj) { 87 | // advance past not yet initialized animations 88 | if (NULL == currentVec) { 89 | return false; 90 | } 91 | 92 | CFTimeInterval localTime = time - startTime; 93 | 94 | Vector4d value = vector4d(currentVec); 95 | Vector4d toValue = vector4d(toVec); 96 | Vector4d velocity = vector4d(velocityVec); 97 | 98 | SSState4d state; 99 | state.p = toValue - value; 100 | 101 | // the solver assumes a spring of size zero 102 | // flip the velocity from user perspective to solver perspective 103 | state.v = velocity * -1; 104 | 105 | solver->advance(state, localTime, dt); 106 | value = toValue - state.p; 107 | 108 | // flip velocity back to user perspective 109 | velocity = state.v * -1; 110 | 111 | *currentVec = value; 112 | 113 | if (velocityVec) { 114 | *velocityVec = velocity; 115 | } 116 | 117 | clampCurrentValue(); 118 | 119 | return true; 120 | } 121 | 122 | virtual void reset(bool all) { 123 | _POPPropertyAnimationState::reset(all); 124 | 125 | if (solver) { 126 | solver->setConstants(dynamicsTension, dynamicsFriction, dynamicsMass); 127 | solver->reset(); 128 | } 129 | } 130 | }; 131 | 132 | typedef struct _POPSpringAnimationState POPSpringAnimationState; 133 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/Pods-BunbunuCustom-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## SnapKit 5 | 6 | Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 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 | ## UIColor_Hex_Swift 28 | 29 | The MIT License (MIT) 30 | 31 | Copyright (c) 2014 R0CKSTAR 32 | 33 | Permission is hereby granted, free of charge, to any person obtaining a copy 34 | of this software and associated documentation files (the "Software"), to deal 35 | in the Software without restriction, including without limitation the rights 36 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 37 | copies of the Software, and to permit persons to whom the Software is 38 | furnished to do so, subject to the following conditions: 39 | 40 | The above copyright notice and this permission notice shall be included in all 41 | copies or substantial portions of the Software. 42 | 43 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 44 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 45 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 46 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 47 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 48 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 49 | SOFTWARE. 50 | 51 | ## pop 52 | 53 | BSD License 54 | 55 | For Pop software 56 | 57 | Copyright (c) 2014, Facebook, Inc. All rights reserved. 58 | 59 | Redistribution and use in source and binary forms, with or without modification, 60 | are permitted provided that the following conditions are met: 61 | 62 | * Redistributions of source code must retain the above copyright notice, this 63 | list of conditions and the following disclaimer. 64 | 65 | * Redistributions in binary form must reproduce the above copyright notice, 66 | this list of conditions and the following disclaimer in the documentation 67 | and/or other materials provided with the distribution. 68 | 69 | * Neither the name Facebook nor the names of its contributors may be used to 70 | endorse or promote products derived from this software without specific 71 | prior written permission. 72 | 73 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 74 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 75 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 76 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 77 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 78 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 79 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 80 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 81 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 82 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 83 | 84 | Generated by CocoaPods - https://cocoapods.org 85 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/Pods-BunbunuCustom-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "$BUILT_PRODUCTS_DIR/SnapKit/SnapKit.framework" 88 | install_framework "$BUILT_PRODUCTS_DIR/UIColor_Hex_Swift/UIColor_Hex_Swift.framework" 89 | install_framework "$BUILT_PRODUCTS_DIR/pop/pop.framework" 90 | fi 91 | if [[ "$CONFIGURATION" == "Release" ]]; then 92 | install_framework "$BUILT_PRODUCTS_DIR/SnapKit/SnapKit.framework" 93 | install_framework "$BUILT_PRODUCTS_DIR/UIColor_Hex_Swift/UIColor_Hex_Swift.framework" 94 | install_framework "$BUILT_PRODUCTS_DIR/pop/pop.framework" 95 | fi 96 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPDecayAnimationInternal.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPDecayAnimation.h" 11 | 12 | #import 13 | 14 | #import "POPPropertyAnimationInternal.h" 15 | 16 | // minimal velocity factor before decay animation is considered complete, in units / s 17 | static CGFloat kPOPAnimationDecayMinimalVelocityFactor = 5.; 18 | 19 | // default decay animation deceleration 20 | static CGFloat kPOPAnimationDecayDecelerationDefault = 0.998; 21 | 22 | static void decay_position(CGFloat *x, CGFloat *v, NSUInteger count, CFTimeInterval dt, CGFloat deceleration) 23 | { 24 | dt *= 1000; 25 | 26 | // v0 = v / 1000 27 | // v = v0 * powf(deceleration, dt); 28 | // v = v * 1000; 29 | 30 | // x0 = x; 31 | // x = x0 + v0 * deceleration * (1 - powf(deceleration, dt)) / (1 - deceleration) 32 | float v0[count]; 33 | float kv = powf(deceleration, dt); 34 | float kx = deceleration * (1 - kv) / (1 - deceleration); 35 | 36 | for (NSUInteger idx = 0; idx < count; idx++) { 37 | v0[idx] = v[idx] / 1000.; 38 | v[idx] = v0[idx] * kv * 1000.; 39 | x[idx] = x[idx] + v0[idx] * kx; 40 | } 41 | } 42 | 43 | struct _POPDecayAnimationState : _POPPropertyAnimationState 44 | { 45 | double deceleration; 46 | CFTimeInterval duration; 47 | 48 | _POPDecayAnimationState(id __unsafe_unretained anim) : 49 | _POPPropertyAnimationState(anim), 50 | deceleration(kPOPAnimationDecayDecelerationDefault), 51 | duration(0) 52 | { 53 | type = kPOPAnimationDecay; 54 | } 55 | 56 | bool isDone() { 57 | if (_POPPropertyAnimationState::isDone()) { 58 | return true; 59 | } 60 | 61 | CGFloat f = dynamicsThreshold * kPOPAnimationDecayMinimalVelocityFactor; 62 | const CGFloat *velocityValues = vec_data(velocityVec); 63 | for (NSUInteger idx = 0; idx < valueCount; idx++) { 64 | if (std::abs((velocityValues[idx])) >= f) 65 | return false; 66 | } 67 | return true; 68 | 69 | } 70 | 71 | void computeDuration() { 72 | 73 | // compute duration till threshold velocity 74 | Vector4r scaledVelocity = vector4(velocityVec) / 1000.; 75 | 76 | double k = dynamicsThreshold * kPOPAnimationDecayMinimalVelocityFactor / 1000.; 77 | double vx = k / scaledVelocity.x; 78 | double vy = k / scaledVelocity.y; 79 | double vz = k / scaledVelocity.z; 80 | double vw = k / scaledVelocity.w; 81 | double d = log(deceleration) * 1000.; 82 | duration = MAX(MAX(MAX(log(fabs(vx)) / d, log(fabs(vy)) / d), log(fabs(vz)) / d), log(fabs(vw)) / d); 83 | 84 | // ensure velocity threshold is exceeded 85 | if (std::isnan(duration) || duration < 0) { 86 | duration = 0; 87 | } 88 | } 89 | 90 | void computeToValue() { 91 | // to value assuming final velocity as a factor of dynamics threshold 92 | // derived from v' = v * d^dt used in decay_position 93 | // to compute the to value with maximal dt, p' = p + (v * d) / (1 - d) 94 | VectorRef fromValue = NULL != currentVec ? currentVec : fromVec; 95 | if (!fromValue) { 96 | return; 97 | } 98 | 99 | // ensure duration is computed 100 | if (0 == duration) { 101 | computeDuration(); 102 | } 103 | 104 | // compute to value 105 | VectorRef toValue(Vector::new_vector(fromValue.get())); 106 | Vector4r velocity = velocityVec->vector4r(); 107 | decay_position(toValue->data(), velocity.data(), valueCount, duration, deceleration); 108 | toVec = toValue; 109 | } 110 | 111 | bool advance(CFTimeInterval time, CFTimeInterval dt, id obj) { 112 | // advance past not yet initialized animations 113 | if (NULL == currentVec) { 114 | return false; 115 | } 116 | 117 | decay_position(currentVec->data(), velocityVec->data(), valueCount, dt, deceleration); 118 | 119 | // clamp to compute end value; avoid possibility of decaying past 120 | clampCurrentValue(kPOPAnimationClampEnd | clampMode); 121 | 122 | return true; 123 | } 124 | 125 | }; 126 | 127 | typedef struct _POPDecayAnimationState POPDecayAnimationState; 128 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPAnimationExtras.mm: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPAnimationExtras.h" 11 | #import "POPAnimationPrivate.h" 12 | 13 | #if TARGET_OS_IPHONE 14 | #import 15 | #endif 16 | 17 | #if TARGET_IPHONE_SIMULATOR 18 | UIKIT_EXTERN float UIAnimationDragCoefficient(); // UIKit private drag coeffient, use judiciously 19 | #endif 20 | 21 | #import "POPMath.h" 22 | 23 | CGFloat POPAnimationDragCoefficient() 24 | { 25 | #if TARGET_IPHONE_SIMULATOR 26 | return UIAnimationDragCoefficient(); 27 | #else 28 | return 1.0; 29 | #endif 30 | } 31 | 32 | @implementation CAAnimation (POPAnimationExtras) 33 | 34 | - (void)pop_applyDragCoefficient 35 | { 36 | CGFloat k = POPAnimationDragCoefficient(); 37 | if (k != 0 && k != 1) 38 | self.speed = 1 / k; 39 | } 40 | 41 | @end 42 | 43 | @implementation POPSpringAnimation (POPAnimationExtras) 44 | 45 | static const CGFloat POPBouncy3NormalizationRange = 20.0; 46 | static const CGFloat POPBouncy3NormalizationScale = 1.7; 47 | static const CGFloat POPBouncy3BouncinessNormalizedMin = 0.0; 48 | static const CGFloat POPBouncy3BouncinessNormalizedMax = 0.8; 49 | static const CGFloat POPBouncy3SpeedNormalizedMin = 0.5; 50 | static const CGFloat POPBouncy3SpeedNormalizedMax = 200; 51 | static const CGFloat POPBouncy3FrictionInterpolationMax = 0.01; 52 | 53 | + (void)convertBounciness:(CGFloat)bounciness speed:(CGFloat)speed toTension:(CGFloat *)outTension friction:(CGFloat *)outFriction mass:(CGFloat *)outMass 54 | { 55 | double b = POPNormalize(bounciness / POPBouncy3NormalizationScale, 0, POPBouncy3NormalizationRange); 56 | b = POPProjectNormal(b, POPBouncy3BouncinessNormalizedMin, POPBouncy3BouncinessNormalizedMax); 57 | 58 | double s = POPNormalize(speed / POPBouncy3NormalizationScale, 0, POPBouncy3NormalizationRange); 59 | 60 | CGFloat tension = POPProjectNormal(s, POPBouncy3SpeedNormalizedMin, POPBouncy3SpeedNormalizedMax); 61 | CGFloat friction = POPQuadraticOutInterpolation(b, POPBouncy3NoBounce(tension), POPBouncy3FrictionInterpolationMax); 62 | 63 | tension = POP_ANIMATION_TENSION_FOR_QC_TENSION(tension); 64 | friction = POP_ANIMATION_FRICTION_FOR_QC_FRICTION(friction); 65 | 66 | if (outTension) { 67 | *outTension = tension; 68 | } 69 | 70 | if (outFriction) { 71 | *outFriction = friction; 72 | } 73 | 74 | if (outMass) { 75 | *outMass = 1.0; 76 | } 77 | } 78 | 79 | + (void)convertTension:(CGFloat)tension friction:(CGFloat)friction toBounciness:(CGFloat *)outBounciness speed:(CGFloat *)outSpeed 80 | { 81 | // Convert to QC values, in which our calculations are done. 82 | CGFloat qcFriction = QC_FRICTION_FOR_POP_ANIMATION_FRICTION(friction); 83 | CGFloat qcTension = QC_TENSION_FOR_POP_ANIMATION_TENSION(tension); 84 | 85 | // Friction is a function of bounciness and tension, according to the following: 86 | // friction = POPQuadraticOutInterpolation(b, POPBouncy3NoBounce(tension), POPBouncy3FrictionInterpolationMax); 87 | // Solve for bounciness, given a tension and friction. 88 | 89 | CGFloat nobounceTension = POPBouncy3NoBounce(qcTension); 90 | CGFloat bounciness1, bounciness2; 91 | 92 | POPQuadraticSolve((nobounceTension - POPBouncy3FrictionInterpolationMax), // a 93 | 2 * (POPBouncy3FrictionInterpolationMax - nobounceTension), // b 94 | (nobounceTension - qcFriction), // c 95 | bounciness1, // x1 96 | bounciness2); // x2 97 | 98 | 99 | // Choose the quadratic solution within the normalized bounciness range 100 | CGFloat projectedNormalizedBounciness = (bounciness2 < POPBouncy3BouncinessNormalizedMax) ? bounciness2 : bounciness1; 101 | CGFloat projectedNormalizedSpeed = qcTension; 102 | 103 | // Reverse projection + normalization 104 | CGFloat bounciness = ((POPBouncy3NormalizationRange * POPBouncy3NormalizationScale) / (POPBouncy3BouncinessNormalizedMax - POPBouncy3BouncinessNormalizedMin)) * (projectedNormalizedBounciness - POPBouncy3BouncinessNormalizedMin); 105 | CGFloat speed = ((POPBouncy3NormalizationRange * POPBouncy3NormalizationScale) / (POPBouncy3SpeedNormalizedMax - POPBouncy3SpeedNormalizedMin)) * (projectedNormalizedSpeed - POPBouncy3SpeedNormalizedMin); 106 | 107 | // Write back results 108 | if (outBounciness) { 109 | *outBounciness = bounciness; 110 | } 111 | 112 | if (outSpeed) { 113 | *outSpeed = speed; 114 | } 115 | } 116 | 117 | @end 118 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPCGUtils.mm: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPCGUtils.h" 11 | 12 | #import 13 | 14 | void POPCGColorGetRGBAComponents(CGColorRef color, CGFloat components[]) 15 | { 16 | if (color) { 17 | const CGFloat *colors = CGColorGetComponents(color); 18 | size_t count = CGColorGetNumberOfComponents(color); 19 | 20 | if (4 == count) { 21 | // RGB colorspace 22 | components[0] = colors[0]; 23 | components[1] = colors[1]; 24 | components[2] = colors[2]; 25 | components[3] = colors[3]; 26 | } else if (2 == count) { 27 | // Grey colorspace 28 | components[0] = components[1] = components[2] = colors[0]; 29 | components[3] = colors[1]; 30 | } else { 31 | // Use CI to convert 32 | CIColor *ciColor = [CIColor colorWithCGColor:color]; 33 | components[0] = ciColor.red; 34 | components[1] = ciColor.green; 35 | components[2] = ciColor.blue; 36 | components[3] = ciColor.alpha; 37 | } 38 | } else { 39 | memset(components, 0, 4 * sizeof(components[0])); 40 | } 41 | } 42 | 43 | CGColorRef POPCGColorRGBACreate(const CGFloat components[]) 44 | { 45 | #if TARGET_OS_IPHONE 46 | CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); 47 | CGColorRef color = CGColorCreate(space, components); 48 | CGColorSpaceRelease(space); 49 | return color; 50 | #else 51 | return CGColorCreateGenericRGB(components[0], components[1], components[2], components[3]); 52 | #endif 53 | } 54 | 55 | CGColorRef POPCGColorWithColor(id color) 56 | { 57 | if (CFGetTypeID((__bridge CFTypeRef)color) == CGColorGetTypeID()) { 58 | return ((__bridge CGColorRef)color); 59 | } 60 | #if TARGET_OS_IPHONE 61 | else if ([color isKindOfClass:[UIColor class]]) { 62 | return [color CGColor]; 63 | } 64 | #else 65 | else if ([color isKindOfClass:[NSColor class]]) { 66 | // -[NSColor CGColor] is only supported since OSX 10.8+ 67 | if ([color respondsToSelector:@selector(CGColor)]) { 68 | return [color CGColor]; 69 | } 70 | 71 | /* 72 | * Otherwise create a CGColorRef manually. 73 | * 74 | * The original accessor is (or would be) declared as: 75 | * @property(readonly) CGColorRef CGColor; 76 | * - (CGColorRef)CGColor NS_RETURNS_INNER_POINTER CF_RETURNS_NOT_RETAINED; 77 | * 78 | * (Please note that OSX' accessor is atomic, while iOS' isn't.) 79 | * 80 | * The access to the NSColor object must thus be synchronized 81 | * and the CGColorRef be stored as an associated object, 82 | * to return a reference which doesn't need to be released manually. 83 | */ 84 | @synchronized(color) { 85 | static const void* key = &key; 86 | 87 | CGColorRef colorRef = (__bridge CGColorRef)objc_getAssociatedObject(color, key); 88 | 89 | if (!colorRef) { 90 | size_t numberOfComponents = [color numberOfComponents]; 91 | CGFloat components[numberOfComponents]; 92 | CGColorSpaceRef colorSpace = [[color colorSpace] CGColorSpace]; 93 | 94 | [color getComponents:components]; 95 | 96 | colorRef = CGColorCreate(colorSpace, components); 97 | 98 | objc_setAssociatedObject(color, key, (__bridge id)colorRef, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 99 | CGColorRelease(colorRef); 100 | } 101 | 102 | return colorRef; 103 | } 104 | } 105 | #endif 106 | return nil; 107 | } 108 | 109 | #if TARGET_OS_IPHONE 110 | 111 | void POPUIColorGetRGBAComponents(UIColor *color, CGFloat components[]) 112 | { 113 | return POPCGColorGetRGBAComponents(POPCGColorWithColor(color), components); 114 | } 115 | 116 | UIColor *POPUIColorRGBACreate(const CGFloat components[]) 117 | { 118 | CGColorRef colorRef = POPCGColorRGBACreate(components); 119 | UIColor *color = [[UIColor alloc] initWithCGColor:colorRef]; 120 | CGColorRelease(colorRef); 121 | return color; 122 | } 123 | 124 | #else 125 | 126 | void POPNSColorGetRGBAComponents(NSColor *color, CGFloat components[]) 127 | { 128 | return POPCGColorGetRGBAComponents(POPCGColorWithColor(color), components); 129 | } 130 | 131 | NSColor *POPNSColorRGBACreate(const CGFloat components[]) 132 | { 133 | CGColorRef colorRef = POPCGColorRGBACreate(components); 134 | NSColor *color = nil; 135 | 136 | if (colorRef) { 137 | if ([NSColor respondsToSelector:@selector(colorWithCGColor:)]) { 138 | color = [NSColor colorWithCGColor:colorRef]; 139 | } else { 140 | color = [NSColor colorWithCIColor:[CIColor colorWithCGColor:colorRef]]; 141 | } 142 | 143 | CGColorRelease(colorRef); 144 | } 145 | 146 | return color; 147 | } 148 | 149 | #endif 150 | 151 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/Pods-BunbunuCustom-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) 2011-Present SnapKit Team - https://github.com/SnapKit 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 | Title 38 | SnapKit 39 | Type 40 | PSGroupSpecifier 41 | 42 | 43 | FooterText 44 | The MIT License (MIT) 45 | 46 | Copyright (c) 2014 R0CKSTAR 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 all 56 | 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 THE 64 | SOFTWARE. 65 | Title 66 | UIColor_Hex_Swift 67 | Type 68 | PSGroupSpecifier 69 | 70 | 71 | FooterText 72 | BSD License 73 | 74 | For Pop software 75 | 76 | Copyright (c) 2014, Facebook, Inc. All rights reserved. 77 | 78 | Redistribution and use in source and binary forms, with or without modification, 79 | are permitted provided that the following conditions are met: 80 | 81 | * Redistributions of source code must retain the above copyright notice, this 82 | list of conditions and the following disclaimer. 83 | 84 | * Redistributions in binary form must reproduce the above copyright notice, 85 | this list of conditions and the following disclaimer in the documentation 86 | and/or other materials provided with the distribution. 87 | 88 | * Neither the name Facebook nor the names of its contributors may be used to 89 | endorse or promote products derived from this software without specific 90 | prior written permission. 91 | 92 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 93 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 94 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 95 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 96 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 97 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 98 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 99 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 100 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 101 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 102 | 103 | Title 104 | pop 105 | Type 106 | PSGroupSpecifier 107 | 108 | 109 | FooterText 110 | Generated by CocoaPods - https://cocoapods.org 111 | Title 112 | 113 | Type 114 | PSGroupSpecifier 115 | 116 | 117 | StringsTable 118 | Acknowledgements 119 | Title 120 | Acknowledgements 121 | 122 | 123 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/Target Support Files/Pods-BunbunuCustom/Pods-BunbunuCustom-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | 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}" 48 | 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} 49 | ;; 50 | *.xib) 51 | 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}" 52 | 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} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | 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}" 102 | fi 103 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPSpringSolver.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "POPVector.h" 13 | 14 | namespace POP { 15 | 16 | template 17 | struct SSState 18 | { 19 | T p; 20 | T v; 21 | }; 22 | 23 | template 24 | struct SSDerivative 25 | { 26 | T dp; 27 | T dv; 28 | }; 29 | 30 | typedef SSState SSState4d; 31 | typedef SSDerivative SSDerivative4d; 32 | 33 | const CFTimeInterval solverDt = 0.001f; 34 | const CFTimeInterval maxSolverDt = 30.0f; 35 | 36 | /** 37 | Templated spring solver class. 38 | */ 39 | template 40 | class SpringSolver 41 | { 42 | double _k; // stiffness 43 | double _b; // dampening 44 | double _m; // mass 45 | 46 | double _tp; // threshold 47 | double _tv; // threshold velocity 48 | double _ta; // threshold acceleration 49 | 50 | CFTimeInterval _accumulatedTime; 51 | SSState _lastState; 52 | T _lastDv; 53 | bool _started; 54 | 55 | public: 56 | SpringSolver(double k, double b, double m = 1) : _k(k), _b(b), _m(m), _started(false) 57 | { 58 | _accumulatedTime = 0; 59 | _lastState.p = T::Zero(); 60 | _lastState.v = T::Zero(); 61 | _lastDv = T::Zero(); 62 | setThreshold(1.); 63 | } 64 | 65 | ~SpringSolver() 66 | { 67 | } 68 | 69 | bool started() 70 | { 71 | return _started; 72 | } 73 | 74 | void setConstants(double k, double b, double m) 75 | { 76 | _k = k; 77 | _b = b; 78 | _m = m; 79 | } 80 | 81 | void setThreshold(double t) 82 | { 83 | _tp = t / 2; // half a unit 84 | _tv = 25.0 * t; // 5 units per second, squared for comparison 85 | _ta = 625.0 * t * t; // 5 units per second squared, squared for comparison 86 | } 87 | 88 | T acceleration(const SSState &state, double t) 89 | { 90 | return state.p*(-_k/_m) - state.v*(_b/_m); 91 | } 92 | 93 | SSDerivative evaluate(const SSState &initial, double t) 94 | { 95 | SSDerivative output; 96 | output.dp = initial.v; 97 | output.dv = acceleration(initial, t); 98 | return output; 99 | } 100 | 101 | SSDerivative evaluate(const SSState &initial, double t, double dt, const SSDerivative &d) 102 | { 103 | SSState state; 104 | state.p = initial.p + d.dp*dt; 105 | state.v = initial.v + d.dv*dt; 106 | SSDerivative output; 107 | output.dp = state.v; 108 | output.dv = acceleration(state, t+dt); 109 | return output; 110 | } 111 | 112 | void integrate(SSState &state, double t, double dt) 113 | { 114 | SSDerivative a = evaluate(state, t); 115 | SSDerivative b = evaluate(state, t, dt*0.5, a); 116 | SSDerivative c = evaluate(state, t, dt*0.5, b); 117 | SSDerivative d = evaluate(state, t, dt, c); 118 | 119 | T dpdt = (a.dp + (b.dp + c.dp)*2.0 + d.dp) * (1.0/6.0); 120 | T dvdt = (a.dv + (b.dv + c.dv)*2.0 + d.dv) * (1.0/6.0); 121 | 122 | state.p = state.p + dpdt*dt; 123 | state.v = state.v + dvdt*dt; 124 | 125 | _lastDv = dvdt; 126 | } 127 | 128 | SSState interpolate(const SSState &previous, const SSState ¤t, double alpha) 129 | { 130 | SSState state; 131 | state.p = current.p*alpha + previous.p*(1-alpha); 132 | state.v = current.v*alpha + previous.v*(1-alpha); 133 | return state; 134 | } 135 | 136 | void advance(SSState &state, double t, double dt) 137 | { 138 | _started = true; 139 | 140 | if (dt > maxSolverDt) { 141 | // excessive time step, force shut down 142 | _lastDv = _lastState.v = _lastState.p = T::Zero(); 143 | } else { 144 | _accumulatedTime += dt; 145 | 146 | SSState previousState = state, currentState = state; 147 | while (_accumulatedTime >= solverDt) { 148 | previousState = currentState; 149 | this->integrate(currentState, t, solverDt); 150 | t += solverDt; 151 | _accumulatedTime -= solverDt; 152 | } 153 | CFTimeInterval alpha = _accumulatedTime / solverDt; 154 | _lastState = state = this->interpolate(previousState, currentState, alpha); 155 | } 156 | } 157 | 158 | bool hasConverged() 159 | { 160 | if (!_started) { 161 | return false; 162 | } 163 | 164 | for (size_t idx = 0; idx < _lastState.p.size(); idx++) { 165 | if (fabs(_lastState.p(idx)) >= _tp) { 166 | return false; 167 | } 168 | } 169 | 170 | return (_lastState.v.squaredNorm() < _tv) && (_lastDv.squaredNorm() < _ta); 171 | } 172 | 173 | void reset() 174 | { 175 | _accumulatedTime = 0; 176 | _lastState.p = T::Zero(); 177 | _lastState.v = T::Zero(); 178 | _lastDv = T::Zero(); 179 | _started = false; 180 | } 181 | }; 182 | 183 | /** 184 | Convenience spring solver type definitions. 185 | */ 186 | typedef SpringSolver SpringSolver2d; 187 | typedef SpringSolver SpringSolver3d; 188 | typedef SpringSolver SpringSolver4d; 189 | } 190 | 191 | -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPSpringAnimation.mm: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "POPSpringAnimationInternal.h" 11 | 12 | @implementation POPSpringAnimation 13 | 14 | #pragma mark - Lifecycle 15 | 16 | #undef __state 17 | #define __state ((POPSpringAnimationState *)_state) 18 | 19 | + (instancetype)animation 20 | { 21 | return [[self alloc] init]; 22 | } 23 | 24 | + (instancetype)animationWithPropertyNamed:(NSString *)aName 25 | { 26 | POPSpringAnimation *anim = [self animation]; 27 | anim.property = [POPAnimatableProperty propertyWithName:aName]; 28 | return anim; 29 | } 30 | 31 | - (void)_initState 32 | { 33 | _state = new POPSpringAnimationState(self); 34 | } 35 | 36 | - (id)init 37 | { 38 | self = [super _init]; 39 | if (nil != self) { 40 | __state->solver = new SpringSolver4d(1, 1, 1); 41 | __state->updatedDynamicsThreshold(); 42 | __state->updatedBouncinessAndSpeed(); 43 | } 44 | return self; 45 | } 46 | 47 | - (void)dealloc 48 | { 49 | if (__state) { 50 | delete __state->solver; 51 | __state->solver = NULL; 52 | } 53 | } 54 | 55 | #pragma mark - Properties 56 | 57 | - (id)velocity 58 | { 59 | return POPBox(__state->velocityVec, __state->valueType); 60 | } 61 | 62 | - (void)setVelocity:(id)aValue 63 | { 64 | POPPropertyAnimationState *s = __state; 65 | VectorRef vec = POPUnbox(aValue, s->valueType, s->valueCount, YES); 66 | VectorRef origVec = POPUnbox(aValue, s->valueType, s->valueCount, YES); 67 | if (!vec_equal(vec, s->velocityVec)) { 68 | s->velocityVec = vec; 69 | s->originalVelocityVec = origVec; 70 | 71 | if (s->tracing) { 72 | [s->tracer updateVelocity:aValue]; 73 | } 74 | } 75 | } 76 | 77 | DEFINE_RW_PROPERTY(POPSpringAnimationState, dynamicsTension, setDynamicsTension:, CGFloat, [self _updatedDynamicsTension];); 78 | DEFINE_RW_PROPERTY(POPSpringAnimationState, dynamicsFriction, setDynamicsFriction:, CGFloat, [self _updatedDynamicsFriction];); 79 | DEFINE_RW_PROPERTY(POPSpringAnimationState, dynamicsMass, setDynamicsMass:, CGFloat, [self _updatedDynamicsMass];); 80 | 81 | FB_PROPERTY_GET(POPSpringAnimationState, springSpeed, CGFloat); 82 | - (void)setSpringSpeed:(CGFloat)aFloat 83 | { 84 | POPSpringAnimationState *s = __state; 85 | if (s->userSpecifiedDynamics || aFloat != s->springSpeed) { 86 | s->springSpeed = aFloat; 87 | s->userSpecifiedDynamics = false; 88 | s->updatedBouncinessAndSpeed(); 89 | if (s->tracing) { 90 | [s->tracer updateSpeed:aFloat]; 91 | } 92 | } 93 | } 94 | 95 | FB_PROPERTY_GET(POPSpringAnimationState, springBounciness, CGFloat); 96 | - (void)setSpringBounciness:(CGFloat)aFloat 97 | { 98 | POPSpringAnimationState *s = __state; 99 | if (s->userSpecifiedDynamics || aFloat != s->springBounciness) { 100 | s->springBounciness = aFloat; 101 | s->userSpecifiedDynamics = false; 102 | s->updatedBouncinessAndSpeed(); 103 | if (s->tracing) { 104 | [s->tracer updateBounciness:aFloat]; 105 | } 106 | } 107 | } 108 | 109 | - (SpringSolver4d *)solver 110 | { 111 | return __state->solver; 112 | } 113 | 114 | - (void)setSolver:(SpringSolver4d *)aSolver 115 | { 116 | if (aSolver != __state->solver) { 117 | if (__state->solver) { 118 | delete(__state->solver); 119 | } 120 | __state->solver = aSolver; 121 | } 122 | } 123 | 124 | #pragma mark - Utility 125 | 126 | - (void)_updatedDynamicsTension 127 | { 128 | __state->userSpecifiedDynamics = true; 129 | if(__state->tracing) { 130 | [__state->tracer updateTension:__state->dynamicsTension]; 131 | } 132 | __state->updatedDynamics(); 133 | } 134 | 135 | - (void)_updatedDynamicsFriction 136 | { 137 | __state->userSpecifiedDynamics = true; 138 | if(__state->tracing) { 139 | [__state->tracer updateFriction:__state->dynamicsFriction]; 140 | } 141 | __state->updatedDynamics(); 142 | } 143 | 144 | - (void)_updatedDynamicsMass 145 | { 146 | __state->userSpecifiedDynamics = true; 147 | if(__state->tracing) { 148 | [__state->tracer updateMass:__state->dynamicsMass]; 149 | } 150 | __state->updatedDynamics(); 151 | } 152 | 153 | - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug 154 | { 155 | [super _appendDescription:s debug:debug]; 156 | 157 | if (debug) { 158 | if (_state->userSpecifiedDynamics) { 159 | [s appendFormat:@"; dynamics = (tension:%f, friction:%f, mass:%f)", __state->dynamicsTension, __state->dynamicsFriction, __state->dynamicsMass]; 160 | } else { 161 | [s appendFormat:@"; bounciness = %f; speed = %f", __state->springBounciness, __state->springSpeed]; 162 | } 163 | } 164 | } 165 | 166 | @end 167 | 168 | @implementation POPSpringAnimation (NSCopying) 169 | 170 | - (instancetype)copyWithZone:(NSZone *)zone { 171 | 172 | POPSpringAnimation *copy = [super copyWithZone:zone]; 173 | 174 | if (copy) { 175 | id velocity = POPBox(__state->originalVelocityVec, __state->valueType); 176 | 177 | // If velocity never gets set, then POPBox will return nil, messing up __state->valueCount. 178 | if (velocity) { 179 | copy.velocity = velocity; 180 | } 181 | 182 | copy.springBounciness = self.springBounciness; 183 | copy.springSpeed = self.springSpeed; 184 | copy.dynamicsTension = self.dynamicsTension; 185 | copy.dynamicsFriction = self.dynamicsFriction; 186 | copy.dynamicsMass = self.dynamicsMass; 187 | } 188 | 189 | return copy; 190 | } 191 | 192 | @end -------------------------------------------------------------------------------- /BunbunuCustom/Pods/pop/pop/POPLayerExtras.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import 13 | 14 | POP_EXTERN_C_BEGIN 15 | 16 | #pragma mark - Scale 17 | 18 | /** 19 | @abstract Returns layer scale factor for the x axis. 20 | */ 21 | extern CGFloat POPLayerGetScaleX(CALayer *l); 22 | 23 | /** 24 | @abstract Set layer scale factor for the x axis. 25 | */ 26 | extern void POPLayerSetScaleX(CALayer *l, CGFloat f); 27 | 28 | /** 29 | @abstract Returns layer scale factor for the y axis. 30 | */ 31 | extern CGFloat POPLayerGetScaleY(CALayer *l); 32 | 33 | /** 34 | @abstract Set layer scale factor for the y axis. 35 | */ 36 | extern void POPLayerSetScaleY(CALayer *l, CGFloat f); 37 | 38 | /** 39 | @abstract Returns layer scale factor for the z axis. 40 | */ 41 | extern CGFloat POPLayerGetScaleZ(CALayer *l); 42 | 43 | /** 44 | @abstract Set layer scale factor for the z axis. 45 | */ 46 | extern void POPLayerSetScaleZ(CALayer *l, CGFloat f); 47 | 48 | /** 49 | @abstract Returns layer scale factors for x and y access as point. 50 | */ 51 | extern CGPoint POPLayerGetScaleXY(CALayer *l); 52 | 53 | /** 54 | @abstract Sets layer x and y scale factors given point. 55 | */ 56 | extern void POPLayerSetScaleXY(CALayer *l, CGPoint p); 57 | 58 | #pragma mark - Translation 59 | 60 | /** 61 | @abstract Returns layer translation factor for the x axis. 62 | */ 63 | extern CGFloat POPLayerGetTranslationX(CALayer *l); 64 | 65 | /** 66 | @abstract Set layer translation factor for the x axis. 67 | */ 68 | extern void POPLayerSetTranslationX(CALayer *l, CGFloat f); 69 | 70 | /** 71 | @abstract Returns layer translation factor for the y axis. 72 | */ 73 | extern CGFloat POPLayerGetTranslationY(CALayer *l); 74 | 75 | /** 76 | @abstract Set layer translation factor for the y axis. 77 | */ 78 | extern void POPLayerSetTranslationY(CALayer *l, CGFloat f); 79 | 80 | /** 81 | @abstract Returns layer translation factor for the z axis. 82 | */ 83 | extern CGFloat POPLayerGetTranslationZ(CALayer *l); 84 | 85 | /** 86 | @abstract Set layer translation factor for the z axis. 87 | */ 88 | extern void POPLayerSetTranslationZ(CALayer *l, CGFloat f); 89 | 90 | /** 91 | @abstract Returns layer translation factors for x and y access as point. 92 | */ 93 | extern CGPoint POPLayerGetTranslationXY(CALayer *l); 94 | 95 | /** 96 | @abstract Sets layer x and y translation factors given point. 97 | */ 98 | extern void POPLayerSetTranslationXY(CALayer *l, CGPoint p); 99 | 100 | #pragma mark - Rotation 101 | 102 | /** 103 | @abstract Returns layer rotation, in radians, in the X axis. 104 | */ 105 | extern CGFloat POPLayerGetRotationX(CALayer *l); 106 | 107 | /** 108 | @abstract Sets layer rotation, in radians, in the X axis. 109 | */ 110 | extern void POPLayerSetRotationX(CALayer *l, CGFloat f); 111 | 112 | /** 113 | @abstract Returns layer rotation, in radians, in the Y axis. 114 | */ 115 | extern CGFloat POPLayerGetRotationY(CALayer *l); 116 | 117 | /** 118 | @abstract Sets layer rotation, in radians, in the Y axis. 119 | */ 120 | extern void POPLayerSetRotationY(CALayer *l, CGFloat f); 121 | 122 | /** 123 | @abstract Returns layer rotation, in radians, in the Z axis. 124 | */ 125 | extern CGFloat POPLayerGetRotationZ(CALayer *l); 126 | 127 | /** 128 | @abstract Sets layer rotation, in radians, in the Z axis. 129 | */ 130 | extern void POPLayerSetRotationZ(CALayer *l, CGFloat f); 131 | 132 | /** 133 | @abstract Returns layer rotation, in radians, in the Z axis. 134 | */ 135 | extern CGFloat POPLayerGetRotation(CALayer *l); 136 | 137 | /** 138 | @abstract Sets layer rotation, in radians, in the Z axis. 139 | */ 140 | extern void POPLayerSetRotation(CALayer *l, CGFloat f); 141 | 142 | #pragma mark - Sublayer Scale 143 | 144 | /** 145 | @abstract Returns sublayer scale factors for x and y access as point. 146 | */ 147 | extern CGPoint POPLayerGetSubScaleXY(CALayer *l); 148 | 149 | /** 150 | @abstract Sets sublayer x and y scale factors given point. 151 | */ 152 | extern void POPLayerSetSubScaleXY(CALayer *l, CGPoint p); 153 | 154 | #pragma mark - Sublayer Translation 155 | 156 | /** 157 | @abstract Returns sublayer translation factor for the x axis. 158 | */ 159 | extern CGFloat POPLayerGetSubTranslationX(CALayer *l); 160 | 161 | /** 162 | @abstract Set sublayer translation factor for the x axis. 163 | */ 164 | extern void POPLayerSetSubTranslationX(CALayer *l, CGFloat f); 165 | 166 | /** 167 | @abstract Returns sublayer translation factor for the y axis. 168 | */ 169 | extern CGFloat POPLayerGetSubTranslationY(CALayer *l); 170 | 171 | /** 172 | @abstract Set sublayer translation factor for the y axis. 173 | */ 174 | extern void POPLayerSetSubTranslationY(CALayer *l, CGFloat f); 175 | 176 | /** 177 | @abstract Returns sublayer translation factor for the z axis. 178 | */ 179 | extern CGFloat POPLayerGetSubTranslationZ(CALayer *l); 180 | 181 | /** 182 | @abstract Set sublayer translation factor for the z axis. 183 | */ 184 | extern void POPLayerSetSubTranslationZ(CALayer *l, CGFloat f); 185 | 186 | /** 187 | @abstract Returns sublayer translation factors for x and y access as point. 188 | */ 189 | extern CGPoint POPLayerGetSubTranslationXY(CALayer *l); 190 | 191 | /** 192 | @abstract Sets sublayer x and y translation factors given point. 193 | */ 194 | extern void POPLayerSetSubTranslationXY(CALayer *l, CGPoint p); 195 | 196 | POP_EXTERN_C_END 197 | --------------------------------------------------------------------------------