├── Pod ├── Assets │ └── .gitkeep └── Classes │ ├── .gitkeep │ ├── ZWSMenuLabel.h │ ├── ZWSViewController.h │ ├── ZWSSectionBar.h │ ├── ZWSFlowMenu.h │ ├── ZWSPagingView.h │ ├── ZWSMenuLabel.m │ ├── ZWSViewController.m │ ├── ZWSSectionBar.m │ ├── ZWSFlowMenu.m │ └── ZWSPagingView.m ├── _Pods.xcodeproj ├── demo.png ├── Example ├── Tests │ ├── en.lproj │ │ └── InfoPlist.strings │ ├── Tests-Prefix.pch │ ├── Tests-Info.plist │ └── Tests.m ├── ZWSlideViewController │ ├── en.lproj │ │ └── InfoPlist.strings │ ├── Images.xcassets │ │ ├── Contents.json │ │ ├── menu.imageset │ │ │ ├── menu.png │ │ │ └── Contents.json │ │ ├── LaunchImage.launchimage │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── ZWViewController.h │ ├── ZWSAppDelegate.h │ ├── main.m │ ├── ZWSlideViewController-Prefix.pch │ ├── ZWSlideViewController-Info.plist │ ├── ZWSAppDelegate.m │ ├── ZWViewController.m │ └── Launch Screen.storyboard ├── Gemfile ├── Podfile ├── Pods │ ├── Target Support Files │ │ ├── ZWSlideViewController │ │ │ ├── ZWSlideViewController.modulemap │ │ │ ├── ZWSlideViewController-dummy.m │ │ │ ├── ZWSlideViewController-prefix.pch │ │ │ ├── ZWSlideViewController.xcconfig │ │ │ ├── ZWSlideViewController-umbrella.h │ │ │ └── Info.plist │ │ └── Pods-ZWSlideViewController_Example │ │ │ ├── Pods-ZWSlideViewController_Example-acknowledgements.markdown │ │ │ ├── Pods-ZWSlideViewController_Example.modulemap │ │ │ ├── Pods-ZWSlideViewController_Example-dummy.m │ │ │ ├── Pods-ZWSlideViewController_Example-umbrella.h │ │ │ ├── Pods-ZWSlideViewController_Example.debug.xcconfig │ │ │ ├── Pods-ZWSlideViewController_Example.release.xcconfig │ │ │ ├── Info.plist │ │ │ ├── Pods-ZWSlideViewController_Example-acknowledgements.plist │ │ │ ├── Pods-ZWSlideViewController_Example-frameworks.sh │ │ │ └── Pods-ZWSlideViewController_Example-resources.sh │ ├── Manifest.lock │ ├── ZWSlideViewController │ │ ├── Pod │ │ │ └── Classes │ │ │ │ ├── ZWSMenuLabel.h │ │ │ │ ├── ZWSViewController.h │ │ │ │ ├── ZWSSectionBar.h │ │ │ │ ├── ZWSFlowMenu.h │ │ │ │ ├── ZWSPagingView.h │ │ │ │ ├── ZWSMenuLabel.m │ │ │ │ ├── ZWSViewController.m │ │ │ │ ├── ZWSSectionBar.m │ │ │ │ ├── ZWSFlowMenu.m │ │ │ │ └── ZWSPagingView.m │ │ ├── LICENSE │ │ └── README.md │ └── Pods.xcodeproj │ │ └── project.pbxproj ├── ZWSlideViewController.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── ZWSlideViewController-Example.xcscheme │ └── project.pbxproj ├── Podfile.lock ├── ZWSlideViewController.xcworkspace │ └── contents.xcworkspacedata └── Gemfile.lock ├── screenshot.gif ├── .travis.yml ├── ZWSlideViewController.podspec.json ├── .gitignore ├── LICENSE └── README.md /Pod/Assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Pod/Classes/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squarezw/ZWSlideViewController/HEAD/demo.png -------------------------------------------------------------------------------- /Example/Tests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /screenshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squarezw/ZWSlideViewController/HEAD/screenshot.gif -------------------------------------------------------------------------------- /Example/ZWSlideViewController/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Example/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://ruby.taobao.org' 2 | 3 | gem 'cocoapods', '1.3.1' 4 | gem 'cocoapods-packager' 5 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/ZWSlideViewController/Images.xcassets/menu.imageset/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squarezw/ZWSlideViewController/HEAD/Example/ZWSlideViewController/Images.xcassets/menu.imageset/menu.png -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | 3 | platform :ios, '8.0' 4 | use_frameworks! 5 | 6 | target 'ZWSlideViewController_Example' do 7 | pod "ZWSlideViewController" 8 | end 9 | -------------------------------------------------------------------------------- /Example/Tests/Tests-Prefix.pch: -------------------------------------------------------------------------------- 1 | // The contents of this file are implicitly included at the beginning of every test case source file. 2 | 3 | #ifdef __OBJC__ 4 | 5 | // @import FBSnapshotTestCase; 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/ZWSlideViewController/ZWSlideViewController.modulemap: -------------------------------------------------------------------------------- 1 | framework module ZWSlideViewController { 2 | umbrella header "ZWSlideViewController-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/ZWSlideViewController/ZWSlideViewController-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_ZWSlideViewController : NSObject 3 | @end 4 | @implementation PodsDummy_ZWSlideViewController 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_ZWSlideViewController_Example { 2 | umbrella header "Pods-ZWSlideViewController_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ZWSlideViewController_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ZWSlideViewController_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ZWSlideViewController (0.1.5) 3 | 4 | DEPENDENCIES: 5 | - ZWSlideViewController 6 | 7 | SPEC CHECKSUMS: 8 | ZWSlideViewController: f279a32b7fd986e55cb9f1756336bb236c901270 9 | 10 | PODFILE CHECKSUM: a21e83cc16e5e67845f1b211ad18694280917841 11 | 12 | COCOAPODS: 1.3.1 13 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ZWSlideViewController (0.1.5) 3 | 4 | DEPENDENCIES: 5 | - ZWSlideViewController 6 | 7 | SPEC CHECKSUMS: 8 | ZWSlideViewController: f279a32b7fd986e55cb9f1756336bb236c901270 9 | 10 | PODFILE CHECKSUM: a21e83cc16e5e67845f1b211ad18694280917841 11 | 12 | COCOAPODS: 1.3.1 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/ZWSlideViewController/ZWSlideViewController-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/ZWViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWViewController.h 3 | // ZWSlideViewController 4 | // 5 | // Created by square on 09/07/2015. 6 | // Copyright (c) 2015 square. All rights reserved. 7 | // 8 | 9 | #import "ZWSViewController.h" 10 | 11 | @interface ZWViewController : ZWSViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSMenuLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSMenuLabel.h 3 | // 4 | 5 | #import 6 | #import "ZWSFlowMenu.h" 7 | 8 | @interface ZWSMenuLabel : UILabel 9 | 10 | @property (nonatomic, strong) UIFont *highlightedFont; 11 | 12 | - (void)transformColor:(float)progress; 13 | 14 | - (void)transformFont:(float)progress; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/ZWSAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSAppDelegate.h 3 | // ZWSlideViewController 4 | // 5 | // Created by square on 09/07/2015. 6 | // Copyright (c) 2015 square. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | 11 | @interface ZWSAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSMenuLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSMenuLabel.h 3 | // 4 | 5 | #import 6 | #import "ZWSFlowMenu.h" 7 | 8 | @interface ZWSMenuLabel : UILabel 9 | 10 | @property (nonatomic, strong) UIFont *highlightedFont; 11 | 12 | - (void)transformColor:(float)progress; 13 | 14 | - (void)transformFont:(float)progress; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ZWSlideViewController 4 | // 5 | // Created by square on 09/07/2015. 6 | // Copyright (c) 2015 square. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | #import "ZWSAppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) 13 | { 14 | @autoreleasepool { 15 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([ZWSAppDelegate class])); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/ZWSlideViewController-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | @import UIKit; 15 | @import Foundation; 16 | #endif 17 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/Images.xcassets/menu.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "menu.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_ZWSlideViewController_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_ZWSlideViewController_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/ZWSlideViewController/ZWSlideViewController.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/ZWSlideViewController 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/ZWSlideViewController 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/ZWSlideViewController/ZWSlideViewController-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "ZWSFlowMenu.h" 14 | #import "ZWSMenuLabel.h" 15 | #import "ZWSPagingView.h" 16 | #import "ZWSSectionBar.h" 17 | #import "ZWSViewController.h" 18 | 19 | FOUNDATION_EXPORT double ZWSlideViewControllerVersionNumber; 20 | FOUNDATION_EXPORT const unsigned char ZWSlideViewControllerVersionString[]; 21 | 22 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | language: objective-c 6 | # cache: cocoapods 7 | # podfile: Example/Podfile 8 | # before_install: 9 | # - gem install cocoapods # Since Travis is not always on latest version 10 | # - pod install --project-directory=Example 11 | install: 12 | - gem install xcpretty --no-rdoc --no-ri --no-document --quiet 13 | script: 14 | - set -o pipefail && xcodebuild test -workspace Example/ZWSlideViewController.xcworkspace -scheme ZWSlideViewController-Example -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO | xcpretty -c 15 | - pod lib lint --quick 16 | -------------------------------------------------------------------------------- /ZWSlideViewController.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ZWSlideViewController", 3 | "version": "0.1.5", 4 | "summary": "Easy to use and customizable slide page view controller for iOS", 5 | "homepage": "https://github.com/squarezw/ZWSlideViewController", 6 | "license": { 7 | "type": "MIT", 8 | "file": "LICENSE.txt" 9 | }, 10 | "authors": { 11 | "square": "square.zhao.wei@gmail.com" 12 | }, 13 | "platforms": { 14 | "ios": "7.0" 15 | }, 16 | "source": { 17 | "git": "https://github.com/squarezw/ZWSlideViewController.git", 18 | "tag": "0.1.5" 19 | }, 20 | "source_files": "Pod/Classes/**/*", 21 | "requires_arc": true 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ZWSlideViewController" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ZWSlideViewController/ZWSlideViewController.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "ZWSlideViewController" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ZWSlideViewController" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ZWSlideViewController/ZWSlideViewController.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "ZWSlideViewController" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | # Pods/ 34 | -------------------------------------------------------------------------------- /Example/Tests/Tests-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 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/Tests/Tests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSlideViewControllerTests.m 3 | // ZWSlideViewControllerTests 4 | // 5 | // Created by square on 09/07/2015. 6 | // Copyright (c) 2015 square. All rights reserved. 7 | // 8 | 9 | @import XCTest; 10 | 11 | @interface Tests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation Tests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | // XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | 36 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/ZWSlideViewController/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.1.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 square.zhao.wei@gmail.com 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 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 square 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 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSViewController.h 3 | // ZWSlideViewController 4 | // 5 | // Created by square on 09/07/2015. 6 | // Copyright (c) 2015 square. All rights reserved. 7 | // 8 | 9 | #import "ZWSPagingView.h" 10 | #import "ZWSSectionBar.h" 11 | 12 | @interface ZWSViewController : UIViewController 13 | 14 | @property (nonatomic, readonly) ZWSPagingView *pagingView; 15 | @property (nonatomic, readonly) ZWSSectionBar *sectionBar; 16 | 17 | /** 18 | Whether to use 3D effects scrolling to next page. Defaults to `NO`. 19 | */ 20 | @property(nonatomic, assign) BOOL useTransform3DEffects; 21 | 22 | @property(nonatomic, assign) CGFloat menuHeight; 23 | 24 | @property(nonatomic, copy) NSArray *menuTitles; 25 | 26 | // This method could be overridden in subclasses to prepare some data source, The default is a nop. 27 | - (void)loadData; 28 | 29 | // This method could be invoked to refresh all subViews. 30 | - (void)refreshViews; 31 | 32 | // This method could be overridden in subclasses to create custom content view in page 33 | - (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSViewController.h 3 | // ZWSlideViewController 4 | // 5 | // Created by square on 09/07/2015. 6 | // Copyright (c) 2015 square. All rights reserved. 7 | // 8 | 9 | #import "ZWSPagingView.h" 10 | #import "ZWSSectionBar.h" 11 | 12 | @interface ZWSViewController : UIViewController 13 | 14 | @property (nonatomic, readonly) ZWSPagingView *pagingView; 15 | @property (nonatomic, readonly) ZWSSectionBar *sectionBar; 16 | 17 | /** 18 | Whether to use 3D effects scrolling to next page. Defaults to `NO`. 19 | */ 20 | @property(nonatomic, assign) BOOL useTransform3DEffects; 21 | 22 | @property(nonatomic, assign) CGFloat menuHeight; 23 | 24 | @property(nonatomic, copy) NSArray *menuTitles; 25 | 26 | // This method could be overridden in subclasses to prepare some data source, The default is a nop. 27 | - (void)loadData; 28 | 29 | // This method could be invoked to refresh all subViews. 30 | - (void)refreshViews; 31 | 32 | // This method could be overridden in subclasses to create custom content view in page 33 | - (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "orientation" : "portrait", 20 | "idiom" : "ipad", 21 | "extent" : "full-screen", 22 | "minimum-system-version" : "7.0", 23 | "scale" : "1x" 24 | }, 25 | { 26 | "orientation" : "landscape", 27 | "idiom" : "ipad", 28 | "extent" : "full-screen", 29 | "minimum-system-version" : "7.0", 30 | "scale" : "1x" 31 | }, 32 | { 33 | "orientation" : "portrait", 34 | "idiom" : "ipad", 35 | "extent" : "full-screen", 36 | "minimum-system-version" : "7.0", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "orientation" : "landscape", 41 | "idiom" : "ipad", 42 | "extent" : "full-screen", 43 | "minimum-system-version" : "7.0", 44 | "scale" : "2x" 45 | } 46 | ], 47 | "info" : { 48 | "version" : 1, 49 | "author" : "xcode" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSSectionBar.h: -------------------------------------------------------------------------------- 1 | // 2 | // JHSBrandSectionBar.h 3 | // 4 | 5 | #import 6 | #import "ZWSFlowMenu.h" 7 | #import "ZWSMenuLabel.h" 8 | 9 | @protocol ZWSSectionBarDelegate; 10 | 11 | @interface ZWSSectionBar : ZWSFlowMenu { 12 | UITapGestureRecognizer *_tapGestureRecognizer; 13 | NSArray *_titles; 14 | } 15 | 16 | @property (nonatomic, strong) UIColor *textColor; // Default: grayColor 17 | @property (nonatomic, strong) UIColor *highlightedTextColor; // Default: redColor 18 | @property (nonatomic, assign) CGFloat indicatorHeight; // Default: 2px 19 | /** 20 | @return `highlightedTextColor` if the value is nil 21 | */ 22 | @property (nonatomic, strong) UIColor *indicatorColor; 23 | 24 | @property (nonatomic, strong) UIFont *nomarlTextFont; // Default: 14.0f 25 | @property (nonatomic, strong) UIFont *selectedTextFont; // Default: 15.0f 26 | 27 | @property(nonatomic, strong) NSArray *titles; 28 | @property(nonatomic, assign) CGSize itemSize; 29 | 30 | @property(nonatomic, weak) id barDelegate; 31 | 32 | - (UIView *)itemForTitle:(NSString *)title; 33 | 34 | @end 35 | 36 | @protocol ZWSSectionBarDelegate 37 | 38 | @optional 39 | 40 | - (void)sectionBar:(ZWSSectionBar *)sectionBar didSelectAtInedx:(NSUInteger)index; 41 | 42 | - (void)didCreateItemView:(UIView *)itemView; 43 | 44 | - (UIView *)menuItemWithTitle:(NSString *)title; 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSSectionBar.h: -------------------------------------------------------------------------------- 1 | // 2 | // JHSBrandSectionBar.h 3 | // 4 | 5 | #import 6 | #import "ZWSFlowMenu.h" 7 | #import "ZWSMenuLabel.h" 8 | 9 | @protocol ZWSSectionBarDelegate; 10 | 11 | @interface ZWSSectionBar : ZWSFlowMenu { 12 | UITapGestureRecognizer *_tapGestureRecognizer; 13 | NSArray *_titles; 14 | } 15 | 16 | @property (nonatomic, strong) UIColor *textColor; // Default: grayColor 17 | @property (nonatomic, strong) UIColor *highlightedTextColor; // Default: redColor 18 | @property (nonatomic, assign) CGFloat indicatorHeight; // Default: 2px 19 | /** 20 | @return `highlightedTextColor` if the value is nil 21 | */ 22 | @property (nonatomic, strong) UIColor *indicatorColor; 23 | 24 | @property (nonatomic, strong) UIFont *nomarlTextFont; // Default: 14.0f 25 | @property (nonatomic, strong) UIFont *selectedTextFont; // Default: 15.0f 26 | 27 | @property(nonatomic, strong) NSArray *titles; 28 | @property(nonatomic, assign) CGSize itemSize; 29 | 30 | @property(nonatomic, weak) id barDelegate; 31 | 32 | - (UIView *)itemForTitle:(NSString *)title; 33 | 34 | @end 35 | 36 | @protocol ZWSSectionBarDelegate 37 | 38 | @optional 39 | 40 | - (void)sectionBar:(ZWSSectionBar *)sectionBar didSelectAtInedx:(NSUInteger)index; 41 | 42 | - (void)didCreateItemView:(UIView *)itemView; 43 | 44 | - (UIView *)menuItemWithTitle:(NSString *)title; 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSFlowMenu.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSFlowMenu.h 3 | // 4 | 5 | #import 6 | 7 | #define ZWStructWith(_Origin_, _Path_, _Value_) \ 8 | ({ \ 9 | typeof(_Origin_) a = (_Origin_); \ 10 | a._Path_ = (_Value_); \ 11 | a; \ 12 | }) 13 | 14 | #define __SetIfMoreThan(_a_, _b_) ((_a_) = MIN((_a_), (_b_))) 15 | #define __SetIfLessThan(_a_, _b_) ((_a_) = MAX((_a_), (_b_))) 16 | 17 | @interface ZWSFlowMenu : UIScrollView 18 | 19 | @property(nonatomic, copy) NSArray *items; 20 | @property(nonatomic, strong) UIView *indicatorView; 21 | @property(nonatomic, assign) NSInteger selectedIndex; 22 | @property(nonatomic, assign) UIEdgeInsets menuInsets; 23 | 24 | - (void)layoutItems; 25 | 26 | - (void)moveToMenuAtIndex:(NSInteger)selectedIndex animated:(BOOL)animated; 27 | 28 | /* 29 | Used a fractional index values to exactly control the menu moving position 30 | floatIndex from (-0.999) to (items.count - 0.001) 31 | */ 32 | - (void)moveToMenuAtFloatIndex:(float)floatIndex animated:(BOOL)animated; 33 | 34 | - (NSInteger)indexOfItemContainsPoint:(CGPoint)point; 35 | 36 | - (BOOL)indexIsValid:(NSInteger)index; 37 | 38 | @end 39 | 40 | @protocol ZWSMenuAppearance 41 | 42 | @optional 43 | 44 | - (void)transformToNormal; 45 | 46 | - (void)transformToHighlight; 47 | 48 | - (void)transformPercent:(float)progressPercent; 49 | 50 | @end -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSFlowMenu.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSFlowMenu.h 3 | // 4 | 5 | #import 6 | 7 | #define ZWStructWith(_Origin_, _Path_, _Value_) \ 8 | ({ \ 9 | typeof(_Origin_) a = (_Origin_); \ 10 | a._Path_ = (_Value_); \ 11 | a; \ 12 | }) 13 | 14 | #define __SetIfMoreThan(_a_, _b_) ((_a_) = MIN((_a_), (_b_))) 15 | #define __SetIfLessThan(_a_, _b_) ((_a_) = MAX((_a_), (_b_))) 16 | 17 | @interface ZWSFlowMenu : UIScrollView 18 | 19 | @property(nonatomic, copy) NSArray *items; 20 | @property(nonatomic, strong) UIView *indicatorView; 21 | @property(nonatomic, assign) NSInteger selectedIndex; 22 | @property(nonatomic, assign) UIEdgeInsets menuInsets; 23 | 24 | - (void)layoutItems; 25 | 26 | - (void)moveToMenuAtIndex:(NSInteger)selectedIndex animated:(BOOL)animated; 27 | 28 | /* 29 | Used a fractional index values to exactly control the menu moving position 30 | floatIndex from (-0.999) to (items.count - 0.001) 31 | */ 32 | - (void)moveToMenuAtFloatIndex:(float)floatIndex animated:(BOOL)animated; 33 | 34 | - (NSInteger)indexOfItemContainsPoint:(CGPoint)point; 35 | 36 | - (BOOL)indexIsValid:(NSInteger)index; 37 | 38 | @end 39 | 40 | @protocol ZWSMenuAppearance 41 | 42 | @optional 43 | 44 | - (void)transformToNormal; 45 | 46 | - (void)transformToHighlight; 47 | 48 | - (void)transformPercent:(float)progressPercent; 49 | 50 | @end -------------------------------------------------------------------------------- /Example/ZWSlideViewController/Images.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 | } -------------------------------------------------------------------------------- /Example/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://ruby.taobao.org/ 3 | specs: 4 | activesupport (4.2.5) 5 | i18n (~> 0.7) 6 | json (~> 1.7, >= 1.7.7) 7 | minitest (~> 5.1) 8 | thread_safe (~> 0.3, >= 0.3.4) 9 | tzinfo (~> 1.1) 10 | claide (0.8.2) 11 | cocoapods (0.37.2) 12 | activesupport (>= 3.2.15) 13 | claide (~> 0.8.1) 14 | cocoapods-core (= 0.37.2) 15 | cocoapods-downloader (~> 0.9.0) 16 | cocoapods-plugins (~> 0.4.2) 17 | cocoapods-trunk (~> 0.6.1) 18 | cocoapods-try (~> 0.4.5) 19 | colored (~> 1.2) 20 | escape (~> 0.0.4) 21 | molinillo (~> 0.2.3) 22 | nap (~> 0.8) 23 | xcodeproj (~> 0.24.2) 24 | cocoapods-core (0.37.2) 25 | activesupport (>= 3.2.15) 26 | fuzzy_match (~> 2.0.4) 27 | nap (~> 0.8.0) 28 | cocoapods-downloader (0.9.3) 29 | cocoapods-packager (1.2.1) 30 | cocoapods (>= 0.37.0) 31 | cocoapods-plugins (0.4.2) 32 | nap 33 | cocoapods-trunk (0.6.4) 34 | nap (>= 0.8, < 2.0) 35 | netrc (= 0.7.8) 36 | cocoapods-try (0.4.5) 37 | colored (1.2) 38 | escape (0.0.4) 39 | fuzzy_match (2.0.4) 40 | i18n (0.7.0) 41 | json (1.8.3) 42 | minitest (5.8.3) 43 | molinillo (0.2.3) 44 | nap (0.8.0) 45 | netrc (0.7.8) 46 | thread_safe (0.3.5) 47 | tzinfo (1.2.2) 48 | thread_safe (~> 0.1) 49 | xcodeproj (0.24.3) 50 | activesupport (>= 3) 51 | colored (~> 1.2) 52 | 53 | PLATFORMS 54 | ruby 55 | 56 | DEPENDENCIES 57 | cocoapods (= 0.37.2) 58 | cocoapods-packager 59 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/ZWSlideViewController-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | Launch Screen 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 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSPagingView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSPagingView.h 3 | // 4 | 5 | #import 6 | 7 | @interface ZWSPage : UIView { 8 | NSUInteger _index; 9 | } 10 | 11 | @property(nonatomic, strong) UIView *contentView; 12 | 13 | @end 14 | 15 | @protocol ZWSPagingViewDelegate; 16 | @protocol ZWSPagingViewDataSource; 17 | 18 | @interface ZWSPagingView : UIScrollView { 19 | BOOL _scrollInfinitelyEnabled; 20 | 21 | NSUInteger _numberOfPages; 22 | 23 | NSMutableSet *_visiblePages; 24 | NSMutableSet *_recycledPages; 25 | 26 | ZWSPage *_centerPage; 27 | 28 | __weak id _pagingDelegate; 29 | __weak id _pagingDataSource; 30 | 31 | __weak id _actualDelegate; 32 | } 33 | 34 | @property(nonatomic, assign) BOOL scrollInfinitelyEnabled; 35 | 36 | @property(nonatomic, weak) id pagingDelegate; 37 | @property(nonatomic, weak) id pagingDataSource; 38 | 39 | @property(nonatomic, readonly) ZWSPage *centerPage; 40 | @property(nonatomic, readonly) NSSet *visiblePages; 41 | 42 | // it will be pre-fetched content and cached for next page 43 | @property(nonatomic, getter=isPreload) BOOL preload; 44 | 45 | - (NSUInteger)indexOfPage:(ZWSPage *)page; 46 | - (NSUInteger)indexOfCenterPage; 47 | 48 | - (ZWSPage *)pageAtLocation:(CGPoint)location; 49 | 50 | - (CGFloat)widthInSight:(ZWSPage *)page; 51 | 52 | - (float)floatIndex; 53 | - (void)moveToPageAtFloatIndex:(float)index animated:(BOOL)animated; 54 | 55 | - (ZWSPage *)dequeueReusablePage; 56 | - (void)reloadPages; 57 | 58 | @end 59 | 60 | @protocol ZWSPagingViewDataSource 61 | 62 | @required 63 | - (NSUInteger)numberOfPagesInPagingView:(ZWSPagingView *)pagingView; 64 | - (ZWSPage *)pagingView:(ZWSPagingView *)pagingView pageForIndex:(NSUInteger)index; 65 | 66 | @end 67 | 68 | @protocol ZWSPagingViewDelegate 69 | 70 | - (void)pagingView:(ZWSPagingView *)pagingView didRemovePage:(ZWSPage *)page; 71 | - (void)pagingView:(ZWSPagingView *)pagingView willMoveToPage:(ZWSPage *)page; 72 | - (void)pagingView:(ZWSPagingView *)pagingView didMoveToPage:(ZWSPage *)page; 73 | - (void)pagingViewLayoutChanged:(ZWSPagingView *)pagingView; 74 | 75 | @end 76 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSPagingView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSPagingView.h 3 | // 4 | 5 | #import 6 | 7 | @interface ZWSPage : UIView { 8 | NSUInteger _index; 9 | } 10 | 11 | @property(nonatomic, strong) UIView *contentView; 12 | 13 | @end 14 | 15 | @protocol ZWSPagingViewDelegate; 16 | @protocol ZWSPagingViewDataSource; 17 | 18 | @interface ZWSPagingView : UIScrollView { 19 | BOOL _scrollInfinitelyEnabled; 20 | 21 | NSUInteger _numberOfPages; 22 | 23 | NSMutableSet *_visiblePages; 24 | NSMutableSet *_recycledPages; 25 | 26 | ZWSPage *_centerPage; 27 | 28 | __weak id _pagingDelegate; 29 | __weak id _pagingDataSource; 30 | 31 | __weak id _actualDelegate; 32 | } 33 | 34 | @property(nonatomic, assign) BOOL scrollInfinitelyEnabled; 35 | 36 | @property(nonatomic, weak) id pagingDelegate; 37 | @property(nonatomic, weak) id pagingDataSource; 38 | 39 | @property(nonatomic, readonly) ZWSPage *centerPage; 40 | @property(nonatomic, readonly) NSSet *visiblePages; 41 | 42 | // it will be pre-fetched content and cached for next page 43 | @property(nonatomic, getter=isPreload) BOOL preload; 44 | 45 | - (NSUInteger)indexOfPage:(ZWSPage *)page; 46 | - (NSUInteger)indexOfCenterPage; 47 | 48 | - (ZWSPage *)pageAtLocation:(CGPoint)location; 49 | 50 | - (CGFloat)widthInSight:(ZWSPage *)page; 51 | 52 | - (float)floatIndex; 53 | - (void)moveToPageAtFloatIndex:(float)index animated:(BOOL)animated; 54 | 55 | - (ZWSPage *)dequeueReusablePage; 56 | - (void)reloadPages; 57 | 58 | @end 59 | 60 | @protocol ZWSPagingViewDataSource 61 | 62 | @required 63 | - (NSUInteger)numberOfPagesInPagingView:(ZWSPagingView *)pagingView; 64 | - (ZWSPage *)pagingView:(ZWSPagingView *)pagingView pageForIndex:(NSUInteger)index; 65 | 66 | @end 67 | 68 | @protocol ZWSPagingViewDelegate 69 | 70 | - (void)pagingView:(ZWSPagingView *)pagingView didRemovePage:(ZWSPage *)page; 71 | - (void)pagingView:(ZWSPagingView *)pagingView willMoveToPage:(ZWSPage *)page; 72 | - (void)pagingView:(ZWSPagingView *)pagingView didMoveToPage:(ZWSPage *)page; 73 | - (void)pagingViewLayoutChanged:(ZWSPagingView *)pagingView; 74 | 75 | @end 76 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSMenuLabel.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSMenuLabel.m 3 | // 4 | 5 | #import "ZWSMenuLabel.h" 6 | 7 | @interface ZWSMenuLabel () 8 | 9 | @property (nonatomic, copy) UIColor *originFrontColor; // Default: textColor 10 | @property (nonatomic, copy) UIFont *originFont; // Default: textFont 11 | 12 | @end 13 | 14 | @implementation ZWSMenuLabel 15 | 16 | static float (^mix)(float a, float b, float p) = ^float(float a, float b, float p) { 17 | return a + (b - a) * p; 18 | }; 19 | 20 | - (instancetype)init 21 | { 22 | self = [super init]; 23 | if (self) { 24 | self.backgroundColor = [UIColor clearColor]; 25 | self.lineBreakMode = NSLineBreakByCharWrapping; 26 | } 27 | return self; 28 | } 29 | 30 | - (void)setHighlightedFont:(UIFont *)highlightedFont 31 | { 32 | _highlightedFont = highlightedFont; 33 | } 34 | 35 | - (void)transformColor:(float)progress 36 | { 37 | NSAssert(self.highlightedTextColor, @"You should setting highlightedTextColor!"); 38 | if (!self.highlightedTextColor) { 39 | return; 40 | } 41 | 42 | if (!self.originFrontColor) { 43 | self.originFrontColor = [self.textColor copy]; 44 | } 45 | 46 | CGFloat fr, fg, fb, fa; 47 | [self.originFrontColor getRed:&fr green:&fg blue:&fb alpha:&fa]; 48 | CGFloat tr, tg, tb, ta; 49 | [self.highlightedTextColor getRed:&tr green:&tg blue:&tb alpha:&ta]; 50 | 51 | self.textColor = [UIColor colorWithRed:mix(fr, tr, progress) 52 | green:mix(fg, tg, progress) 53 | blue:mix(fb, tb, progress) 54 | alpha:ta]; 55 | } 56 | 57 | - (void)transformFont:(float)progress 58 | { 59 | NSAssert(self.highlightedFont, @"You should setting highlightedFont!"); 60 | if (!self.highlightedFont) { 61 | return; 62 | } 63 | 64 | if (!self.originFont) { 65 | self.originFont = [self.font copy]; 66 | } 67 | self.font = [UIFont systemFontOfSize:mix(self.originFont.pointSize, self.highlightedFont.pointSize, progress)]; 68 | } 69 | 70 | - (void)transformToNormal 71 | { 72 | [self transformColor:.0]; 73 | } 74 | 75 | - (void)transformToHighlight 76 | { 77 | [self transformColor:1.0]; 78 | } 79 | 80 | - (void)transformPercent:(float)progressPercent 81 | { 82 | [self transformColor:progressPercent]; 83 | } 84 | 85 | @end -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSMenuLabel.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSMenuLabel.m 3 | // 4 | 5 | #import "ZWSMenuLabel.h" 6 | 7 | @interface ZWSMenuLabel () 8 | 9 | @property (nonatomic, copy) UIColor *originFrontColor; // Default: textColor 10 | @property (nonatomic, copy) UIFont *originFont; // Default: textFont 11 | 12 | @end 13 | 14 | @implementation ZWSMenuLabel 15 | 16 | static float (^mix)(float a, float b, float p) = ^float(float a, float b, float p) { 17 | return a + (b - a) * p; 18 | }; 19 | 20 | - (instancetype)init 21 | { 22 | self = [super init]; 23 | if (self) { 24 | self.backgroundColor = [UIColor clearColor]; 25 | self.lineBreakMode = NSLineBreakByCharWrapping; 26 | } 27 | return self; 28 | } 29 | 30 | - (void)setHighlightedFont:(UIFont *)highlightedFont 31 | { 32 | _highlightedFont = highlightedFont; 33 | } 34 | 35 | - (void)transformColor:(float)progress 36 | { 37 | NSAssert(self.highlightedTextColor, @"You should setting highlightedTextColor!"); 38 | if (!self.highlightedTextColor) { 39 | return; 40 | } 41 | 42 | if (!self.originFrontColor) { 43 | self.originFrontColor = [self.textColor copy]; 44 | } 45 | 46 | CGFloat fr, fg, fb, fa; 47 | [self.originFrontColor getRed:&fr green:&fg blue:&fb alpha:&fa]; 48 | CGFloat tr, tg, tb, ta; 49 | [self.highlightedTextColor getRed:&tr green:&tg blue:&tb alpha:&ta]; 50 | 51 | self.textColor = [UIColor colorWithRed:mix(fr, tr, progress) 52 | green:mix(fg, tg, progress) 53 | blue:mix(fb, tb, progress) 54 | alpha:ta]; 55 | } 56 | 57 | - (void)transformFont:(float)progress 58 | { 59 | NSAssert(self.highlightedFont, @"You should setting highlightedFont!"); 60 | if (!self.highlightedFont) { 61 | return; 62 | } 63 | 64 | if (!self.originFont) { 65 | self.originFont = [self.font copy]; 66 | } 67 | self.font = [UIFont systemFontOfSize:mix(self.originFont.pointSize, self.highlightedFont.pointSize, progress)]; 68 | } 69 | 70 | - (void)transformToNormal 71 | { 72 | [self transformColor:.0]; 73 | } 74 | 75 | - (void)transformToHighlight 76 | { 77 | [self transformColor:1.0]; 78 | } 79 | 80 | - (void)transformPercent:(float)progressPercent 81 | { 82 | [self transformColor:progressPercent]; 83 | } 84 | 85 | @end -------------------------------------------------------------------------------- /Example/ZWSlideViewController/ZWSAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSAppDelegate.m 3 | // ZWSlideViewController 4 | // 5 | // Created by square on 09/07/2015. 6 | // Copyright (c) 2015 square. All rights reserved. 7 | // 8 | 9 | #import "ZWSAppDelegate.h" 10 | #import "ZWViewController.h" 11 | 12 | @implementation ZWSAppDelegate 13 | 14 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 15 | { 16 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 17 | 18 | UINavigationController *vc = [[UINavigationController alloc] initWithRootViewController:[ZWViewController new]]; 19 | 20 | self.window.rootViewController = vc; 21 | self.window.backgroundColor = [UIColor whiteColor]; 22 | [self.window makeKeyAndVisible]; 23 | 24 | return YES; 25 | } 26 | 27 | - (void)applicationWillResignActive:(UIApplication *)application 28 | { 29 | // 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. 30 | // 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. 31 | } 32 | 33 | - (void)applicationDidEnterBackground:(UIApplication *)application 34 | { 35 | // 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. 36 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 37 | } 38 | 39 | - (void)applicationWillEnterForeground:(UIApplication *)application 40 | { 41 | // 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. 42 | } 43 | 44 | - (void)applicationDidBecomeActive:(UIApplication *)application 45 | { 46 | // 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. 47 | } 48 | 49 | - (void)applicationWillTerminate:(UIApplication *)application 50 | { 51 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 52 | } 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ZWSlideViewController 2 | 3 | [![CI Status](http://img.shields.io/travis/squarezw/ZWSlideViewController.svg?style=flat)](https://travis-ci.org/squarezw/ZWSlideViewController) 4 | [![Version](https://img.shields.io/cocoapods/v/ZWSlideViewController.svg?style=flat)](http://cocoapods.org/pods/ZWSlideViewController) 5 | [![License](https://img.shields.io/cocoapods/l/ZWSlideViewController.svg?style=flat)](http://cocoapods.org/pods/ZWSlideViewController) 6 | [![Platform](https://img.shields.io/cocoapods/p/ZWSlideViewController.svg?style=flat)](http://cocoapods.org/pods/ZWSlideViewController) 7 | 8 | `ZWSlideViewController` is a view controller container that manages a customizable sliding views and menus. 9 | 10 | ## From CocoaPods 11 | 12 | ZWSlideViewController is available through [CocoaPods](http://cocoapods.org). To install 13 | it, simply add the following line to your Podfile: 14 | 15 | ```ruby 16 | pod "ZWSlideViewController" 17 | ``` 18 | 19 | ## Screenshots 20 | 21 | ![Screenshot](https://github.com/squarezw/ZWSlideViewController/blob/master/screenshot.gif) 22 | 23 | 24 | 25 | 26 | 27 | 28 | ## Usage 29 | 30 | To show slide page use the following code: 31 | 32 | ### Step 1 33 | 34 | create a class inherits from the ZWSViewController 35 | 36 | ``` 37 | @interface ZWViewController : ZWSViewController 38 | 39 | @end 40 | ``` 41 | 42 | 43 | ### Step 2 44 | 45 | implements the required methods 46 | 47 | ``` 48 | - (void)loadData 49 | { 50 | self.menuTitles = @[@"Drama", @"Family", @"Fantasy", @"Thriller", @"Horror", @"Comedy"]; 51 | } 52 | 53 | - (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index 54 | { 55 | UITableView *tableView = [[UITableView alloc] initWithFrame:page.bounds]; 56 | 57 | [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"kCellIdentifier"]; 58 | tableView.dataSource = self; 59 | 60 | tableView.backgroundColor = [UIColor colorWithRed:0.5 green:0.1*index blue:0.2*index alpha:1]; 61 | 62 | return tableView; 63 | } 64 | ``` 65 | 66 | or put any views what you want 67 | 68 | ``` 69 | - (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index 70 | { 71 | UIView *view = [[UIView alloc] init]; 72 | 73 | view.backgroundColor = [UIColor colorWithRed:0.5 green:0.1*index blue:0.2*index alpha:1]; 74 | 75 | return view; 76 | } 77 | 78 | ``` 79 | 80 | if you have a asynchronous loading requests data to refresh the slide page, you need invoke following code after requests finish 81 | 82 | ``` 83 | [self refreshViews]; 84 | 85 | ``` 86 | 87 | you can also put some adjusted style codes here 88 | 89 | ``` 90 | self.sectionBar.selectedTextColor = [UIColor blueColor]; 91 | self.sectionBar.nomarlTextColor = [UIColor redColor]; 92 | self.sectionBar.backgroundColor = [UIColor blackColor]; 93 | self.menuHeight = 64.0f; 94 | ``` 95 | 96 | Take a look at the Example project to see how to use customization using more 97 | 98 | 99 | 100 | 101 | ## Author 102 | 103 | [@squarezw](https://github.com/squarezw) , [@lamo](https://github.com/Lamod) 104 | 105 | ## License 106 | 107 | ZWSlideViewController is available under the MIT license. See the LICENSE file for more info. 108 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/README.md: -------------------------------------------------------------------------------- 1 | # ZWSlideViewController 2 | 3 | [![CI Status](http://img.shields.io/travis/square/ZWSlideViewController.svg?style=flat)](https://travis-ci.org/square/ZWSlideViewController) 4 | [![Version](https://img.shields.io/cocoapods/v/ZWSlideViewController.svg?style=flat)](http://cocoapods.org/pods/ZWSlideViewController) 5 | [![License](https://img.shields.io/cocoapods/l/ZWSlideViewController.svg?style=flat)](http://cocoapods.org/pods/ZWSlideViewController) 6 | [![Platform](https://img.shields.io/cocoapods/p/ZWSlideViewController.svg?style=flat)](http://cocoapods.org/pods/ZWSlideViewController) 7 | 8 | `ZWSlideViewController` is a view controller container that manages a customizable sliding views and menus. 9 | 10 | ## From CocoaPods 11 | 12 | ZWSlideViewController is available through [CocoaPods](http://cocoapods.org). To install 13 | it, simply add the following line to your Podfile: 14 | 15 | ```ruby 16 | pod "ZWSlideViewController" 17 | ``` 18 | 19 | ## Screenshots 20 | 21 | ![Screenshot](https://github.com/squarezw/ZWSlideViewController/blob/master/screenshot.gif) 22 | 23 | 24 | 25 | 26 | 27 | 28 | ## Usage 29 | 30 | To show slide page use the following code: 31 | 32 | ### Step 1 33 | 34 | create a class inherits from the ZWSViewController 35 | 36 | ``` 37 | @interface ZWViewController : ZWSViewController 38 | 39 | @end 40 | ``` 41 | 42 | 43 | ### Step 2 44 | 45 | implements the required methods 46 | 47 | ``` 48 | - (void)loadData 49 | { 50 | self.menuTitles = @[@"Drama", @"Family", @"Fantasy", @"Thriller", @"Horror", @"Comedy"]; 51 | } 52 | 53 | - (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index 54 | { 55 | UITableView *tableView = [[UITableView alloc] initWithFrame:page.bounds]; 56 | 57 | [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"kCellIdentifier"]; 58 | tableView.dataSource = self; 59 | 60 | tableView.backgroundColor = [UIColor colorWithRed:0.5 green:0.1*index blue:0.2*index alpha:1]; 61 | 62 | return tableView; 63 | } 64 | ``` 65 | 66 | or put any views what you want 67 | 68 | ``` 69 | - (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index 70 | { 71 | UIView *view = [[UIView alloc] init]; 72 | 73 | view.backgroundColor = [UIColor colorWithRed:0.5 green:0.1*index blue:0.2*index alpha:1]; 74 | 75 | return view; 76 | } 77 | 78 | ``` 79 | 80 | if you have a asynchronous loading requests data to refresh the slide page, you need invoke following code after requests finish 81 | 82 | ``` 83 | [self refreshViews]; 84 | 85 | ``` 86 | 87 | you can also put some adjusted style codes here 88 | 89 | ``` 90 | self.sectionBar.selectedTextColor = [UIColor blueColor]; 91 | self.sectionBar.nomarlTextColor = [UIColor redColor]; 92 | self.sectionBar.backgroundColor = [UIColor blackColor]; 93 | self.menuHeight = 64.0f; 94 | ``` 95 | 96 | Take a look at the Example project to see how to use customization using more 97 | 98 | 99 | 100 | 101 | ## Author 102 | 103 | [@squarezw](https://github.com/squarezw) , [@lamo](https://github.com/Lamod) 104 | 105 | ## License 106 | 107 | ZWSlideViewController is available under the MIT license. See the LICENSE file for more info. 108 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/ZWViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWViewController.m 3 | // ZWSlideViewController 4 | // 5 | // Created by square on 02/17/2016. 6 | // Copyright (c) 2015 square. All rights reserved. 7 | // 8 | 9 | #import "ZWViewController.h" 10 | 11 | @interface ZWViewController () 12 | 13 | @end 14 | 15 | @implementation ZWViewController 16 | 17 | - (void)viewDidLoad 18 | { 19 | [super viewDidLoad]; 20 | self.title = @"ZWSlideViewController"; 21 | } 22 | 23 | - (void)loadData 24 | { 25 | self.menuTitles = @[@"Drama", @"Family", @"Fantasy", @"Thriller", @"Horror", @"Comedy"]; 26 | 27 | self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Style" style:UIBarButtonItemStyleDone target:self action:@selector(switchStyle:)]; 28 | 29 | self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Move" style:UIBarButtonItemStyleDone target:self action:@selector(moveManually:)]; 30 | } 31 | 32 | #pragma mark - Events 33 | 34 | - (void)switchStyle:(id)sender 35 | { 36 | // if you have a asynchronous loading requests data to refresh the slide page 37 | // self.menuTitles = @[@"Drama", @"Family", @"Fantasy", @"Thriller", @"Horror", @"Comedy"]; 38 | 39 | self.sectionBar.highlightedTextColor = [UIColor blueColor]; 40 | self.sectionBar.textColor = [UIColor redColor]; 41 | self.sectionBar.backgroundColor = [UIColor blackColor]; 42 | self.sectionBar.indicatorHeight = 5.0f; 43 | self.menuHeight = 64.0f; 44 | 45 | self.useTransform3DEffects = YES; 46 | 47 | [self refreshViews]; 48 | } 49 | 50 | - (void)moveManually:(id)sender 51 | { 52 | [self.pagingView moveToPageAtFloatIndex:arc4random() % (self.menuTitles.count - 1) animated:YES]; 53 | } 54 | 55 | #pragma mark - ZWSPagingViewDataSource 56 | 57 | - (ZWSPage *)pagingView:(ZWSPagingView *)pagingView pageForIndex:(NSUInteger)index 58 | { 59 | ZWSPage *page = [super pagingView:pagingView pageForIndex:index]; 60 | return page; 61 | } 62 | 63 | - (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index 64 | { 65 | UITableView *tableView = [[UITableView alloc] initWithFrame:page.bounds]; 66 | 67 | [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"kCellIdentifier"]; 68 | tableView.dataSource = self; 69 | 70 | tableView.backgroundColor = [UIColor colorWithRed:0.5 green:0.1*index blue:0.2*index alpha:1]; 71 | 72 | return tableView; 73 | } 74 | 75 | // Example 2 76 | //- (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index 77 | //{ 78 | // UIView *view = [[UIView alloc] init]; 79 | // 80 | // view.backgroundColor = [UIColor colorWithRed:0.5 green:0.1*index blue:0.2*index alpha:1]; 81 | // 82 | // return view; 83 | //} 84 | 85 | //- (UIView *)menuItemWithTitle:(NSString *)title 86 | //{ 87 | // UIImageView *iv = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)]; 88 | // iv.image = [UIImage imageNamed:@"menu"]; 89 | // return iv; 90 | //} 91 | 92 | #pragma mark - UITableViewDataSource 93 | 94 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 95 | return 12; 96 | } 97 | 98 | - (NSInteger)tableView:(UITableView *)tableView 99 | numberOfRowsInSection:(NSInteger)section 100 | { 101 | return 1; 102 | } 103 | 104 | - (UITableViewCell *)tableView:(UITableView *)tableView 105 | cellForRowAtIndexPath:(NSIndexPath *)indexPath 106 | { 107 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"kCellIdentifier" forIndexPath:indexPath]; 108 | cell.backgroundColor = [UIColor clearColor]; 109 | cell.textLabel.textColor = [UIColor whiteColor]; 110 | cell.textLabel.text = @"For Test......"; 111 | 112 | return cell; 113 | } 114 | 115 | @end 116 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController.xcodeproj/xcshareddata/xcschemes/ZWSlideViewController-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSViewController.m 3 | // ZWSlideViewController 4 | // 5 | 6 | #import "ZWSViewController.h" 7 | 8 | @interface ZWSViewController () 9 | 10 | @end 11 | 12 | @implementation ZWSViewController 13 | 14 | - (instancetype)initWithCoder:(NSCoder *)coder 15 | { 16 | self = [super initWithCoder:coder]; 17 | if (self) { 18 | [self initSelf]; 19 | } 20 | return self; 21 | } 22 | 23 | - (instancetype)init 24 | { 25 | self = [super init]; 26 | if (self) { 27 | [self initSelf]; 28 | } 29 | return self; 30 | } 31 | 32 | - (void)initSelf 33 | { 34 | self.useTransform3DEffects = NO; 35 | 36 | if (!_sectionBar) { 37 | _sectionBar = [[ZWSSectionBar alloc] init]; 38 | _sectionBar.barDelegate = self; 39 | _sectionBar.menuInsets = UIEdgeInsetsMake(0, 10, 0, 10); 40 | _sectionBar.backgroundColor = [UIColor whiteColor]; 41 | } 42 | 43 | if (!_pagingView) { 44 | _pagingView = [[ZWSPagingView alloc] init]; 45 | _pagingView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 46 | _pagingView.pagingDataSource = self; 47 | _pagingView.pagingDelegate = self; 48 | } 49 | } 50 | 51 | - (void)viewDidLoad 52 | { 53 | [super viewDidLoad]; 54 | 55 | self.edgesForExtendedLayout = UIRectEdgeNone; 56 | 57 | [self loadData]; 58 | 59 | [self refreshViews]; 60 | } 61 | 62 | - (CGFloat)menuHeight 63 | { 64 | if (!_menuHeight) { 65 | return 44.0f; 66 | } 67 | return _menuHeight; 68 | } 69 | 70 | #pragma mark - Public methods 71 | 72 | - (void)loadData 73 | { 74 | // do nothing 75 | } 76 | 77 | - (void)refreshViews 78 | { 79 | _sectionBar.frame = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, self.menuHeight); 80 | [self.view addSubview:_sectionBar]; 81 | 82 | _pagingView.frame = CGRectMake(self.view.bounds.origin.x, self.sectionBar.frame.size.height, self.view.bounds.size.width, self.view.bounds.size.height - self.sectionBar.frame.size.height); 83 | [self.view insertSubview:_pagingView belowSubview:_sectionBar]; 84 | 85 | [_pagingView reloadPages]; 86 | _sectionBar.titles = self.menuTitles; 87 | } 88 | 89 | #pragma mark - Override Methods 90 | 91 | - (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index 92 | { 93 | // subclass could override 94 | return nil; 95 | } 96 | 97 | #pragma mark - ZWSPagingViewDataSource 98 | 99 | - (NSUInteger)numberOfPagesInPagingView:(ZWSPagingView *)pagingView { 100 | return [[self menuTitles] count]; 101 | } 102 | 103 | - (ZWSPage *)pagingView:(ZWSPagingView *)pagingView pageForIndex:(NSUInteger)index { 104 | ZWSPage *page = [pagingView dequeueReusablePage]; 105 | if (!page) { 106 | page = [ZWSPage new]; 107 | } 108 | 109 | return page; 110 | } 111 | 112 | #pragma mark - ZWSPagingViewDelegate 113 | 114 | - (void)pagingView:(ZWSPagingView *)pagingView didRemovePage:(ZWSPage *)page { 115 | if (pagingView.centerPage != page) { 116 | return; 117 | } 118 | } 119 | 120 | - (void)pagingView:(ZWSPagingView *)pagingView willMoveToPage:(ZWSPage *)page { 121 | page.contentView = [self contentViewForPage:(ZWSPage *)page atIndex:[pagingView indexOfPage:page]]; 122 | } 123 | 124 | - (void)pagingView:(ZWSPagingView *)pagingView didMoveToPage:(ZWSPage *)page { 125 | } 126 | 127 | - (void)pagingViewLayoutChanged:(ZWSPagingView *)pagingView { 128 | if (self.useTransform3DEffects) { 129 | [self transform3DEffects:pagingView]; 130 | } 131 | 132 | [_sectionBar moveToMenuAtFloatIndex:pagingView.floatIndex animated:YES]; 133 | } 134 | 135 | #pragma mark - ZWSSectionBarDelegate 136 | 137 | - (void)sectionBar:(ZWSSectionBar *)sectionBar didSelectAtInedx:(NSUInteger)index 138 | { 139 | [_pagingView moveToPageAtFloatIndex:index animated:YES]; 140 | } 141 | 142 | - (void)didCreateItemView:(UIView *)itemView 143 | { 144 | 145 | } 146 | 147 | #pragma mark - Private Methods 148 | 149 | - (void)transform3DEffects:(ZWSPagingView *)pagingView 150 | { 151 | CGFloat ratio = .0, scale; 152 | for (ZWSPage *page in pagingView.visiblePages) { 153 | ratio = [pagingView widthInSight:page] / CGRectGetWidth(page.frame); 154 | scale = .9 + ratio * .1; 155 | 156 | CATransform3D t = CATransform3DMakeScale(scale, scale, scale); 157 | 158 | page.layer.transform = t; 159 | } 160 | } 161 | 162 | 163 | @end 164 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController/Launch Screen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSViewController.m 3 | // ZWSlideViewController 4 | // 5 | 6 | #import "ZWSViewController.h" 7 | 8 | @interface ZWSViewController () 9 | 10 | @end 11 | 12 | @implementation ZWSViewController 13 | 14 | - (instancetype)initWithCoder:(NSCoder *)coder 15 | { 16 | self = [super initWithCoder:coder]; 17 | if (self) { 18 | [self initSelf]; 19 | } 20 | return self; 21 | } 22 | 23 | - (instancetype)init 24 | { 25 | self = [super init]; 26 | if (self) { 27 | [self initSelf]; 28 | } 29 | return self; 30 | } 31 | 32 | - (void)initSelf 33 | { 34 | self.useTransform3DEffects = NO; 35 | 36 | if (!_sectionBar) { 37 | _sectionBar = [[ZWSSectionBar alloc] init]; 38 | _sectionBar.barDelegate = self; 39 | _sectionBar.menuInsets = UIEdgeInsetsMake(0, 10, 0, 10); 40 | _sectionBar.backgroundColor = [UIColor whiteColor]; 41 | } 42 | 43 | if (!_pagingView) { 44 | _pagingView = [[ZWSPagingView alloc] init]; 45 | _pagingView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 46 | _pagingView.pagingDataSource = self; 47 | _pagingView.pagingDelegate = self; 48 | } 49 | } 50 | 51 | - (void)viewDidLoad 52 | { 53 | [super viewDidLoad]; 54 | 55 | self.edgesForExtendedLayout = UIRectEdgeNone; 56 | 57 | [self loadData]; 58 | 59 | [self refreshViews]; 60 | } 61 | 62 | - (CGFloat)menuHeight 63 | { 64 | if (!_menuHeight) { 65 | return 44.0f; 66 | } 67 | return _menuHeight; 68 | } 69 | 70 | #pragma mark - Public methods 71 | 72 | - (void)loadData 73 | { 74 | // do nothing 75 | } 76 | 77 | - (void)refreshViews 78 | { 79 | _sectionBar.frame = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, self.menuHeight); 80 | [self.view addSubview:_sectionBar]; 81 | 82 | _pagingView.frame = CGRectMake(self.view.bounds.origin.x, self.sectionBar.frame.size.height, self.view.bounds.size.width, self.view.bounds.size.height - self.sectionBar.frame.size.height); 83 | [self.view insertSubview:_pagingView belowSubview:_sectionBar]; 84 | 85 | [_pagingView reloadPages]; 86 | _sectionBar.titles = self.menuTitles; 87 | } 88 | 89 | #pragma mark - Override Methods 90 | 91 | - (UIView *)contentViewForPage:(ZWSPage *)page atIndex:(NSInteger)index 92 | { 93 | // subclass could override 94 | return nil; 95 | } 96 | 97 | #pragma mark - ZWSPagingViewDataSource 98 | 99 | - (NSUInteger)numberOfPagesInPagingView:(ZWSPagingView *)pagingView { 100 | return [[self menuTitles] count]; 101 | } 102 | 103 | - (ZWSPage *)pagingView:(ZWSPagingView *)pagingView pageForIndex:(NSUInteger)index { 104 | ZWSPage *page = [pagingView dequeueReusablePage]; 105 | if (!page) { 106 | page = [ZWSPage new]; 107 | } 108 | 109 | return page; 110 | } 111 | 112 | #pragma mark - ZWSPagingViewDelegate 113 | 114 | - (void)pagingView:(ZWSPagingView *)pagingView didRemovePage:(ZWSPage *)page { 115 | if (pagingView.centerPage != page) { 116 | return; 117 | } 118 | } 119 | 120 | - (void)pagingView:(ZWSPagingView *)pagingView willMoveToPage:(ZWSPage *)page { 121 | page.contentView = [self contentViewForPage:(ZWSPage *)page atIndex:[pagingView indexOfPage:page]]; 122 | } 123 | 124 | - (void)pagingView:(ZWSPagingView *)pagingView didMoveToPage:(ZWSPage *)page { 125 | } 126 | 127 | - (void)pagingViewLayoutChanged:(ZWSPagingView *)pagingView { 128 | if (self.useTransform3DEffects) { 129 | [self transform3DEffects:pagingView]; 130 | } 131 | 132 | [_sectionBar moveToMenuAtFloatIndex:pagingView.floatIndex animated:YES]; 133 | } 134 | 135 | #pragma mark - ZWSSectionBarDelegate 136 | 137 | - (void)sectionBar:(ZWSSectionBar *)sectionBar didSelectAtInedx:(NSUInteger)index 138 | { 139 | [_pagingView moveToPageAtFloatIndex:index animated:YES]; 140 | } 141 | 142 | - (void)didCreateItemView:(UIView *)itemView 143 | { 144 | 145 | } 146 | 147 | #pragma mark - Private Methods 148 | 149 | - (void)transform3DEffects:(ZWSPagingView *)pagingView 150 | { 151 | CGFloat ratio = .0, scale; 152 | for (ZWSPage *page in pagingView.visiblePages) { 153 | ratio = [pagingView widthInSight:page] / CGRectGetWidth(page.frame); 154 | scale = .9 + ratio * .1; 155 | 156 | CATransform3D t = CATransform3DMakeScale(scale, scale, scale); 157 | 158 | page.layer.transform = t; 159 | } 160 | } 161 | 162 | 163 | @end 164 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example-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 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 10 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 11 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 12 | 13 | install_framework() 14 | { 15 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 16 | local source="${BUILT_PRODUCTS_DIR}/$1" 17 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 18 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 19 | elif [ -r "$1" ]; then 20 | local source="$1" 21 | fi 22 | 23 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 24 | 25 | if [ -L "${source}" ]; then 26 | echo "Symlinked..." 27 | source="$(readlink "${source}")" 28 | fi 29 | 30 | # Use filter instead of exclude so missing patterns don't throw errors. 31 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 32 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 33 | 34 | local basename 35 | basename="$(basename -s .framework "$1")" 36 | binary="${destination}/${basename}.framework/${basename}" 37 | if ! [ -r "$binary" ]; then 38 | binary="${destination}/${basename}" 39 | fi 40 | 41 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 42 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 43 | strip_invalid_archs "$binary" 44 | fi 45 | 46 | # Resign the code if required by the build settings to avoid unstable apps 47 | code_sign_if_enabled "${destination}/$(basename "$1")" 48 | 49 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 50 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 51 | local swift_runtime_libs 52 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 53 | for lib in $swift_runtime_libs; do 54 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 55 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 56 | code_sign_if_enabled "${destination}/${lib}" 57 | done 58 | fi 59 | } 60 | 61 | # Copies the dSYM of a vendored framework 62 | install_dsym() { 63 | local source="$1" 64 | if [ -r "$source" ]; then 65 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" 66 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" 67 | fi 68 | } 69 | 70 | # Signs a framework with the provided identity 71 | code_sign_if_enabled() { 72 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 73 | # Use the current code_sign_identitiy 74 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 75 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 76 | 77 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 78 | code_sign_cmd="$code_sign_cmd &" 79 | fi 80 | echo "$code_sign_cmd" 81 | eval "$code_sign_cmd" 82 | fi 83 | } 84 | 85 | # Strip invalid architectures 86 | strip_invalid_archs() { 87 | binary="$1" 88 | # Get architectures for current file 89 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 90 | stripped="" 91 | for arch in $archs; do 92 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 93 | # Strip non-valid architectures in-place 94 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 95 | stripped="$stripped $arch" 96 | fi 97 | done 98 | if [[ "$stripped" ]]; then 99 | echo "Stripped $binary of architectures:$stripped" 100 | fi 101 | } 102 | 103 | 104 | if [[ "$CONFIGURATION" == "Debug" ]]; then 105 | install_framework "${BUILT_PRODUCTS_DIR}/ZWSlideViewController/ZWSlideViewController.framework" 106 | fi 107 | if [[ "$CONFIGURATION" == "Release" ]]; then 108 | install_framework "${BUILT_PRODUCTS_DIR}/ZWSlideViewController/ZWSlideViewController.framework" 109 | fi 110 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 111 | wait 112 | fi 113 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSSectionBar.m: -------------------------------------------------------------------------------- 1 | // 2 | // JHSBrandSectionBar.m 3 | // 4 | 5 | #import "ZWSSectionBar.h" 6 | 7 | @interface ZWSSectionBar () 8 | 9 | @end 10 | 11 | @implementation ZWSSectionBar 12 | 13 | @synthesize highlightedTextColor = _highlightedTextColor; 14 | @synthesize textColor = _textColor; 15 | 16 | - (instancetype)initWithFrame:(CGRect)frame { 17 | if (self = [super initWithFrame:frame]) { 18 | 19 | _tapGestureRecognizer = 20 | [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; 21 | [self addGestureRecognizer:_tapGestureRecognizer]; 22 | 23 | self.scrollsToTop = NO; 24 | } 25 | 26 | return self; 27 | } 28 | 29 | - (UIColor *)textColor 30 | { 31 | if (!_textColor) { 32 | return [UIColor grayColor]; 33 | } 34 | return _textColor; 35 | } 36 | 37 | - (UIColor *)highlightedTextColor 38 | { 39 | if (!_highlightedTextColor) { 40 | return [UIColor redColor]; 41 | } 42 | return _highlightedTextColor; 43 | } 44 | 45 | - (UIFont *)nomarlTextFont 46 | { 47 | if (!_nomarlTextFont) { 48 | return [UIFont systemFontOfSize:14.0f]; 49 | } 50 | return _nomarlTextFont; 51 | } 52 | 53 | - (UIFont *)selectedTextFont 54 | { 55 | if (!_selectedTextFont) { 56 | return [UIFont systemFontOfSize:15.0f]; 57 | } 58 | return _selectedTextFont; 59 | } 60 | 61 | - (void)setHighlightedTextColor:(UIColor *)highlightedTextColor 62 | { 63 | _highlightedTextColor = highlightedTextColor; 64 | for (id item in self.items) { 65 | if ([item isKindOfClass:[UILabel class]]) { 66 | ((UILabel *)item).highlightedTextColor = _highlightedTextColor; 67 | } 68 | } 69 | } 70 | 71 | - (void)setTextColor:(UIColor *)textColor 72 | { 73 | _textColor = textColor; 74 | for (id item in self.items) { 75 | if ([item isKindOfClass:[UILabel class]]) { 76 | ((UILabel *)item).textColor = _textColor; 77 | } 78 | } 79 | } 80 | 81 | - (void)setTitles:(NSArray *)titles { 82 | _titles = titles; 83 | 84 | NSMutableArray *items = [NSMutableArray arrayWithCapacity:titles.count]; 85 | 86 | if ([titles count] > 0) { 87 | 88 | for (NSString *s in titles) { 89 | [items addObject:[self itemForTitle:s]]; 90 | } 91 | 92 | UIView *iv = [[UIView alloc] initWithFrame:CGRectMake(.0, .0, 2.0, 10.0)]; 93 | UIView *lv = [[UIView alloc] initWithFrame:CGRectMake(.0, iv.bounds.size.height - (self.indicatorHeight?:2), 2.0, self.indicatorHeight?:2)]; 94 | iv.userInteractionEnabled = NO; 95 | lv.backgroundColor = self.indicatorColor?:self.highlightedTextColor; 96 | lv.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; 97 | [iv addSubview:lv]; 98 | 99 | self.items = items; 100 | self.indicatorView = iv; 101 | } else { 102 | self.items = nil; 103 | self.indicatorView = nil; 104 | } 105 | } 106 | 107 | - (void)setItemSize:(CGSize)itemSize { 108 | if (CGSizeEqualToSize(itemSize, _itemSize)) { 109 | return; 110 | } 111 | 112 | _itemSize = itemSize; 113 | 114 | for (UIView *item in self.items) { 115 | [self resizeItem:item]; 116 | } 117 | } 118 | 119 | - (UIView *)itemForTitle:(NSString *)title { 120 | UIView *item; 121 | 122 | if (self.barDelegate && [self.barDelegate respondsToSelector:@selector(menuItemWithTitle:)]) { 123 | item = [self.barDelegate performSelector:@selector(menuItemWithTitle:) withObject:title]; 124 | } 125 | 126 | if (!item) { 127 | ZWSMenuLabel *itemLabel = [ZWSMenuLabel new]; 128 | itemLabel.highlightedTextColor = self.highlightedTextColor; 129 | itemLabel.textColor = self.textColor; 130 | itemLabel.highlightedFont = self.selectedTextFont; 131 | itemLabel.font = self.nomarlTextFont; 132 | itemLabel.backgroundColor = [UIColor clearColor]; 133 | itemLabel.text = title; 134 | itemLabel.textAlignment = NSTextAlignmentCenter; 135 | item = itemLabel; 136 | } 137 | [self resizeItem:item]; 138 | 139 | if (self.barDelegate && [self.barDelegate respondsToSelector:@selector(didCreateItemView:)]) { 140 | [self.barDelegate performSelector:@selector(didCreateItemView:) withObject:item]; 141 | } 142 | 143 | return item; 144 | } 145 | 146 | - (void)tapped:(UITapGestureRecognizer *)sender { 147 | NSInteger index = [super indexOfItemContainsPoint:[sender locationInView:self]]; 148 | 149 | if (![super indexIsValid:index]) { 150 | return; 151 | } 152 | 153 | if ([_barDelegate respondsToSelector:@selector(sectionBar:didSelectAtInedx:)]) { 154 | [_barDelegate sectionBar:self didSelectAtInedx:index]; 155 | } 156 | } 157 | 158 | 159 | #pragma mark - Private 160 | 161 | - (void)resizeItem:(UIView *)item { 162 | if (CGSizeEqualToSize(self.itemSize, CGSizeZero)) { 163 | if ([item isKindOfClass:[UILabel class]]) { 164 | [item sizeToFit]; 165 | } 166 | } else { 167 | CGSize size = [item sizeThatFits:self.itemSize]; 168 | size.width = MAX(size.width, self.itemSize.width); 169 | size.height = MAX(size.height, self.itemSize.height); 170 | 171 | item.bounds = (CGRect){CGPointZero, size}; 172 | item.frame = CGRectOffset(item.frame, 12, 0); 173 | } 174 | } 175 | 176 | @end 177 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSSectionBar.m: -------------------------------------------------------------------------------- 1 | // 2 | // JHSBrandSectionBar.m 3 | // 4 | 5 | #import "ZWSSectionBar.h" 6 | 7 | @interface ZWSSectionBar () 8 | 9 | @end 10 | 11 | @implementation ZWSSectionBar 12 | 13 | @synthesize highlightedTextColor = _highlightedTextColor; 14 | @synthesize textColor = _textColor; 15 | 16 | - (instancetype)initWithFrame:(CGRect)frame { 17 | if (self = [super initWithFrame:frame]) { 18 | 19 | _tapGestureRecognizer = 20 | [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; 21 | [self addGestureRecognizer:_tapGestureRecognizer]; 22 | 23 | self.scrollsToTop = NO; 24 | } 25 | 26 | return self; 27 | } 28 | 29 | - (UIColor *)textColor 30 | { 31 | if (!_textColor) { 32 | return [UIColor grayColor]; 33 | } 34 | return _textColor; 35 | } 36 | 37 | - (UIColor *)highlightedTextColor 38 | { 39 | if (!_highlightedTextColor) { 40 | return [UIColor redColor]; 41 | } 42 | return _highlightedTextColor; 43 | } 44 | 45 | - (UIFont *)nomarlTextFont 46 | { 47 | if (!_nomarlTextFont) { 48 | return [UIFont systemFontOfSize:14.0f]; 49 | } 50 | return _nomarlTextFont; 51 | } 52 | 53 | - (UIFont *)selectedTextFont 54 | { 55 | if (!_selectedTextFont) { 56 | return [UIFont systemFontOfSize:15.0f]; 57 | } 58 | return _selectedTextFont; 59 | } 60 | 61 | - (void)setHighlightedTextColor:(UIColor *)highlightedTextColor 62 | { 63 | _highlightedTextColor = highlightedTextColor; 64 | for (id item in self.items) { 65 | if ([item isKindOfClass:[UILabel class]]) { 66 | ((UILabel *)item).highlightedTextColor = _highlightedTextColor; 67 | } 68 | } 69 | } 70 | 71 | - (void)setTextColor:(UIColor *)textColor 72 | { 73 | _textColor = textColor; 74 | for (id item in self.items) { 75 | if ([item isKindOfClass:[UILabel class]]) { 76 | ((UILabel *)item).textColor = _textColor; 77 | } 78 | } 79 | } 80 | 81 | - (void)setTitles:(NSArray *)titles { 82 | _titles = titles; 83 | 84 | NSMutableArray *items = [NSMutableArray arrayWithCapacity:titles.count]; 85 | 86 | if ([titles count] > 0) { 87 | 88 | for (NSString *s in titles) { 89 | [items addObject:[self itemForTitle:s]]; 90 | } 91 | 92 | UIView *iv = [[UIView alloc] initWithFrame:CGRectMake(.0, .0, 2.0, 10.0)]; 93 | UIView *lv = [[UIView alloc] initWithFrame:CGRectMake(.0, iv.bounds.size.height - (self.indicatorHeight?:2), 2.0, self.indicatorHeight?:2)]; 94 | iv.userInteractionEnabled = NO; 95 | lv.backgroundColor = self.indicatorColor?:self.highlightedTextColor; 96 | lv.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; 97 | [iv addSubview:lv]; 98 | 99 | self.items = items; 100 | self.indicatorView = iv; 101 | } else { 102 | self.items = nil; 103 | self.indicatorView = nil; 104 | } 105 | } 106 | 107 | - (void)setItemSize:(CGSize)itemSize { 108 | if (CGSizeEqualToSize(itemSize, _itemSize)) { 109 | return; 110 | } 111 | 112 | _itemSize = itemSize; 113 | 114 | for (UIView *item in self.items) { 115 | [self resizeItem:item]; 116 | } 117 | } 118 | 119 | - (UIView *)itemForTitle:(NSString *)title { 120 | UIView *item; 121 | 122 | if (self.barDelegate && [self.barDelegate respondsToSelector:@selector(menuItemWithTitle:)]) { 123 | item = [self.barDelegate performSelector:@selector(menuItemWithTitle:) withObject:title]; 124 | } 125 | 126 | if (!item) { 127 | ZWSMenuLabel *itemLabel = [ZWSMenuLabel new]; 128 | itemLabel.highlightedTextColor = self.highlightedTextColor; 129 | itemLabel.textColor = self.textColor; 130 | itemLabel.highlightedFont = self.selectedTextFont; 131 | itemLabel.font = self.nomarlTextFont; 132 | itemLabel.backgroundColor = [UIColor clearColor]; 133 | itemLabel.text = title; 134 | itemLabel.textAlignment = NSTextAlignmentCenter; 135 | item = itemLabel; 136 | } 137 | [self resizeItem:item]; 138 | 139 | if (self.barDelegate && [self.barDelegate respondsToSelector:@selector(didCreateItemView:)]) { 140 | [self.barDelegate performSelector:@selector(didCreateItemView:) withObject:item]; 141 | } 142 | 143 | return item; 144 | } 145 | 146 | - (void)tapped:(UITapGestureRecognizer *)sender { 147 | NSInteger index = [super indexOfItemContainsPoint:[sender locationInView:self]]; 148 | 149 | if (![super indexIsValid:index]) { 150 | return; 151 | } 152 | 153 | if ([_barDelegate respondsToSelector:@selector(sectionBar:didSelectAtInedx:)]) { 154 | [_barDelegate sectionBar:self didSelectAtInedx:index]; 155 | } 156 | } 157 | 158 | 159 | #pragma mark - Private 160 | 161 | - (void)resizeItem:(UIView *)item { 162 | if (CGSizeEqualToSize(self.itemSize, CGSizeZero)) { 163 | if ([item isKindOfClass:[UILabel class]]) { 164 | [item sizeToFit]; 165 | } 166 | } else { 167 | CGSize size = [item sizeThatFits:self.itemSize]; 168 | size.width = MAX(size.width, self.itemSize.width); 169 | size.height = MAX(size.height, self.itemSize.height); 170 | 171 | item.bounds = (CGRect){CGPointZero, size}; 172 | item.frame = CGRectOffset(item.frame, 12, 0); 173 | } 174 | } 175 | 176 | @end 177 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example-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 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 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\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 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\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | 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} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | 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}" 106 | fi 107 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSFlowMenu.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSFlowMenu.m 3 | // 4 | 5 | #import "ZWSFlowMenu.h" 6 | 7 | @interface ZWSFlowMenu () { 8 | NSMutableArray *_items; 9 | } 10 | @end 11 | 12 | @implementation ZWSFlowMenu 13 | 14 | - (NSInteger)indexOfItemContainsPoint:(CGPoint)p { 15 | CGPoint p1 = ZWStructWith(p, x, p.x - _menuInsets.right), 16 | p2 = ZWStructWith(p, x, p.x + _menuInsets.left); 17 | 18 | NSUInteger index = NSUIntegerMax; 19 | UIView *item = nil; 20 | for (NSUInteger i = 0; i < _items.count; ++i) { 21 | item = _items[i]; 22 | if (CGRectContainsPoint(item.frame, p) || CGRectContainsPoint(item.frame, p1) || 23 | CGRectContainsPoint(item.frame, p2)) { 24 | index = i; 25 | break; 26 | } 27 | } 28 | 29 | return index; 30 | } 31 | 32 | - (instancetype)initWithFrame:(CGRect)frame { 33 | if (self = [super initWithFrame:frame]) { 34 | self.showsHorizontalScrollIndicator = NO; 35 | self.showsVerticalScrollIndicator = NO; 36 | 37 | _menuInsets = UIEdgeInsetsMake(.0, 12.0, .0, 12.0); 38 | } 39 | 40 | return self; 41 | } 42 | 43 | - (void)layoutItems { 44 | CGFloat w = .0, x = .0, gap = _menuInsets.right + _menuInsets.left, 45 | minW = CGRectGetWidth(self.frame) - self.contentInset.left - self.contentInset.right; 46 | for (UIView *v in _items) { 47 | w += CGRectGetWidth(v.frame) + gap; 48 | } 49 | 50 | if (w < minW) { 51 | x = (CGRectGetWidth(self.frame) - w) / 2.0 + _menuInsets.left; 52 | w = minW; 53 | } else { 54 | x = _menuInsets.left; 55 | } 56 | 57 | for (UIView *v in _items) { 58 | v.center = CGPointMake(x + CGRectGetWidth(v.frame) / 2.0, CGRectGetHeight(self.frame) / 2.0); 59 | [self addSubview:v]; 60 | 61 | if ([_items indexOfObject:v] == _selectedIndex) { 62 | 63 | if ([v conformsToProtocol:@protocol(ZWSMenuAppearance)] 64 | && [v respondsToSelector:@selector(transformToHighlight)]) { 65 | [(id)v transformToHighlight]; 66 | } 67 | 68 | _indicatorView.center = v.center; 69 | _indicatorView.bounds = CGRectMake(.0, .0, CGRectGetWidth(v.frame), CGRectGetHeight(self.frame)); 70 | } else { 71 | if ([v conformsToProtocol:@protocol(ZWSMenuAppearance)] 72 | && [v respondsToSelector:@selector(transformToNormal)]) { 73 | [(id)v transformToNormal]; 74 | } 75 | } 76 | 77 | x += CGRectGetWidth(v.frame) + gap; 78 | } 79 | 80 | self.contentSize = CGSizeMake(w, CGRectGetHeight(self.frame)); 81 | } 82 | 83 | - (void)setItems:(NSArray *)items { 84 | if (!_items) { 85 | _items = [[NSMutableArray alloc] init]; 86 | } else { 87 | [_items makeObjectsPerformSelector:@selector(removeFromSuperview)]; 88 | [_items removeAllObjects]; 89 | } 90 | 91 | [_items addObjectsFromArray:items]; 92 | 93 | _selectedIndex = 0; 94 | 95 | [self layoutItems]; 96 | } 97 | 98 | - (NSArray *)items { 99 | return [NSArray arrayWithArray:_items]; 100 | } 101 | 102 | - (void)setIndicatorView:(UIView *)indicatorView { 103 | if (_indicatorView == indicatorView) { 104 | return; 105 | } 106 | 107 | if (_indicatorView) { 108 | [_indicatorView removeFromSuperview]; 109 | } 110 | if (indicatorView) { 111 | UIView *v = _items[_selectedIndex]; 112 | indicatorView.center = v.center; 113 | indicatorView.bounds = CGRectMake(.0, .0, CGRectGetWidth(v.frame), CGRectGetHeight(self.frame)); 114 | 115 | [self insertSubview:indicatorView atIndex:0]; 116 | } 117 | 118 | _indicatorView = indicatorView; 119 | } 120 | 121 | - (BOOL)indexIsValid:(NSInteger)index { 122 | return index >= 0 && index < _items.count; 123 | } 124 | 125 | - (void)setSelectedIndex:(NSInteger)selectedIndex { 126 | if (_selectedIndex == selectedIndex) { 127 | return; 128 | } 129 | 130 | NSAssert([self indexIsValid:selectedIndex], @""); 131 | NSAssert([self indexIsValid:_selectedIndex], @""); 132 | 133 | UIView *v = _items[selectedIndex]; 134 | CGFloat offsetX = v.center.x - CGRectGetWidth(self.frame) / 2.0; 135 | 136 | if (offsetX < -self.contentInset.left) { 137 | offsetX = -self.contentInset.left; 138 | } else if (offsetX + CGRectGetWidth(self.frame) > self.contentSize.width + self.contentInset.right) { 139 | offsetX = self.contentSize.width + self.contentInset.right - CGRectGetWidth(self.frame); 140 | } 141 | 142 | self.contentOffset = ZWStructWith(self.contentOffset, x, offsetX); 143 | 144 | _indicatorView.center = v.center; 145 | _indicatorView.bounds = CGRectMake(.0, .0, CGRectGetWidth(v.frame), CGRectGetHeight(self.frame)); 146 | 147 | if ([_items[_selectedIndex] conformsToProtocol:@protocol(ZWSMenuAppearance)] 148 | && [_items[_selectedIndex] respondsToSelector:@selector(transformToNormal)]) { 149 | [(id)_items[_selectedIndex] transformToNormal]; 150 | } 151 | 152 | if ([v conformsToProtocol:@protocol(ZWSMenuAppearance)] 153 | && [v respondsToSelector:@selector(transformToHighlight)]) { 154 | [(id)v transformToHighlight]; 155 | } 156 | 157 | _selectedIndex = selectedIndex; 158 | } 159 | - (void)setMenuInsets:(UIEdgeInsets)menuInsets { 160 | if (UIEdgeInsetsEqualToEdgeInsets(menuInsets, _menuInsets)) { 161 | return; 162 | } 163 | _menuInsets.left = menuInsets.left; 164 | _menuInsets.right = menuInsets.right; 165 | [self layoutItems]; 166 | } 167 | - (void)moveToMenuAtIndex:(NSInteger)selectedIndex animated:(BOOL)animated { 168 | if (_selectedIndex == selectedIndex) { 169 | return; 170 | } 171 | 172 | if (animated) { 173 | [UIView beginAnimations:nil context:NULL]; 174 | [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 175 | } 176 | 177 | [self setSelectedIndex:selectedIndex]; 178 | 179 | if (animated) { 180 | [UIView commitAnimations]; 181 | } 182 | } 183 | 184 | - (CGFloat)widthOfItem:(NSInteger)index { 185 | if (![self indexIsValid:index]) { 186 | return .0; 187 | } 188 | 189 | return CGRectGetWidth(((UIView *)_items[index]).frame); 190 | } 191 | 192 | - (CGFloat)centerOfItem:(NSInteger)index { 193 | if (!_items.count) { 194 | return .0; 195 | } 196 | 197 | if (index < 0) { 198 | return CGRectGetMinX(((UIView *)_items.firstObject).frame) - _menuInsets.left - _menuInsets.right; 199 | } else if (index >= _items.count) { 200 | return CGRectGetMaxX(((UIView *)_items.lastObject).frame) + _menuInsets.left + _menuInsets.right; 201 | } 202 | 203 | return ((UIView *)_items[index]).center.x; 204 | } 205 | 206 | - (CGRect)frameForIndicatorViewWithFloatIndex:(float)index { 207 | NSInteger ceil = ceilf(index), floor = ceil - 1; 208 | CGFloat w, wc, wf, left, middleX; 209 | 210 | wc = (index - floor) * [self widthOfItem:ceil]; 211 | wf = (ceil - index) * [self widthOfItem:floor]; 212 | 213 | w = wc + wf + 2.0 * (.5 - fabs(ceil - index - .5)) * (_menuInsets.left + _menuInsets.right); 214 | 215 | if (ceil - index >= .5) { 216 | middleX = [self centerOfItem:floor] + 217 | 2.0 * (index - floor) * ([self widthOfItem:floor] / 2.0 + _menuInsets.right); 218 | } else { 219 | middleX = [self centerOfItem:ceil] - 220 | 2.0 * (ceil - index) * ([self widthOfItem:ceil] / 2.0 + _menuInsets.left); 221 | } 222 | 223 | left = middleX - w / 2.0; 224 | 225 | CGRect r = CGRectMake(left, .0, w, CGRectGetHeight(self.frame)); 226 | 227 | return r; 228 | } 229 | 230 | - (void)moveToMenuAtFloatIndex:(float)floatIndex animated:(BOOL)animated { 231 | __SetIfLessThan(floatIndex, -.999); 232 | __SetIfMoreThan(floatIndex, (_items.count - 1.0) + .999); 233 | 234 | float offset = floatIndex - _selectedIndex; 235 | 236 | while (offset >= 1.0) { 237 | [self moveToMenuAtIndex:_selectedIndex + 1 animated:animated]; 238 | offset -= 1.0; 239 | } 240 | 241 | while (offset <= -1.0) { 242 | [self moveToMenuAtIndex:_selectedIndex - 1 animated:animated]; 243 | offset += 1.0; 244 | } 245 | 246 | if (offset == .0) { 247 | return; 248 | } 249 | 250 | if (animated) { 251 | [UIView beginAnimations:nil context:NULL]; 252 | [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 253 | } 254 | 255 | NSInteger nextIndex = offset >= .0 ? _selectedIndex + 1 : _selectedIndex - 1; 256 | 257 | UIView *currItem = _items[_selectedIndex], 258 | *nextItem = [self indexIsValid:nextIndex] ? _items[nextIndex] : nil; 259 | 260 | CGRect f = [self frameForIndicatorViewWithFloatIndex:floatIndex]; 261 | _indicatorView.frame = f; 262 | 263 | if ([currItem conformsToProtocol:@protocol(ZWSMenuAppearance)] 264 | && [currItem respondsToSelector:@selector(transformPercent:)]) { 265 | [(id)currItem transformPercent:1 - fabsf(offset)]; 266 | } 267 | 268 | if ([nextItem conformsToProtocol:@protocol(ZWSMenuAppearance)] 269 | && [nextItem respondsToSelector:@selector(transformPercent:)]) { 270 | [(id)nextItem transformPercent:fabsf(offset)]; 271 | } 272 | 273 | CGFloat offsetX = CGRectGetMidX(f) - CGRectGetWidth(self.frame) / 2; 274 | if (offsetX < -self.contentInset.left) { 275 | offsetX = -self.contentInset.left; 276 | } else if (offsetX + CGRectGetWidth(self.frame) > self.contentSize.width + self.contentInset.right) { 277 | offsetX = self.contentSize.width + self.contentInset.right - CGRectGetWidth(self.frame); 278 | } 279 | 280 | if (animated) { 281 | [UIView beginAnimations:nil context:NULL]; 282 | [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 283 | } 284 | 285 | self.contentOffset = ZWStructWith(self.contentOffset, x, offsetX); 286 | 287 | if (animated) { 288 | [UIView commitAnimations]; 289 | 290 | [UIView commitAnimations]; 291 | } 292 | } 293 | 294 | @end 295 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSFlowMenu.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSFlowMenu.m 3 | // 4 | 5 | #import "ZWSFlowMenu.h" 6 | 7 | @interface ZWSFlowMenu () { 8 | NSMutableArray *_items; 9 | } 10 | @end 11 | 12 | @implementation ZWSFlowMenu 13 | 14 | - (NSInteger)indexOfItemContainsPoint:(CGPoint)p { 15 | CGPoint p1 = ZWStructWith(p, x, p.x - _menuInsets.right), 16 | p2 = ZWStructWith(p, x, p.x + _menuInsets.left); 17 | 18 | NSUInteger index = NSUIntegerMax; 19 | UIView *item = nil; 20 | for (NSUInteger i = 0; i < _items.count; ++i) { 21 | item = _items[i]; 22 | if (CGRectContainsPoint(item.frame, p) || CGRectContainsPoint(item.frame, p1) || 23 | CGRectContainsPoint(item.frame, p2)) { 24 | index = i; 25 | break; 26 | } 27 | } 28 | 29 | return index; 30 | } 31 | 32 | - (instancetype)initWithFrame:(CGRect)frame { 33 | if (self = [super initWithFrame:frame]) { 34 | self.showsHorizontalScrollIndicator = NO; 35 | self.showsVerticalScrollIndicator = NO; 36 | 37 | _menuInsets = UIEdgeInsetsMake(.0, 12.0, .0, 12.0); 38 | } 39 | 40 | return self; 41 | } 42 | 43 | - (void)layoutItems { 44 | CGFloat w = .0, x = .0, gap = _menuInsets.right + _menuInsets.left, 45 | minW = CGRectGetWidth(self.frame) - self.contentInset.left - self.contentInset.right; 46 | for (UIView *v in _items) { 47 | w += CGRectGetWidth(v.frame) + gap; 48 | } 49 | 50 | if (w < minW) { 51 | x = (CGRectGetWidth(self.frame) - w) / 2.0 + _menuInsets.left; 52 | w = minW; 53 | } else { 54 | x = _menuInsets.left; 55 | } 56 | 57 | for (UIView *v in _items) { 58 | v.center = CGPointMake(x + CGRectGetWidth(v.frame) / 2.0, CGRectGetHeight(self.frame) / 2.0); 59 | [self addSubview:v]; 60 | 61 | if ([_items indexOfObject:v] == _selectedIndex) { 62 | 63 | if ([v conformsToProtocol:@protocol(ZWSMenuAppearance)] 64 | && [v respondsToSelector:@selector(transformToHighlight)]) { 65 | [(id)v transformToHighlight]; 66 | } 67 | 68 | _indicatorView.center = v.center; 69 | _indicatorView.bounds = CGRectMake(.0, .0, CGRectGetWidth(v.frame), CGRectGetHeight(self.frame)); 70 | } else { 71 | if ([v conformsToProtocol:@protocol(ZWSMenuAppearance)] 72 | && [v respondsToSelector:@selector(transformToNormal)]) { 73 | [(id)v transformToNormal]; 74 | } 75 | } 76 | 77 | x += CGRectGetWidth(v.frame) + gap; 78 | } 79 | 80 | self.contentSize = CGSizeMake(w, CGRectGetHeight(self.frame)); 81 | } 82 | 83 | - (void)setItems:(NSArray *)items { 84 | if (!_items) { 85 | _items = [[NSMutableArray alloc] init]; 86 | } else { 87 | [_items makeObjectsPerformSelector:@selector(removeFromSuperview)]; 88 | [_items removeAllObjects]; 89 | } 90 | 91 | [_items addObjectsFromArray:items]; 92 | 93 | _selectedIndex = 0; 94 | 95 | [self layoutItems]; 96 | } 97 | 98 | - (NSArray *)items { 99 | return [NSArray arrayWithArray:_items]; 100 | } 101 | 102 | - (void)setIndicatorView:(UIView *)indicatorView { 103 | if (_indicatorView == indicatorView) { 104 | return; 105 | } 106 | 107 | if (_indicatorView) { 108 | [_indicatorView removeFromSuperview]; 109 | } 110 | if (indicatorView) { 111 | UIView *v = _items[_selectedIndex]; 112 | indicatorView.center = v.center; 113 | indicatorView.bounds = CGRectMake(.0, .0, CGRectGetWidth(v.frame), CGRectGetHeight(self.frame)); 114 | 115 | [self insertSubview:indicatorView atIndex:0]; 116 | } 117 | 118 | _indicatorView = indicatorView; 119 | } 120 | 121 | - (BOOL)indexIsValid:(NSInteger)index { 122 | return index >= 0 && index < _items.count; 123 | } 124 | 125 | - (void)setSelectedIndex:(NSInteger)selectedIndex { 126 | if (_selectedIndex == selectedIndex) { 127 | return; 128 | } 129 | 130 | NSAssert([self indexIsValid:selectedIndex], @""); 131 | NSAssert([self indexIsValid:_selectedIndex], @""); 132 | 133 | UIView *v = _items[selectedIndex]; 134 | CGFloat offsetX = v.center.x - CGRectGetWidth(self.frame) / 2.0; 135 | 136 | if (offsetX < -self.contentInset.left) { 137 | offsetX = -self.contentInset.left; 138 | } else if (offsetX + CGRectGetWidth(self.frame) > self.contentSize.width + self.contentInset.right) { 139 | offsetX = self.contentSize.width + self.contentInset.right - CGRectGetWidth(self.frame); 140 | } 141 | 142 | self.contentOffset = ZWStructWith(self.contentOffset, x, offsetX); 143 | 144 | _indicatorView.center = v.center; 145 | _indicatorView.bounds = CGRectMake(.0, .0, CGRectGetWidth(v.frame), CGRectGetHeight(self.frame)); 146 | 147 | if ([_items[_selectedIndex] conformsToProtocol:@protocol(ZWSMenuAppearance)] 148 | && [_items[_selectedIndex] respondsToSelector:@selector(transformToNormal)]) { 149 | [(id)_items[_selectedIndex] transformToNormal]; 150 | } 151 | 152 | if ([v conformsToProtocol:@protocol(ZWSMenuAppearance)] 153 | && [v respondsToSelector:@selector(transformToHighlight)]) { 154 | [(id)v transformToHighlight]; 155 | } 156 | 157 | _selectedIndex = selectedIndex; 158 | } 159 | - (void)setMenuInsets:(UIEdgeInsets)menuInsets { 160 | if (UIEdgeInsetsEqualToEdgeInsets(menuInsets, _menuInsets)) { 161 | return; 162 | } 163 | _menuInsets.left = menuInsets.left; 164 | _menuInsets.right = menuInsets.right; 165 | [self layoutItems]; 166 | } 167 | - (void)moveToMenuAtIndex:(NSInteger)selectedIndex animated:(BOOL)animated { 168 | if (_selectedIndex == selectedIndex) { 169 | return; 170 | } 171 | 172 | if (animated) { 173 | [UIView beginAnimations:nil context:NULL]; 174 | [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 175 | } 176 | 177 | [self setSelectedIndex:selectedIndex]; 178 | 179 | if (animated) { 180 | [UIView commitAnimations]; 181 | } 182 | } 183 | 184 | - (CGFloat)widthOfItem:(NSInteger)index { 185 | if (![self indexIsValid:index]) { 186 | return .0; 187 | } 188 | 189 | return CGRectGetWidth(((UIView *)_items[index]).frame); 190 | } 191 | 192 | - (CGFloat)centerOfItem:(NSInteger)index { 193 | if (!_items.count) { 194 | return .0; 195 | } 196 | 197 | if (index < 0) { 198 | return CGRectGetMinX(((UIView *)_items.firstObject).frame) - _menuInsets.left - _menuInsets.right; 199 | } else if (index >= _items.count) { 200 | return CGRectGetMaxX(((UIView *)_items.lastObject).frame) + _menuInsets.left + _menuInsets.right; 201 | } 202 | 203 | return ((UIView *)_items[index]).center.x; 204 | } 205 | 206 | - (CGRect)frameForIndicatorViewWithFloatIndex:(float)index { 207 | NSInteger ceil = ceilf(index), floor = ceil - 1; 208 | CGFloat w, wc, wf, left, middleX; 209 | 210 | wc = (index - floor) * [self widthOfItem:ceil]; 211 | wf = (ceil - index) * [self widthOfItem:floor]; 212 | 213 | w = wc + wf + 2.0 * (.5 - fabs(ceil - index - .5)) * (_menuInsets.left + _menuInsets.right); 214 | 215 | if (ceil - index >= .5) { 216 | middleX = [self centerOfItem:floor] + 217 | 2.0 * (index - floor) * ([self widthOfItem:floor] / 2.0 + _menuInsets.right); 218 | } else { 219 | middleX = [self centerOfItem:ceil] - 220 | 2.0 * (ceil - index) * ([self widthOfItem:ceil] / 2.0 + _menuInsets.left); 221 | } 222 | 223 | left = middleX - w / 2.0; 224 | 225 | CGRect r = CGRectMake(left, .0, w, CGRectGetHeight(self.frame)); 226 | 227 | return r; 228 | } 229 | 230 | - (void)moveToMenuAtFloatIndex:(float)floatIndex animated:(BOOL)animated { 231 | __SetIfLessThan(floatIndex, -.999); 232 | __SetIfMoreThan(floatIndex, (_items.count - 1.0) + .999); 233 | 234 | float offset = floatIndex - _selectedIndex; 235 | 236 | while (offset >= 1.0) { 237 | [self moveToMenuAtIndex:_selectedIndex + 1 animated:animated]; 238 | offset -= 1.0; 239 | } 240 | 241 | while (offset <= -1.0) { 242 | [self moveToMenuAtIndex:_selectedIndex - 1 animated:animated]; 243 | offset += 1.0; 244 | } 245 | 246 | if (offset == .0) { 247 | return; 248 | } 249 | 250 | if (animated) { 251 | [UIView beginAnimations:nil context:NULL]; 252 | [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 253 | } 254 | 255 | NSInteger nextIndex = offset >= .0 ? _selectedIndex + 1 : _selectedIndex - 1; 256 | 257 | UIView *currItem = _items[_selectedIndex], 258 | *nextItem = [self indexIsValid:nextIndex] ? _items[nextIndex] : nil; 259 | 260 | CGRect f = [self frameForIndicatorViewWithFloatIndex:floatIndex]; 261 | _indicatorView.frame = f; 262 | 263 | if ([currItem conformsToProtocol:@protocol(ZWSMenuAppearance)] 264 | && [currItem respondsToSelector:@selector(transformPercent:)]) { 265 | [(id)currItem transformPercent:1 - fabsf(offset)]; 266 | } 267 | 268 | if ([nextItem conformsToProtocol:@protocol(ZWSMenuAppearance)] 269 | && [nextItem respondsToSelector:@selector(transformPercent:)]) { 270 | [(id)nextItem transformPercent:fabsf(offset)]; 271 | } 272 | 273 | CGFloat offsetX = CGRectGetMidX(f) - CGRectGetWidth(self.frame) / 2; 274 | if (offsetX < -self.contentInset.left) { 275 | offsetX = -self.contentInset.left; 276 | } else if (offsetX + CGRectGetWidth(self.frame) > self.contentSize.width + self.contentInset.right) { 277 | offsetX = self.contentSize.width + self.contentInset.right - CGRectGetWidth(self.frame); 278 | } 279 | 280 | if (animated) { 281 | [UIView beginAnimations:nil context:NULL]; 282 | [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 283 | } 284 | 285 | self.contentOffset = ZWStructWith(self.contentOffset, x, offsetX); 286 | 287 | if (animated) { 288 | [UIView commitAnimations]; 289 | 290 | [UIView commitAnimations]; 291 | } 292 | } 293 | 294 | @end 295 | -------------------------------------------------------------------------------- /Pod/Classes/ZWSPagingView.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSPagingView.m 3 | // 4 | 5 | #import "ZWSPagingView.h" 6 | 7 | @interface ZWSPage (Private) 8 | 9 | @property(nonatomic, assign) NSUInteger index; 10 | 11 | @end 12 | 13 | @implementation ZWSPagingView 14 | 15 | - (void)commonInit { 16 | _visiblePages = [[NSMutableSet alloc] init]; 17 | _recycledPages = [[NSMutableSet alloc] init]; 18 | _preload = NO; 19 | 20 | self.pagingEnabled = YES; 21 | self.showsVerticalScrollIndicator = NO; 22 | self.showsHorizontalScrollIndicator = NO; 23 | self.contentOffset = CGPointZero; 24 | self.scrollsToTop = NO; 25 | [super setDelegate:self]; 26 | } 27 | 28 | - (id)initWithFrame:(CGRect)frame { 29 | self = [super initWithFrame:frame]; 30 | if (self) { 31 | [self commonInit]; 32 | } 33 | return self; 34 | } 35 | 36 | - (id)initWithCoder:(NSCoder *)aDecoder { 37 | if ((self = [super initWithCoder:aDecoder])) { 38 | [self commonInit]; 39 | } 40 | return self; 41 | } 42 | 43 | - (void)dealloc { 44 | if (_pagingDelegate && _centerPage) { 45 | [_pagingDelegate pagingView:self didRemovePage:_centerPage]; 46 | } 47 | } 48 | 49 | - (NSUInteger)indexOfPage:(ZWSPage *)page { 50 | if (page.index < _numberOfPages) { 51 | return page.index; 52 | } else { 53 | return page.index - _numberOfPages; 54 | } 55 | } 56 | 57 | - (NSUInteger)indexOfCenterPage { 58 | return [self indexOfPage:self.centerPage]; 59 | } 60 | 61 | - (ZWSPage *)pageAtLocation:(CGPoint)location { 62 | if (!CGRectContainsPoint(self.bounds, location)) { 63 | return nil; 64 | } 65 | 66 | NSUInteger index = location.x / CGRectGetWidth(self.frame); 67 | for (ZWSPage *page in self.visiblePages) { 68 | if (page.index == index) { 69 | return page; 70 | } 71 | } 72 | 73 | return nil; 74 | } 75 | 76 | - (CGFloat)widthInSight:(ZWSPage *)page { 77 | if (!page || ![_visiblePages containsObject:page]) { 78 | return .0; 79 | } 80 | 81 | CGFloat offsetX = self.contentOffset.x, left = CGRectGetMinX(page.frame), right = CGRectGetMaxX(page.frame); 82 | 83 | if (offsetX >= left) { 84 | return right - offsetX; 85 | } else { 86 | return offsetX + CGRectGetWidth(self.frame) - left; 87 | } 88 | } 89 | 90 | - (float)floatIndex { 91 | CGFloat w = CGRectGetWidth(self.frame) * _numberOfPages, offsetX = self.contentOffset.x; 92 | return ((_scrollInfinitelyEnabled && offsetX >= w) ? (offsetX - w) : offsetX) / CGRectGetWidth(self.frame); 93 | } 94 | 95 | - (void)moveToPageAtFloatIndex:(float)index animated:(BOOL)animated { 96 | CGFloat w = CGRectGetWidth(self.frame) * _numberOfPages, 97 | x = self.contentOffset.x >= w ? w + CGRectGetWidth(self.frame) * index : CGRectGetWidth(self.frame) * index; 98 | CGPoint offset = CGPointMake(x, .0); 99 | 100 | // setContentOffset:animated: 优与 animation block 101 | [self setContentOffset:offset animated:animated]; 102 | } 103 | 104 | - (CGSize)contentSizeWithPagingViewSize:(CGSize)size { 105 | return CGSizeMake(size.width * _numberOfPages * (_scrollInfinitelyEnabled ? 2 : 1), 106 | size.height); 107 | 108 | } 109 | 110 | - (void)setBounds:(CGRect)bounds { 111 | if (CGRectEqualToRect(bounds, self.bounds)) { 112 | return; 113 | } 114 | [super setBounds:bounds]; 115 | self.contentSize = [self contentSizeWithPagingViewSize:bounds.size]; 116 | } 117 | 118 | - (void)setFrame:(CGRect)frame { 119 | if (CGRectEqualToRect(frame, self.frame)) { 120 | return; 121 | } 122 | [super setFrame:frame]; 123 | self.contentSize = [self contentSizeWithPagingViewSize:frame.size]; 124 | } 125 | 126 | - (NSSet *)visiblePages { 127 | return [NSSet setWithSet:_visiblePages]; 128 | } 129 | 130 | #pragma mark - reload 131 | 132 | - (void)setScrollInfinitelyEnabled:(BOOL)scrollInfinitelyEnabled { 133 | if (scrollInfinitelyEnabled == _scrollInfinitelyEnabled) { 134 | return; 135 | } 136 | 137 | _scrollInfinitelyEnabled = scrollInfinitelyEnabled; 138 | 139 | self.contentSize = CGSizeMake( 140 | CGRectGetWidth(self.frame) * _numberOfPages * (_scrollInfinitelyEnabled ? 2 : 1), CGRectGetHeight(self.frame)); 141 | [self setNeedsLayout]; 142 | } 143 | 144 | - (void)reloadPages { 145 | for (ZWSPage *page in _visiblePages) { 146 | page.hidden = YES; 147 | page.index = NSUIntegerMax; 148 | [_recycledPages addObject:page]; 149 | 150 | [_pagingDelegate pagingView:self didRemovePage:page]; 151 | } 152 | [_visiblePages removeAllObjects]; 153 | _centerPage = nil; 154 | 155 | _numberOfPages = [_pagingDataSource numberOfPagesInPagingView:self]; 156 | 157 | self.contentSize = [self contentSizeWithPagingViewSize:self.bounds.size]; 158 | 159 | self.contentOffset = CGPointZero; 160 | [self setNeedsLayout]; 161 | } 162 | 163 | - (UIView *)dequeueReusablePage { 164 | ZWSPage *page = [_recycledPages anyObject]; 165 | if (page != nil) { 166 | [_recycledPages removeObject:page]; 167 | return page; 168 | } 169 | return nil; 170 | } 171 | 172 | #pragma mark - scroll 173 | 174 | - (BOOL)isDisplayingPageOfIndex:(NSUInteger)index { 175 | for (ZWSPage *page in _visiblePages) { 176 | if (page.index == index) 177 | return YES; 178 | } 179 | return NO; 180 | } 181 | 182 | - (void)tilePages:(CGPoint)offset { 183 | CGFloat x = self.contentOffset.x; 184 | 185 | NSUInteger lastNeededPageIndex, firstNeededPageIndex; // = (NSUInteger)(x / self.width); 186 | if (!_scrollInfinitelyEnabled && offset.x < .0) { 187 | firstNeededPageIndex = lastNeededPageIndex = 0; 188 | } else if (!_scrollInfinitelyEnabled && offset.x + CGRectGetWidth(self.frame) > self.contentSize.width) { 189 | firstNeededPageIndex = lastNeededPageIndex = _numberOfPages - 1; 190 | } else { 191 | firstNeededPageIndex = (NSUInteger)(x / CGRectGetWidth(self.frame)); 192 | 193 | if (firstNeededPageIndex * CGRectGetWidth(self.frame) == x) { 194 | lastNeededPageIndex = firstNeededPageIndex; 195 | } else { 196 | lastNeededPageIndex = firstNeededPageIndex + 1; 197 | } 198 | } 199 | 200 | for (ZWSPage *page in _visiblePages) { 201 | if (page.index % _numberOfPages == firstNeededPageIndex % _numberOfPages) { 202 | page.index = firstNeededPageIndex; 203 | continue; 204 | } else if (page.index % _numberOfPages == lastNeededPageIndex % _numberOfPages) { 205 | page.index = lastNeededPageIndex; 206 | continue; 207 | } 208 | 209 | [_recycledPages addObject:page]; 210 | [page setHidden:YES]; 211 | 212 | [_pagingDelegate pagingView:self didRemovePage:page]; 213 | 214 | page.contentView = nil; 215 | 216 | if (page == _centerPage) { 217 | _centerPage = nil; 218 | } 219 | 220 | page.index = NSUIntegerMax; 221 | } 222 | 223 | [_visiblePages minusSet:_recycledPages]; 224 | 225 | NSNumber *cachePageIndex; 226 | 227 | if (_preload && (firstNeededPageIndex != lastNeededPageIndex)) { 228 | cachePageIndex = @(lastNeededPageIndex); 229 | } 230 | 231 | NSArray *indexes = [NSArray arrayWithObjects:@(firstNeededPageIndex), 232 | cachePageIndex, 233 | nil]; 234 | 235 | for (NSNumber *number in indexes) { 236 | NSUInteger i = number.unsignedIntegerValue; 237 | 238 | if ([self isDisplayingPageOfIndex:i]) { 239 | continue; 240 | } 241 | 242 | ZWSPage *page = [_pagingDataSource pagingView:self pageForIndex:i % _numberOfPages]; 243 | page.index = i; 244 | 245 | page.bounds = (CGRect){CGPointZero, self.bounds.size}; 246 | page.center = CGPointMake((i + .5) * CGRectGetWidth(self.frame), CGRectGetHeight(self.frame) / 2.0); 247 | page.hidden = NO; 248 | if (page.superview != self) { 249 | [self addSubview:page]; 250 | } 251 | 252 | [_visiblePages addObject:page]; 253 | 254 | [_pagingDelegate pagingView:self willMoveToPage:page]; 255 | } 256 | } 257 | 258 | - (void)layoutVisiblePages { 259 | for (ZWSPage *page in _visiblePages) { 260 | page.bounds = (CGRect){CGPointZero, self.bounds.size}; 261 | page.center = CGPointMake((page.index + .5) * CGRectGetWidth(self.frame), CGRectGetHeight(self.frame) / 2.0); 262 | } 263 | 264 | if (_visiblePages.count != 1 || _centerPage == _visiblePages.anyObject) { 265 | return; 266 | } 267 | 268 | _centerPage = _visiblePages.anyObject; 269 | 270 | [_pagingDelegate pagingView:self didMoveToPage:_centerPage]; 271 | } 272 | 273 | - (void)layoutSubviews { 274 | [super layoutSubviews]; 275 | 276 | if (_numberOfPages == 0) { 277 | return; 278 | } 279 | 280 | if (_scrollInfinitelyEnabled) { 281 | CGFloat w = _numberOfPages * CGRectGetWidth(self.frame); 282 | CGPoint offset = self.contentOffset; 283 | if (self.contentOffset.x + CGRectGetWidth(self.frame) > self.contentSize.width) { 284 | offset.x -= w; 285 | self.contentOffset = offset; 286 | } else if (self.contentOffset.x < .0) { 287 | offset.x += w; 288 | self.contentOffset = offset; 289 | } 290 | } 291 | 292 | [self tilePages:self.contentOffset]; 293 | 294 | [self layoutVisiblePages]; 295 | 296 | [_pagingDelegate pagingViewLayoutChanged:self]; 297 | } 298 | 299 | @end 300 | 301 | @implementation ZWSPage 302 | 303 | - (void)setIndex:(NSUInteger)index { 304 | _index = index; 305 | } 306 | 307 | - (NSUInteger)index { 308 | return _index; 309 | } 310 | 311 | - (void)setContentView:(UIView *)view { 312 | if (_contentView == view) { 313 | return; 314 | } 315 | 316 | if (_contentView) { 317 | [_contentView removeFromSuperview]; 318 | _contentView = nil; 319 | } 320 | 321 | if (view) { 322 | view.frame = self.bounds; 323 | view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 324 | [self addSubview:view]; 325 | } 326 | 327 | _contentView = view; 328 | } 329 | 330 | - (NSString *)description { 331 | return [NSString stringWithFormat:@"<%@:%p;frame=%@,contentView=%@", [self class], self, 332 | NSStringFromCGRect(self.frame), _contentView]; 333 | } 334 | 335 | @end 336 | -------------------------------------------------------------------------------- /Example/Pods/ZWSlideViewController/Pod/Classes/ZWSPagingView.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZWSPagingView.m 3 | // 4 | 5 | #import "ZWSPagingView.h" 6 | 7 | @interface ZWSPage (Private) 8 | 9 | @property(nonatomic, assign) NSUInteger index; 10 | 11 | @end 12 | 13 | @implementation ZWSPagingView 14 | 15 | - (void)commonInit { 16 | _visiblePages = [[NSMutableSet alloc] init]; 17 | _recycledPages = [[NSMutableSet alloc] init]; 18 | _preload = NO; 19 | 20 | self.pagingEnabled = YES; 21 | self.showsVerticalScrollIndicator = NO; 22 | self.showsHorizontalScrollIndicator = NO; 23 | self.contentOffset = CGPointZero; 24 | self.scrollsToTop = NO; 25 | [super setDelegate:self]; 26 | } 27 | 28 | - (id)initWithFrame:(CGRect)frame { 29 | self = [super initWithFrame:frame]; 30 | if (self) { 31 | [self commonInit]; 32 | } 33 | return self; 34 | } 35 | 36 | - (id)initWithCoder:(NSCoder *)aDecoder { 37 | if ((self = [super initWithCoder:aDecoder])) { 38 | [self commonInit]; 39 | } 40 | return self; 41 | } 42 | 43 | - (void)dealloc { 44 | if (_pagingDelegate && _centerPage) { 45 | [_pagingDelegate pagingView:self didRemovePage:_centerPage]; 46 | } 47 | } 48 | 49 | - (NSUInteger)indexOfPage:(ZWSPage *)page { 50 | if (page.index < _numberOfPages) { 51 | return page.index; 52 | } else { 53 | return page.index - _numberOfPages; 54 | } 55 | } 56 | 57 | - (NSUInteger)indexOfCenterPage { 58 | return [self indexOfPage:self.centerPage]; 59 | } 60 | 61 | - (ZWSPage *)pageAtLocation:(CGPoint)location { 62 | if (!CGRectContainsPoint(self.bounds, location)) { 63 | return nil; 64 | } 65 | 66 | NSUInteger index = location.x / CGRectGetWidth(self.frame); 67 | for (ZWSPage *page in self.visiblePages) { 68 | if (page.index == index) { 69 | return page; 70 | } 71 | } 72 | 73 | return nil; 74 | } 75 | 76 | - (CGFloat)widthInSight:(ZWSPage *)page { 77 | if (!page || ![_visiblePages containsObject:page]) { 78 | return .0; 79 | } 80 | 81 | CGFloat offsetX = self.contentOffset.x, left = CGRectGetMinX(page.frame), right = CGRectGetMaxX(page.frame); 82 | 83 | if (offsetX >= left) { 84 | return right - offsetX; 85 | } else { 86 | return offsetX + CGRectGetWidth(self.frame) - left; 87 | } 88 | } 89 | 90 | - (float)floatIndex { 91 | CGFloat w = CGRectGetWidth(self.frame) * _numberOfPages, offsetX = self.contentOffset.x; 92 | return ((_scrollInfinitelyEnabled && offsetX >= w) ? (offsetX - w) : offsetX) / CGRectGetWidth(self.frame); 93 | } 94 | 95 | - (void)moveToPageAtFloatIndex:(float)index animated:(BOOL)animated { 96 | CGFloat w = CGRectGetWidth(self.frame) * _numberOfPages, 97 | x = self.contentOffset.x >= w ? w + CGRectGetWidth(self.frame) * index : CGRectGetWidth(self.frame) * index; 98 | CGPoint offset = CGPointMake(x, .0); 99 | 100 | // setContentOffset:animated: 优与 animation block 101 | [self setContentOffset:offset animated:animated]; 102 | } 103 | 104 | - (CGSize)contentSizeWithPagingViewSize:(CGSize)size { 105 | return CGSizeMake(size.width * _numberOfPages * (_scrollInfinitelyEnabled ? 2 : 1), 106 | size.height); 107 | 108 | } 109 | 110 | - (void)setBounds:(CGRect)bounds { 111 | if (CGRectEqualToRect(bounds, self.bounds)) { 112 | return; 113 | } 114 | [super setBounds:bounds]; 115 | self.contentSize = [self contentSizeWithPagingViewSize:bounds.size]; 116 | } 117 | 118 | - (void)setFrame:(CGRect)frame { 119 | if (CGRectEqualToRect(frame, self.frame)) { 120 | return; 121 | } 122 | [super setFrame:frame]; 123 | self.contentSize = [self contentSizeWithPagingViewSize:frame.size]; 124 | } 125 | 126 | - (NSSet *)visiblePages { 127 | return [NSSet setWithSet:_visiblePages]; 128 | } 129 | 130 | #pragma mark - reload 131 | 132 | - (void)setScrollInfinitelyEnabled:(BOOL)scrollInfinitelyEnabled { 133 | if (scrollInfinitelyEnabled == _scrollInfinitelyEnabled) { 134 | return; 135 | } 136 | 137 | _scrollInfinitelyEnabled = scrollInfinitelyEnabled; 138 | 139 | self.contentSize = CGSizeMake( 140 | CGRectGetWidth(self.frame) * _numberOfPages * (_scrollInfinitelyEnabled ? 2 : 1), CGRectGetHeight(self.frame)); 141 | [self setNeedsLayout]; 142 | } 143 | 144 | - (void)reloadPages { 145 | for (ZWSPage *page in _visiblePages) { 146 | page.hidden = YES; 147 | page.index = NSUIntegerMax; 148 | [_recycledPages addObject:page]; 149 | 150 | [_pagingDelegate pagingView:self didRemovePage:page]; 151 | } 152 | [_visiblePages removeAllObjects]; 153 | _centerPage = nil; 154 | 155 | _numberOfPages = [_pagingDataSource numberOfPagesInPagingView:self]; 156 | 157 | self.contentSize = [self contentSizeWithPagingViewSize:self.bounds.size]; 158 | 159 | self.contentOffset = CGPointZero; 160 | [self setNeedsLayout]; 161 | } 162 | 163 | - (UIView *)dequeueReusablePage { 164 | ZWSPage *page = [_recycledPages anyObject]; 165 | if (page != nil) { 166 | [_recycledPages removeObject:page]; 167 | return page; 168 | } 169 | return nil; 170 | } 171 | 172 | #pragma mark - scroll 173 | 174 | - (BOOL)isDisplayingPageOfIndex:(NSUInteger)index { 175 | for (ZWSPage *page in _visiblePages) { 176 | if (page.index == index) 177 | return YES; 178 | } 179 | return NO; 180 | } 181 | 182 | - (void)tilePages:(CGPoint)offset { 183 | CGFloat x = self.contentOffset.x; 184 | 185 | NSUInteger lastNeededPageIndex, firstNeededPageIndex; // = (NSUInteger)(x / self.width); 186 | if (!_scrollInfinitelyEnabled && offset.x < .0) { 187 | firstNeededPageIndex = lastNeededPageIndex = 0; 188 | } else if (!_scrollInfinitelyEnabled && offset.x + CGRectGetWidth(self.frame) > self.contentSize.width) { 189 | firstNeededPageIndex = lastNeededPageIndex = _numberOfPages - 1; 190 | } else { 191 | firstNeededPageIndex = (NSUInteger)(x / CGRectGetWidth(self.frame)); 192 | 193 | if (firstNeededPageIndex * CGRectGetWidth(self.frame) == x) { 194 | lastNeededPageIndex = firstNeededPageIndex; 195 | } else { 196 | lastNeededPageIndex = firstNeededPageIndex + 1; 197 | } 198 | } 199 | 200 | for (ZWSPage *page in _visiblePages) { 201 | if (page.index % _numberOfPages == firstNeededPageIndex % _numberOfPages) { 202 | page.index = firstNeededPageIndex; 203 | continue; 204 | } else if (page.index % _numberOfPages == lastNeededPageIndex % _numberOfPages) { 205 | page.index = lastNeededPageIndex; 206 | continue; 207 | } 208 | 209 | [_recycledPages addObject:page]; 210 | [page setHidden:YES]; 211 | 212 | [_pagingDelegate pagingView:self didRemovePage:page]; 213 | 214 | page.contentView = nil; 215 | 216 | if (page == _centerPage) { 217 | _centerPage = nil; 218 | } 219 | 220 | page.index = NSUIntegerMax; 221 | } 222 | 223 | [_visiblePages minusSet:_recycledPages]; 224 | 225 | NSNumber *cachePageIndex; 226 | 227 | if (_preload && (firstNeededPageIndex != lastNeededPageIndex)) { 228 | cachePageIndex = @(lastNeededPageIndex); 229 | } 230 | 231 | NSArray *indexes = [NSArray arrayWithObjects:@(firstNeededPageIndex), 232 | cachePageIndex, 233 | nil]; 234 | 235 | for (NSNumber *number in indexes) { 236 | NSUInteger i = number.unsignedIntegerValue; 237 | 238 | if ([self isDisplayingPageOfIndex:i]) { 239 | continue; 240 | } 241 | 242 | ZWSPage *page = [_pagingDataSource pagingView:self pageForIndex:i % _numberOfPages]; 243 | page.index = i; 244 | 245 | page.bounds = (CGRect){CGPointZero, self.bounds.size}; 246 | page.center = CGPointMake((i + .5) * CGRectGetWidth(self.frame), CGRectGetHeight(self.frame) / 2.0); 247 | page.hidden = NO; 248 | if (page.superview != self) { 249 | [self addSubview:page]; 250 | } 251 | 252 | [_visiblePages addObject:page]; 253 | 254 | [_pagingDelegate pagingView:self willMoveToPage:page]; 255 | } 256 | } 257 | 258 | - (void)layoutVisiblePages { 259 | for (ZWSPage *page in _visiblePages) { 260 | page.bounds = (CGRect){CGPointZero, self.bounds.size}; 261 | page.center = CGPointMake((page.index + .5) * CGRectGetWidth(self.frame), CGRectGetHeight(self.frame) / 2.0); 262 | } 263 | 264 | if (_visiblePages.count != 1 || _centerPage == _visiblePages.anyObject) { 265 | return; 266 | } 267 | 268 | _centerPage = _visiblePages.anyObject; 269 | 270 | [_pagingDelegate pagingView:self didMoveToPage:_centerPage]; 271 | } 272 | 273 | - (void)layoutSubviews { 274 | [super layoutSubviews]; 275 | 276 | if (_numberOfPages == 0) { 277 | return; 278 | } 279 | 280 | if (_scrollInfinitelyEnabled) { 281 | CGFloat w = _numberOfPages * CGRectGetWidth(self.frame); 282 | CGPoint offset = self.contentOffset; 283 | if (self.contentOffset.x + CGRectGetWidth(self.frame) > self.contentSize.width) { 284 | offset.x -= w; 285 | self.contentOffset = offset; 286 | } else if (self.contentOffset.x < .0) { 287 | offset.x += w; 288 | self.contentOffset = offset; 289 | } 290 | } 291 | 292 | [self tilePages:self.contentOffset]; 293 | 294 | [self layoutVisiblePages]; 295 | 296 | [_pagingDelegate pagingViewLayoutChanged:self]; 297 | } 298 | 299 | @end 300 | 301 | @implementation ZWSPage 302 | 303 | - (void)setIndex:(NSUInteger)index { 304 | _index = index; 305 | } 306 | 307 | - (NSUInteger)index { 308 | return _index; 309 | } 310 | 311 | - (void)setContentView:(UIView *)view { 312 | if (_contentView == view) { 313 | return; 314 | } 315 | 316 | if (_contentView) { 317 | [_contentView removeFromSuperview]; 318 | _contentView = nil; 319 | } 320 | 321 | if (view) { 322 | view.frame = self.bounds; 323 | view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 324 | [self addSubview:view]; 325 | } 326 | 327 | _contentView = view; 328 | } 329 | 330 | - (NSString *)description { 331 | return [NSString stringWithFormat:@"<%@:%p;frame=%@,contentView=%@", [self class], self, 332 | NSStringFromCGRect(self.frame), _contentView]; 333 | } 334 | 335 | @end 336 | -------------------------------------------------------------------------------- /Example/ZWSlideViewController.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 24F50E547318F1050201E05E /* Pods_ZWSlideViewController_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0BC998711080C9F2BA90D18 /* Pods_ZWSlideViewController_Example.framework */; }; 11 | 5916F1231C74123800DBF0B8 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5916F1221C74123800DBF0B8 /* Launch Screen.storyboard */; }; 12 | 595F7CA11B9E6FC300BB64EF /* ZWViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 595F7C9F1B9E6FC300BB64EF /* ZWViewController.m */; }; 13 | 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; 14 | 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; }; 15 | 6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; 16 | 6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; }; 17 | 6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; }; 18 | 6003F59E195388D20070C39A /* ZWSAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* ZWSAppDelegate.m */; }; 19 | 6003F5A9195388D20070C39A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5A8195388D20070C39A /* Images.xcassets */; }; 20 | 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F5AF195388D20070C39A /* XCTest.framework */; }; 21 | 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; 22 | 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; 23 | 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; 24 | 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXContainerItemProxy section */ 28 | 6003F5B3195388D20070C39A /* PBXContainerItemProxy */ = { 29 | isa = PBXContainerItemProxy; 30 | containerPortal = 6003F582195388D10070C39A /* Project object */; 31 | proxyType = 1; 32 | remoteGlobalIDString = 6003F589195388D20070C39A; 33 | remoteInfo = ZWSlideViewController; 34 | }; 35 | /* End PBXContainerItemProxy section */ 36 | 37 | /* Begin PBXFileReference section */ 38 | 134FCCA4218CEFBFD93E3C89 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 39 | 1A25582B46517A7F2A4EFFBB /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 40 | 3E62AB5382298562917EF4EE /* Pods-ZWSlideViewController_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZWSlideViewController_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example.debug.xcconfig"; sourceTree = ""; }; 41 | 4E497E022CDCA3E2331E8E77 /* Pods-ZWSlideViewController_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZWSlideViewController_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example.release.xcconfig"; sourceTree = ""; }; 42 | 54F89EE3EF9CDD6B728B9FA3 /* ZWSlideViewController.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = ZWSlideViewController.podspec; path = ../ZWSlideViewController.podspec; sourceTree = ""; }; 43 | 5916F1221C74123800DBF0B8 /* Launch Screen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; 44 | 595F7C9F1B9E6FC300BB64EF /* ZWViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZWViewController.m; sourceTree = ""; }; 45 | 595F7CA01B9E6FC300BB64EF /* ZWViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZWViewController.h; sourceTree = ""; }; 46 | 6003F58A195388D20070C39A /* ZWSlideViewController_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ZWSlideViewController_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 47 | 6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 48 | 6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 49 | 6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 50 | 6003F595195388D20070C39A /* ZWSlideViewController-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ZWSlideViewController-Info.plist"; sourceTree = ""; }; 51 | 6003F597195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 52 | 6003F599195388D20070C39A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 53 | 6003F59B195388D20070C39A /* ZWSlideViewController-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ZWSlideViewController-Prefix.pch"; sourceTree = ""; }; 54 | 6003F59C195388D20070C39A /* ZWSAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZWSAppDelegate.h; sourceTree = ""; }; 55 | 6003F59D195388D20070C39A /* ZWSAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ZWSAppDelegate.m; sourceTree = ""; }; 56 | 6003F5A8195388D20070C39A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 57 | 6003F5AE195388D20070C39A /* ZWSlideViewController_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZWSlideViewController_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 58 | 6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 59 | 6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = ""; }; 60 | 6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 61 | 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = ""; }; 62 | 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; }; 63 | F0BC998711080C9F2BA90D18 /* Pods_ZWSlideViewController_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ZWSlideViewController_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | /* End PBXFileReference section */ 65 | 66 | /* Begin PBXFrameworksBuildPhase section */ 67 | 6003F587195388D20070C39A /* Frameworks */ = { 68 | isa = PBXFrameworksBuildPhase; 69 | buildActionMask = 2147483647; 70 | files = ( 71 | 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */, 72 | 6003F592195388D20070C39A /* UIKit.framework in Frameworks */, 73 | 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */, 74 | 24F50E547318F1050201E05E /* Pods_ZWSlideViewController_Example.framework in Frameworks */, 75 | ); 76 | runOnlyForDeploymentPostprocessing = 0; 77 | }; 78 | 6003F5AB195388D20070C39A /* Frameworks */ = { 79 | isa = PBXFrameworksBuildPhase; 80 | buildActionMask = 2147483647; 81 | files = ( 82 | 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */, 83 | 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */, 84 | 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */, 85 | ); 86 | runOnlyForDeploymentPostprocessing = 0; 87 | }; 88 | /* End PBXFrameworksBuildPhase section */ 89 | 90 | /* Begin PBXGroup section */ 91 | 55DA5B4C26B8B29F9631685C /* Pods */ = { 92 | isa = PBXGroup; 93 | children = ( 94 | 3E62AB5382298562917EF4EE /* Pods-ZWSlideViewController_Example.debug.xcconfig */, 95 | 4E497E022CDCA3E2331E8E77 /* Pods-ZWSlideViewController_Example.release.xcconfig */, 96 | ); 97 | name = Pods; 98 | sourceTree = ""; 99 | }; 100 | 6003F581195388D10070C39A = { 101 | isa = PBXGroup; 102 | children = ( 103 | 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */, 104 | 6003F593195388D20070C39A /* Example for ZWSlideViewController */, 105 | 6003F5B5195388D20070C39A /* Tests */, 106 | 6003F58C195388D20070C39A /* Frameworks */, 107 | 6003F58B195388D20070C39A /* Products */, 108 | 55DA5B4C26B8B29F9631685C /* Pods */, 109 | ); 110 | sourceTree = ""; 111 | }; 112 | 6003F58B195388D20070C39A /* Products */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | 6003F58A195388D20070C39A /* ZWSlideViewController_Example.app */, 116 | 6003F5AE195388D20070C39A /* ZWSlideViewController_Tests.xctest */, 117 | ); 118 | name = Products; 119 | sourceTree = ""; 120 | }; 121 | 6003F58C195388D20070C39A /* Frameworks */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 6003F58D195388D20070C39A /* Foundation.framework */, 125 | 6003F58F195388D20070C39A /* CoreGraphics.framework */, 126 | 6003F591195388D20070C39A /* UIKit.framework */, 127 | 6003F5AF195388D20070C39A /* XCTest.framework */, 128 | F0BC998711080C9F2BA90D18 /* Pods_ZWSlideViewController_Example.framework */, 129 | ); 130 | name = Frameworks; 131 | sourceTree = ""; 132 | }; 133 | 6003F593195388D20070C39A /* Example for ZWSlideViewController */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | 6003F59C195388D20070C39A /* ZWSAppDelegate.h */, 137 | 6003F59D195388D20070C39A /* ZWSAppDelegate.m */, 138 | 595F7CA01B9E6FC300BB64EF /* ZWViewController.h */, 139 | 595F7C9F1B9E6FC300BB64EF /* ZWViewController.m */, 140 | 6003F5A8195388D20070C39A /* Images.xcassets */, 141 | 6003F594195388D20070C39A /* Supporting Files */, 142 | 5916F1221C74123800DBF0B8 /* Launch Screen.storyboard */, 143 | ); 144 | name = "Example for ZWSlideViewController"; 145 | path = ZWSlideViewController; 146 | sourceTree = ""; 147 | }; 148 | 6003F594195388D20070C39A /* Supporting Files */ = { 149 | isa = PBXGroup; 150 | children = ( 151 | 6003F595195388D20070C39A /* ZWSlideViewController-Info.plist */, 152 | 6003F596195388D20070C39A /* InfoPlist.strings */, 153 | 6003F599195388D20070C39A /* main.m */, 154 | 6003F59B195388D20070C39A /* ZWSlideViewController-Prefix.pch */, 155 | ); 156 | name = "Supporting Files"; 157 | sourceTree = ""; 158 | }; 159 | 6003F5B5195388D20070C39A /* Tests */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | 6003F5BB195388D20070C39A /* Tests.m */, 163 | 6003F5B6195388D20070C39A /* Supporting Files */, 164 | ); 165 | path = Tests; 166 | sourceTree = ""; 167 | }; 168 | 6003F5B6195388D20070C39A /* Supporting Files */ = { 169 | isa = PBXGroup; 170 | children = ( 171 | 6003F5B7195388D20070C39A /* Tests-Info.plist */, 172 | 6003F5B8195388D20070C39A /* InfoPlist.strings */, 173 | 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */, 174 | ); 175 | name = "Supporting Files"; 176 | sourceTree = ""; 177 | }; 178 | 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | 54F89EE3EF9CDD6B728B9FA3 /* ZWSlideViewController.podspec */, 182 | 134FCCA4218CEFBFD93E3C89 /* README.md */, 183 | 1A25582B46517A7F2A4EFFBB /* LICENSE */, 184 | ); 185 | name = "Podspec Metadata"; 186 | sourceTree = ""; 187 | }; 188 | /* End PBXGroup section */ 189 | 190 | /* Begin PBXNativeTarget section */ 191 | 6003F589195388D20070C39A /* ZWSlideViewController_Example */ = { 192 | isa = PBXNativeTarget; 193 | buildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "ZWSlideViewController_Example" */; 194 | buildPhases = ( 195 | 6D1BF6FE92942FC8E453624C /* [CP] Check Pods Manifest.lock */, 196 | 6003F586195388D20070C39A /* Sources */, 197 | 6003F587195388D20070C39A /* Frameworks */, 198 | 6003F588195388D20070C39A /* Resources */, 199 | 4D8F11BCFC858B8B9859617F /* [CP] Embed Pods Frameworks */, 200 | 6E5109CB28C9D34244F58C8F /* [CP] Copy Pods Resources */, 201 | ); 202 | buildRules = ( 203 | ); 204 | dependencies = ( 205 | ); 206 | name = ZWSlideViewController_Example; 207 | productName = ZWSlideViewController; 208 | productReference = 6003F58A195388D20070C39A /* ZWSlideViewController_Example.app */; 209 | productType = "com.apple.product-type.application"; 210 | }; 211 | 6003F5AD195388D20070C39A /* ZWSlideViewController_Tests */ = { 212 | isa = PBXNativeTarget; 213 | buildConfigurationList = 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "ZWSlideViewController_Tests" */; 214 | buildPhases = ( 215 | 6003F5AA195388D20070C39A /* Sources */, 216 | 6003F5AB195388D20070C39A /* Frameworks */, 217 | 6003F5AC195388D20070C39A /* Resources */, 218 | ); 219 | buildRules = ( 220 | ); 221 | dependencies = ( 222 | 6003F5B4195388D20070C39A /* PBXTargetDependency */, 223 | ); 224 | name = ZWSlideViewController_Tests; 225 | productName = ZWSlideViewControllerTests; 226 | productReference = 6003F5AE195388D20070C39A /* ZWSlideViewController_Tests.xctest */; 227 | productType = "com.apple.product-type.bundle.unit-test"; 228 | }; 229 | /* End PBXNativeTarget section */ 230 | 231 | /* Begin PBXProject section */ 232 | 6003F582195388D10070C39A /* Project object */ = { 233 | isa = PBXProject; 234 | attributes = { 235 | CLASSPREFIX = ZWS; 236 | LastUpgradeCheck = 0720; 237 | ORGANIZATIONNAME = "利伽"; 238 | TargetAttributes = { 239 | 6003F5AD195388D20070C39A = { 240 | TestTargetID = 6003F589195388D20070C39A; 241 | }; 242 | }; 243 | }; 244 | buildConfigurationList = 6003F585195388D10070C39A /* Build configuration list for PBXProject "ZWSlideViewController" */; 245 | compatibilityVersion = "Xcode 3.2"; 246 | developmentRegion = English; 247 | hasScannedForEncodings = 0; 248 | knownRegions = ( 249 | en, 250 | Base, 251 | ); 252 | mainGroup = 6003F581195388D10070C39A; 253 | productRefGroup = 6003F58B195388D20070C39A /* Products */; 254 | projectDirPath = ""; 255 | projectRoot = ""; 256 | targets = ( 257 | 6003F589195388D20070C39A /* ZWSlideViewController_Example */, 258 | 6003F5AD195388D20070C39A /* ZWSlideViewController_Tests */, 259 | ); 260 | }; 261 | /* End PBXProject section */ 262 | 263 | /* Begin PBXResourcesBuildPhase section */ 264 | 6003F588195388D20070C39A /* Resources */ = { 265 | isa = PBXResourcesBuildPhase; 266 | buildActionMask = 2147483647; 267 | files = ( 268 | 5916F1231C74123800DBF0B8 /* Launch Screen.storyboard in Resources */, 269 | 6003F5A9195388D20070C39A /* Images.xcassets in Resources */, 270 | 6003F598195388D20070C39A /* InfoPlist.strings in Resources */, 271 | ); 272 | runOnlyForDeploymentPostprocessing = 0; 273 | }; 274 | 6003F5AC195388D20070C39A /* Resources */ = { 275 | isa = PBXResourcesBuildPhase; 276 | buildActionMask = 2147483647; 277 | files = ( 278 | 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */, 279 | ); 280 | runOnlyForDeploymentPostprocessing = 0; 281 | }; 282 | /* End PBXResourcesBuildPhase section */ 283 | 284 | /* Begin PBXShellScriptBuildPhase section */ 285 | 4D8F11BCFC858B8B9859617F /* [CP] Embed Pods Frameworks */ = { 286 | isa = PBXShellScriptBuildPhase; 287 | buildActionMask = 2147483647; 288 | files = ( 289 | ); 290 | inputPaths = ( 291 | "${SRCROOT}/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example-frameworks.sh", 292 | "${BUILT_PRODUCTS_DIR}/ZWSlideViewController/ZWSlideViewController.framework", 293 | ); 294 | name = "[CP] Embed Pods Frameworks"; 295 | outputPaths = ( 296 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZWSlideViewController.framework", 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | shellPath = /bin/sh; 300 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example-frameworks.sh\"\n"; 301 | showEnvVarsInLog = 0; 302 | }; 303 | 6D1BF6FE92942FC8E453624C /* [CP] Check Pods Manifest.lock */ = { 304 | isa = PBXShellScriptBuildPhase; 305 | buildActionMask = 2147483647; 306 | files = ( 307 | ); 308 | inputPaths = ( 309 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 310 | "${PODS_ROOT}/Manifest.lock", 311 | ); 312 | name = "[CP] Check Pods Manifest.lock"; 313 | outputPaths = ( 314 | "$(DERIVED_FILE_DIR)/Pods-ZWSlideViewController_Example-checkManifestLockResult.txt", 315 | ); 316 | runOnlyForDeploymentPostprocessing = 0; 317 | shellPath = /bin/sh; 318 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 319 | showEnvVarsInLog = 0; 320 | }; 321 | 6E5109CB28C9D34244F58C8F /* [CP] Copy Pods Resources */ = { 322 | isa = PBXShellScriptBuildPhase; 323 | buildActionMask = 2147483647; 324 | files = ( 325 | ); 326 | inputPaths = ( 327 | ); 328 | name = "[CP] Copy Pods Resources"; 329 | outputPaths = ( 330 | ); 331 | runOnlyForDeploymentPostprocessing = 0; 332 | shellPath = /bin/sh; 333 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example-resources.sh\"\n"; 334 | showEnvVarsInLog = 0; 335 | }; 336 | /* End PBXShellScriptBuildPhase section */ 337 | 338 | /* Begin PBXSourcesBuildPhase section */ 339 | 6003F586195388D20070C39A /* Sources */ = { 340 | isa = PBXSourcesBuildPhase; 341 | buildActionMask = 2147483647; 342 | files = ( 343 | 6003F59E195388D20070C39A /* ZWSAppDelegate.m in Sources */, 344 | 6003F59A195388D20070C39A /* main.m in Sources */, 345 | 595F7CA11B9E6FC300BB64EF /* ZWViewController.m in Sources */, 346 | ); 347 | runOnlyForDeploymentPostprocessing = 0; 348 | }; 349 | 6003F5AA195388D20070C39A /* Sources */ = { 350 | isa = PBXSourcesBuildPhase; 351 | buildActionMask = 2147483647; 352 | files = ( 353 | 6003F5BC195388D20070C39A /* Tests.m in Sources */, 354 | ); 355 | runOnlyForDeploymentPostprocessing = 0; 356 | }; 357 | /* End PBXSourcesBuildPhase section */ 358 | 359 | /* Begin PBXTargetDependency section */ 360 | 6003F5B4195388D20070C39A /* PBXTargetDependency */ = { 361 | isa = PBXTargetDependency; 362 | target = 6003F589195388D20070C39A /* ZWSlideViewController_Example */; 363 | targetProxy = 6003F5B3195388D20070C39A /* PBXContainerItemProxy */; 364 | }; 365 | /* End PBXTargetDependency section */ 366 | 367 | /* Begin PBXVariantGroup section */ 368 | 6003F596195388D20070C39A /* InfoPlist.strings */ = { 369 | isa = PBXVariantGroup; 370 | children = ( 371 | 6003F597195388D20070C39A /* en */, 372 | ); 373 | name = InfoPlist.strings; 374 | sourceTree = ""; 375 | }; 376 | 6003F5B8195388D20070C39A /* InfoPlist.strings */ = { 377 | isa = PBXVariantGroup; 378 | children = ( 379 | 6003F5B9195388D20070C39A /* en */, 380 | ); 381 | name = InfoPlist.strings; 382 | sourceTree = ""; 383 | }; 384 | /* End PBXVariantGroup section */ 385 | 386 | /* Begin XCBuildConfiguration section */ 387 | 6003F5BD195388D20070C39A /* Debug */ = { 388 | isa = XCBuildConfiguration; 389 | buildSettings = { 390 | ALWAYS_SEARCH_USER_PATHS = NO; 391 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 392 | CLANG_CXX_LIBRARY = "libc++"; 393 | CLANG_ENABLE_MODULES = YES; 394 | CLANG_ENABLE_OBJC_ARC = YES; 395 | CLANG_WARN_BOOL_CONVERSION = YES; 396 | CLANG_WARN_CONSTANT_CONVERSION = YES; 397 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 398 | CLANG_WARN_EMPTY_BODY = YES; 399 | CLANG_WARN_ENUM_CONVERSION = YES; 400 | CLANG_WARN_INT_CONVERSION = YES; 401 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 402 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 403 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 404 | COPY_PHASE_STRIP = NO; 405 | ENABLE_TESTABILITY = YES; 406 | GCC_C_LANGUAGE_STANDARD = gnu99; 407 | GCC_DYNAMIC_NO_PIC = NO; 408 | GCC_OPTIMIZATION_LEVEL = 0; 409 | GCC_PREPROCESSOR_DEFINITIONS = ( 410 | "DEBUG=1", 411 | "$(inherited)", 412 | ); 413 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 414 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 415 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 416 | GCC_WARN_UNDECLARED_SELECTOR = YES; 417 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 418 | GCC_WARN_UNUSED_FUNCTION = YES; 419 | GCC_WARN_UNUSED_VARIABLE = YES; 420 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 421 | ONLY_ACTIVE_ARCH = YES; 422 | SDKROOT = iphoneos; 423 | TARGETED_DEVICE_FAMILY = "1,2"; 424 | }; 425 | name = Debug; 426 | }; 427 | 6003F5BE195388D20070C39A /* Release */ = { 428 | isa = XCBuildConfiguration; 429 | buildSettings = { 430 | ALWAYS_SEARCH_USER_PATHS = NO; 431 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 432 | CLANG_CXX_LIBRARY = "libc++"; 433 | CLANG_ENABLE_MODULES = YES; 434 | CLANG_ENABLE_OBJC_ARC = YES; 435 | CLANG_WARN_BOOL_CONVERSION = YES; 436 | CLANG_WARN_CONSTANT_CONVERSION = YES; 437 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 438 | CLANG_WARN_EMPTY_BODY = YES; 439 | CLANG_WARN_ENUM_CONVERSION = YES; 440 | CLANG_WARN_INT_CONVERSION = YES; 441 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 442 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 443 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 444 | COPY_PHASE_STRIP = YES; 445 | ENABLE_NS_ASSERTIONS = NO; 446 | GCC_C_LANGUAGE_STANDARD = gnu99; 447 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 448 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 449 | GCC_WARN_UNDECLARED_SELECTOR = YES; 450 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 451 | GCC_WARN_UNUSED_FUNCTION = YES; 452 | GCC_WARN_UNUSED_VARIABLE = YES; 453 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 454 | SDKROOT = iphoneos; 455 | TARGETED_DEVICE_FAMILY = "1,2"; 456 | VALIDATE_PRODUCT = YES; 457 | }; 458 | name = Release; 459 | }; 460 | 6003F5C0195388D20070C39A /* Debug */ = { 461 | isa = XCBuildConfiguration; 462 | baseConfigurationReference = 3E62AB5382298562917EF4EE /* Pods-ZWSlideViewController_Example.debug.xcconfig */; 463 | buildSettings = { 464 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 465 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 466 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 467 | GCC_PREFIX_HEADER = "ZWSlideViewController/ZWSlideViewController-Prefix.pch"; 468 | INFOPLIST_FILE = "ZWSlideViewController/ZWSlideViewController-Info.plist"; 469 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 470 | MODULE_NAME = ExampleApp; 471 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 472 | PRODUCT_NAME = "$(TARGET_NAME)"; 473 | WRAPPER_EXTENSION = app; 474 | }; 475 | name = Debug; 476 | }; 477 | 6003F5C1195388D20070C39A /* Release */ = { 478 | isa = XCBuildConfiguration; 479 | baseConfigurationReference = 4E497E022CDCA3E2331E8E77 /* Pods-ZWSlideViewController_Example.release.xcconfig */; 480 | buildSettings = { 481 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 482 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 483 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 484 | GCC_PREFIX_HEADER = "ZWSlideViewController/ZWSlideViewController-Prefix.pch"; 485 | INFOPLIST_FILE = "ZWSlideViewController/ZWSlideViewController-Info.plist"; 486 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 487 | MODULE_NAME = ExampleApp; 488 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 489 | PRODUCT_NAME = "$(TARGET_NAME)"; 490 | WRAPPER_EXTENSION = app; 491 | }; 492 | name = Release; 493 | }; 494 | 6003F5C3195388D20070C39A /* Debug */ = { 495 | isa = XCBuildConfiguration; 496 | buildSettings = { 497 | BUNDLE_LOADER = "$(TEST_HOST)"; 498 | FRAMEWORK_SEARCH_PATHS = ( 499 | "$(SDKROOT)/Developer/Library/Frameworks", 500 | "$(inherited)", 501 | "$(DEVELOPER_FRAMEWORKS_DIR)", 502 | ); 503 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 504 | GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; 505 | GCC_PREPROCESSOR_DEFINITIONS = ( 506 | "DEBUG=1", 507 | "$(inherited)", 508 | ); 509 | INFOPLIST_FILE = "Tests/Tests-Info.plist"; 510 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 511 | PRODUCT_NAME = "$(TARGET_NAME)"; 512 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ZWSlideViewController_Example.app/ZWSlideViewController_Example"; 513 | WRAPPER_EXTENSION = xctest; 514 | }; 515 | name = Debug; 516 | }; 517 | 6003F5C4195388D20070C39A /* Release */ = { 518 | isa = XCBuildConfiguration; 519 | buildSettings = { 520 | BUNDLE_LOADER = "$(TEST_HOST)"; 521 | FRAMEWORK_SEARCH_PATHS = ( 522 | "$(SDKROOT)/Developer/Library/Frameworks", 523 | "$(inherited)", 524 | "$(DEVELOPER_FRAMEWORKS_DIR)", 525 | ); 526 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 527 | GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; 528 | INFOPLIST_FILE = "Tests/Tests-Info.plist"; 529 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 530 | PRODUCT_NAME = "$(TARGET_NAME)"; 531 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ZWSlideViewController_Example.app/ZWSlideViewController_Example"; 532 | WRAPPER_EXTENSION = xctest; 533 | }; 534 | name = Release; 535 | }; 536 | /* End XCBuildConfiguration section */ 537 | 538 | /* Begin XCConfigurationList section */ 539 | 6003F585195388D10070C39A /* Build configuration list for PBXProject "ZWSlideViewController" */ = { 540 | isa = XCConfigurationList; 541 | buildConfigurations = ( 542 | 6003F5BD195388D20070C39A /* Debug */, 543 | 6003F5BE195388D20070C39A /* Release */, 544 | ); 545 | defaultConfigurationIsVisible = 0; 546 | defaultConfigurationName = Release; 547 | }; 548 | 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "ZWSlideViewController_Example" */ = { 549 | isa = XCConfigurationList; 550 | buildConfigurations = ( 551 | 6003F5C0195388D20070C39A /* Debug */, 552 | 6003F5C1195388D20070C39A /* Release */, 553 | ); 554 | defaultConfigurationIsVisible = 0; 555 | defaultConfigurationName = Release; 556 | }; 557 | 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "ZWSlideViewController_Tests" */ = { 558 | isa = XCConfigurationList; 559 | buildConfigurations = ( 560 | 6003F5C3195388D20070C39A /* Debug */, 561 | 6003F5C4195388D20070C39A /* Release */, 562 | ); 563 | defaultConfigurationIsVisible = 0; 564 | defaultConfigurationName = Release; 565 | }; 566 | /* End XCConfigurationList section */ 567 | }; 568 | rootObject = 6003F582195388D10070C39A /* Project object */; 569 | } 570 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0080B06A0ADBBC9D271E793A6E1055A9 /* ZWSFlowMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = F14342D03A042A62932F20D77A0F59B8 /* ZWSFlowMenu.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 0C559C7E1CA3E0D9352CF83E226E3DA3 /* ZWSViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F893D6C28F5B828E2DB62075A5633E9 /* ZWSViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | 20AB46C960B368FEEF41FE598FD64CDD /* ZWSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A73553A991CE9CECFB586708FE0F287 /* ZWSViewController.m */; }; 13 | 35D1D2B5134C078F848A20D61E1E9292 /* ZWSMenuLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7632BAF434F13A6F8F23C3EE27AAAE66 /* ZWSMenuLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 3C5CFADCCFD5317943ABFAC22FBDE191 /* Pods-ZWSlideViewController_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 70756CC38FF547ED63E5AEFA81E7680A /* Pods-ZWSlideViewController_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | 530B8A7A2ED75F02979E02EF2020667A /* ZWSMenuLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B3BC89AE6DEBDBA68EF3FAC8991A95 /* ZWSMenuLabel.m */; }; 16 | 5EE33E0D3085F48DAA4E1BD5C2038220 /* ZWSlideViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DA6ABF7F550F0A98D8CBEA16F93D585A /* ZWSlideViewController-dummy.m */; }; 17 | 600334FABDD3406097EA9840DF620069 /* ZWSSectionBar.m in Sources */ = {isa = PBXBuildFile; fileRef = A5A06AF584293A8B3624E731CAA44890 /* ZWSSectionBar.m */; }; 18 | 720F4925B9B8C4BEB4CC59D82D292E03 /* ZWSPagingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E6A2233917C6CFA1C0D71EA23320921 /* ZWSPagingView.m */; }; 19 | 78CC0DBB51A7F02890B4D66EE90579E3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 20 | 7D41D0BFA1453DE1E08AAAC8E74A3E1C /* Pods-ZWSlideViewController_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE605E66C38A194CEB96BF151D0C4E7 /* Pods-ZWSlideViewController_Example-dummy.m */; }; 21 | 85898D28D49A0A36E199480FF3907290 /* ZWSFlowMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 5985A0EF356D5F8CEEA8CF62BE744913 /* ZWSFlowMenu.m */; }; 22 | 9A89048F0DBF0C4740D6E5007A5DBDC7 /* ZWSlideViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CF8D12071734BF53C83E69F7C08881FF /* ZWSlideViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23 | A0BB4DC8761307A701F22EC3AE4D6B04 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 24 | B2503BE21211A009BBAF25D0EADF641D /* ZWSPagingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EDA6A9D028F3149A07D7DF45ABE5CCE /* ZWSPagingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 25 | F7FFE85986DB28266B1DDFACA0504BCC /* ZWSSectionBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D865D2A183CC15246F0B91CC18C01D6 /* ZWSSectionBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | 34D0AFA689D82DEDEF1B032D470EC0AC /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = 078F5F2608D5624A602C00994E29ED72; 34 | remoteInfo = ZWSlideViewController; 35 | }; 36 | /* End PBXContainerItemProxy section */ 37 | 38 | /* Begin PBXFileReference section */ 39 | 22394D36CF8E646E113CC3325BB5309F /* Pods-ZWSlideViewController_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZWSlideViewController_Example-acknowledgements.plist"; sourceTree = ""; }; 40 | 23B3BC89AE6DEBDBA68EF3FAC8991A95 /* ZWSMenuLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZWSMenuLabel.m; path = Pod/Classes/ZWSMenuLabel.m; sourceTree = ""; }; 41 | 27CF763DC643F937688925827DA67CE8 /* Pods-ZWSlideViewController_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ZWSlideViewController_Example-acknowledgements.markdown"; sourceTree = ""; }; 42 | 3357D255142957BF30B93E0D31C10A80 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 43 | 387DF0908872D8F4D01B328C09950F31 /* ZWSlideViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZWSlideViewController.framework; path = ZWSlideViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 3CFEDBDD228A0013A111F96AD4DE03EE /* Pods_ZWSlideViewController_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ZWSlideViewController_Example.framework; path = "Pods-ZWSlideViewController_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 4A73553A991CE9CECFB586708FE0F287 /* ZWSViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZWSViewController.m; path = Pod/Classes/ZWSViewController.m; sourceTree = ""; }; 46 | 4CE605E66C38A194CEB96BF151D0C4E7 /* Pods-ZWSlideViewController_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ZWSlideViewController_Example-dummy.m"; sourceTree = ""; }; 47 | 5985A0EF356D5F8CEEA8CF62BE744913 /* ZWSFlowMenu.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZWSFlowMenu.m; path = Pod/Classes/ZWSFlowMenu.m; sourceTree = ""; }; 48 | 61F087CA9141614063A97FFB14514CCE /* Pods-ZWSlideViewController_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ZWSlideViewController_Example-resources.sh"; sourceTree = ""; }; 49 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 50 | 70756CC38FF547ED63E5AEFA81E7680A /* Pods-ZWSlideViewController_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ZWSlideViewController_Example-umbrella.h"; sourceTree = ""; }; 51 | 745058DDA378C83DD3B8853B2E15EEDE /* ZWSlideViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZWSlideViewController-prefix.pch"; sourceTree = ""; }; 52 | 7632BAF434F13A6F8F23C3EE27AAAE66 /* ZWSMenuLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZWSMenuLabel.h; path = Pod/Classes/ZWSMenuLabel.h; sourceTree = ""; }; 53 | 7E6A2233917C6CFA1C0D71EA23320921 /* ZWSPagingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZWSPagingView.m; path = Pod/Classes/ZWSPagingView.m; sourceTree = ""; }; 54 | 7EDA6A9D028F3149A07D7DF45ABE5CCE /* ZWSPagingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZWSPagingView.h; path = Pod/Classes/ZWSPagingView.h; sourceTree = ""; }; 55 | 7F893D6C28F5B828E2DB62075A5633E9 /* ZWSViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZWSViewController.h; path = Pod/Classes/ZWSViewController.h; sourceTree = ""; }; 56 | 81702817565BC5227259FE8F12F2D8C8 /* Pods-ZWSlideViewController_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-ZWSlideViewController_Example.modulemap"; sourceTree = ""; }; 57 | 83DE4C4410984D4218476F17798DF51B /* Pods-ZWSlideViewController_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ZWSlideViewController_Example-frameworks.sh"; sourceTree = ""; }; 58 | 86D125F18136E15554A1101024EDDF1E /* ZWSlideViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = ZWSlideViewController.modulemap; sourceTree = ""; }; 59 | 8D865D2A183CC15246F0B91CC18C01D6 /* ZWSSectionBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZWSSectionBar.h; path = Pod/Classes/ZWSSectionBar.h; sourceTree = ""; }; 60 | 90E0D52016E8190D3573CFE38005C687 /* Pods-ZWSlideViewController_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZWSlideViewController_Example.debug.xcconfig"; sourceTree = ""; }; 61 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 62 | 93FB54358BD4ABB54D428937C01F4B77 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 63 | A5A06AF584293A8B3624E731CAA44890 /* ZWSSectionBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZWSSectionBar.m; path = Pod/Classes/ZWSSectionBar.m; sourceTree = ""; }; 64 | AA31EBA1DDF29F64DF5DBC0673678F2C /* Pods-ZWSlideViewController_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZWSlideViewController_Example.release.xcconfig"; sourceTree = ""; }; 65 | CF8D12071734BF53C83E69F7C08881FF /* ZWSlideViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZWSlideViewController-umbrella.h"; sourceTree = ""; }; 66 | DA6ABF7F550F0A98D8CBEA16F93D585A /* ZWSlideViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZWSlideViewController-dummy.m"; sourceTree = ""; }; 67 | F14342D03A042A62932F20D77A0F59B8 /* ZWSFlowMenu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZWSFlowMenu.h; path = Pod/Classes/ZWSFlowMenu.h; sourceTree = ""; }; 68 | F5224412C51B8144A86F40ABF928E5D4 /* ZWSlideViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZWSlideViewController.xcconfig; sourceTree = ""; }; 69 | /* End PBXFileReference section */ 70 | 71 | /* Begin PBXFrameworksBuildPhase section */ 72 | 117B223D0F0D41789A0446DB40F2CB5C /* Frameworks */ = { 73 | isa = PBXFrameworksBuildPhase; 74 | buildActionMask = 2147483647; 75 | files = ( 76 | A0BB4DC8761307A701F22EC3AE4D6B04 /* Foundation.framework in Frameworks */, 77 | ); 78 | runOnlyForDeploymentPostprocessing = 0; 79 | }; 80 | E0EB1A96E917F21395FFD05AD436C9AC /* Frameworks */ = { 81 | isa = PBXFrameworksBuildPhase; 82 | buildActionMask = 2147483647; 83 | files = ( 84 | 78CC0DBB51A7F02890B4D66EE90579E3 /* Foundation.framework in Frameworks */, 85 | ); 86 | runOnlyForDeploymentPostprocessing = 0; 87 | }; 88 | /* End PBXFrameworksBuildPhase section */ 89 | 90 | /* Begin PBXGroup section */ 91 | 7B31D98EF37F1951F1A0E0CB03FA0A76 /* Support Files */ = { 92 | isa = PBXGroup; 93 | children = ( 94 | 93FB54358BD4ABB54D428937C01F4B77 /* Info.plist */, 95 | 86D125F18136E15554A1101024EDDF1E /* ZWSlideViewController.modulemap */, 96 | F5224412C51B8144A86F40ABF928E5D4 /* ZWSlideViewController.xcconfig */, 97 | DA6ABF7F550F0A98D8CBEA16F93D585A /* ZWSlideViewController-dummy.m */, 98 | 745058DDA378C83DD3B8853B2E15EEDE /* ZWSlideViewController-prefix.pch */, 99 | CF8D12071734BF53C83E69F7C08881FF /* ZWSlideViewController-umbrella.h */, 100 | ); 101 | name = "Support Files"; 102 | path = "../Target Support Files/ZWSlideViewController"; 103 | sourceTree = ""; 104 | }; 105 | 7DB346D0F39D3F0E887471402A8071AB = { 106 | isa = PBXGroup; 107 | children = ( 108 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 109 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 110 | F0F5428469035A3D3B4376D32F7A43B0 /* Pods */, 111 | EDCA4DBD1055F2ABDA5BA7EC1FF7D67A /* Products */, 112 | 9FD7E2DB3D0582A04D4471AD8F241789 /* Targets Support Files */, 113 | ); 114 | sourceTree = ""; 115 | }; 116 | 9FD7E2DB3D0582A04D4471AD8F241789 /* Targets Support Files */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | D914A157473985618C0F6C11390E058C /* Pods-ZWSlideViewController_Example */, 120 | ); 121 | name = "Targets Support Files"; 122 | sourceTree = ""; 123 | }; 124 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | D35AF013A5F0BAD4F32504907A52519E /* iOS */, 128 | ); 129 | name = Frameworks; 130 | sourceTree = ""; 131 | }; 132 | D35AF013A5F0BAD4F32504907A52519E /* iOS */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */, 136 | ); 137 | name = iOS; 138 | sourceTree = ""; 139 | }; 140 | D914A157473985618C0F6C11390E058C /* Pods-ZWSlideViewController_Example */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | 3357D255142957BF30B93E0D31C10A80 /* Info.plist */, 144 | 81702817565BC5227259FE8F12F2D8C8 /* Pods-ZWSlideViewController_Example.modulemap */, 145 | 27CF763DC643F937688925827DA67CE8 /* Pods-ZWSlideViewController_Example-acknowledgements.markdown */, 146 | 22394D36CF8E646E113CC3325BB5309F /* Pods-ZWSlideViewController_Example-acknowledgements.plist */, 147 | 4CE605E66C38A194CEB96BF151D0C4E7 /* Pods-ZWSlideViewController_Example-dummy.m */, 148 | 83DE4C4410984D4218476F17798DF51B /* Pods-ZWSlideViewController_Example-frameworks.sh */, 149 | 61F087CA9141614063A97FFB14514CCE /* Pods-ZWSlideViewController_Example-resources.sh */, 150 | 70756CC38FF547ED63E5AEFA81E7680A /* Pods-ZWSlideViewController_Example-umbrella.h */, 151 | 90E0D52016E8190D3573CFE38005C687 /* Pods-ZWSlideViewController_Example.debug.xcconfig */, 152 | AA31EBA1DDF29F64DF5DBC0673678F2C /* Pods-ZWSlideViewController_Example.release.xcconfig */, 153 | ); 154 | name = "Pods-ZWSlideViewController_Example"; 155 | path = "Target Support Files/Pods-ZWSlideViewController_Example"; 156 | sourceTree = ""; 157 | }; 158 | EDCA4DBD1055F2ABDA5BA7EC1FF7D67A /* Products */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | 3CFEDBDD228A0013A111F96AD4DE03EE /* Pods_ZWSlideViewController_Example.framework */, 162 | 387DF0908872D8F4D01B328C09950F31 /* ZWSlideViewController.framework */, 163 | ); 164 | name = Products; 165 | sourceTree = ""; 166 | }; 167 | F0F5428469035A3D3B4376D32F7A43B0 /* Pods */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | F219362CE56B2D6EE017E4EC178B2E0C /* ZWSlideViewController */, 171 | ); 172 | name = Pods; 173 | sourceTree = ""; 174 | }; 175 | F219362CE56B2D6EE017E4EC178B2E0C /* ZWSlideViewController */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | F14342D03A042A62932F20D77A0F59B8 /* ZWSFlowMenu.h */, 179 | 5985A0EF356D5F8CEEA8CF62BE744913 /* ZWSFlowMenu.m */, 180 | 7632BAF434F13A6F8F23C3EE27AAAE66 /* ZWSMenuLabel.h */, 181 | 23B3BC89AE6DEBDBA68EF3FAC8991A95 /* ZWSMenuLabel.m */, 182 | 7EDA6A9D028F3149A07D7DF45ABE5CCE /* ZWSPagingView.h */, 183 | 7E6A2233917C6CFA1C0D71EA23320921 /* ZWSPagingView.m */, 184 | 8D865D2A183CC15246F0B91CC18C01D6 /* ZWSSectionBar.h */, 185 | A5A06AF584293A8B3624E731CAA44890 /* ZWSSectionBar.m */, 186 | 7F893D6C28F5B828E2DB62075A5633E9 /* ZWSViewController.h */, 187 | 4A73553A991CE9CECFB586708FE0F287 /* ZWSViewController.m */, 188 | 7B31D98EF37F1951F1A0E0CB03FA0A76 /* Support Files */, 189 | ); 190 | name = ZWSlideViewController; 191 | path = ZWSlideViewController; 192 | sourceTree = ""; 193 | }; 194 | /* End PBXGroup section */ 195 | 196 | /* Begin PBXHeadersBuildPhase section */ 197 | 9EA1B5BE16DEB72C8890EBC86D3E06AE /* Headers */ = { 198 | isa = PBXHeadersBuildPhase; 199 | buildActionMask = 2147483647; 200 | files = ( 201 | 0080B06A0ADBBC9D271E793A6E1055A9 /* ZWSFlowMenu.h in Headers */, 202 | 9A89048F0DBF0C4740D6E5007A5DBDC7 /* ZWSlideViewController-umbrella.h in Headers */, 203 | 35D1D2B5134C078F848A20D61E1E9292 /* ZWSMenuLabel.h in Headers */, 204 | B2503BE21211A009BBAF25D0EADF641D /* ZWSPagingView.h in Headers */, 205 | F7FFE85986DB28266B1DDFACA0504BCC /* ZWSSectionBar.h in Headers */, 206 | 0C559C7E1CA3E0D9352CF83E226E3DA3 /* ZWSViewController.h in Headers */, 207 | ); 208 | runOnlyForDeploymentPostprocessing = 0; 209 | }; 210 | A0FB7164951818A9D783DBB8FCC99D41 /* Headers */ = { 211 | isa = PBXHeadersBuildPhase; 212 | buildActionMask = 2147483647; 213 | files = ( 214 | 3C5CFADCCFD5317943ABFAC22FBDE191 /* Pods-ZWSlideViewController_Example-umbrella.h in Headers */, 215 | ); 216 | runOnlyForDeploymentPostprocessing = 0; 217 | }; 218 | /* End PBXHeadersBuildPhase section */ 219 | 220 | /* Begin PBXNativeTarget section */ 221 | 078F5F2608D5624A602C00994E29ED72 /* ZWSlideViewController */ = { 222 | isa = PBXNativeTarget; 223 | buildConfigurationList = E194601290FD78467A5FB3B601DF2F5A /* Build configuration list for PBXNativeTarget "ZWSlideViewController" */; 224 | buildPhases = ( 225 | 0A25F6CDF084F1C98CDB1E210553B84F /* Sources */, 226 | E0EB1A96E917F21395FFD05AD436C9AC /* Frameworks */, 227 | 9EA1B5BE16DEB72C8890EBC86D3E06AE /* Headers */, 228 | ); 229 | buildRules = ( 230 | ); 231 | dependencies = ( 232 | ); 233 | name = ZWSlideViewController; 234 | productName = ZWSlideViewController; 235 | productReference = 387DF0908872D8F4D01B328C09950F31 /* ZWSlideViewController.framework */; 236 | productType = "com.apple.product-type.framework"; 237 | }; 238 | 7F8D6468BE9C0655CB69F214FC10DB76 /* Pods-ZWSlideViewController_Example */ = { 239 | isa = PBXNativeTarget; 240 | buildConfigurationList = C9C550CD8490BEC1550913F915322908 /* Build configuration list for PBXNativeTarget "Pods-ZWSlideViewController_Example" */; 241 | buildPhases = ( 242 | 3F5F6A87FB0939934D3D4B14B9CF7BB5 /* Sources */, 243 | 117B223D0F0D41789A0446DB40F2CB5C /* Frameworks */, 244 | A0FB7164951818A9D783DBB8FCC99D41 /* Headers */, 245 | ); 246 | buildRules = ( 247 | ); 248 | dependencies = ( 249 | 9EF73AA8D370E83FD489433D2D8859DB /* PBXTargetDependency */, 250 | ); 251 | name = "Pods-ZWSlideViewController_Example"; 252 | productName = "Pods-ZWSlideViewController_Example"; 253 | productReference = 3CFEDBDD228A0013A111F96AD4DE03EE /* Pods_ZWSlideViewController_Example.framework */; 254 | productType = "com.apple.product-type.framework"; 255 | }; 256 | /* End PBXNativeTarget section */ 257 | 258 | /* Begin PBXProject section */ 259 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 260 | isa = PBXProject; 261 | attributes = { 262 | LastSwiftUpdateCheck = 0830; 263 | LastUpgradeCheck = 0700; 264 | }; 265 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 266 | compatibilityVersion = "Xcode 3.2"; 267 | developmentRegion = English; 268 | hasScannedForEncodings = 0; 269 | knownRegions = ( 270 | en, 271 | ); 272 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 273 | productRefGroup = EDCA4DBD1055F2ABDA5BA7EC1FF7D67A /* Products */; 274 | projectDirPath = ""; 275 | projectRoot = ""; 276 | targets = ( 277 | 7F8D6468BE9C0655CB69F214FC10DB76 /* Pods-ZWSlideViewController_Example */, 278 | 078F5F2608D5624A602C00994E29ED72 /* ZWSlideViewController */, 279 | ); 280 | }; 281 | /* End PBXProject section */ 282 | 283 | /* Begin PBXSourcesBuildPhase section */ 284 | 0A25F6CDF084F1C98CDB1E210553B84F /* Sources */ = { 285 | isa = PBXSourcesBuildPhase; 286 | buildActionMask = 2147483647; 287 | files = ( 288 | 85898D28D49A0A36E199480FF3907290 /* ZWSFlowMenu.m in Sources */, 289 | 5EE33E0D3085F48DAA4E1BD5C2038220 /* ZWSlideViewController-dummy.m in Sources */, 290 | 530B8A7A2ED75F02979E02EF2020667A /* ZWSMenuLabel.m in Sources */, 291 | 720F4925B9B8C4BEB4CC59D82D292E03 /* ZWSPagingView.m in Sources */, 292 | 600334FABDD3406097EA9840DF620069 /* ZWSSectionBar.m in Sources */, 293 | 20AB46C960B368FEEF41FE598FD64CDD /* ZWSViewController.m in Sources */, 294 | ); 295 | runOnlyForDeploymentPostprocessing = 0; 296 | }; 297 | 3F5F6A87FB0939934D3D4B14B9CF7BB5 /* Sources */ = { 298 | isa = PBXSourcesBuildPhase; 299 | buildActionMask = 2147483647; 300 | files = ( 301 | 7D41D0BFA1453DE1E08AAAC8E74A3E1C /* Pods-ZWSlideViewController_Example-dummy.m in Sources */, 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | }; 305 | /* End PBXSourcesBuildPhase section */ 306 | 307 | /* Begin PBXTargetDependency section */ 308 | 9EF73AA8D370E83FD489433D2D8859DB /* PBXTargetDependency */ = { 309 | isa = PBXTargetDependency; 310 | name = ZWSlideViewController; 311 | target = 078F5F2608D5624A602C00994E29ED72 /* ZWSlideViewController */; 312 | targetProxy = 34D0AFA689D82DEDEF1B032D470EC0AC /* PBXContainerItemProxy */; 313 | }; 314 | /* End PBXTargetDependency section */ 315 | 316 | /* Begin XCBuildConfiguration section */ 317 | 1C7D17A37D091C98D2F0DD886C3A9320 /* Debug */ = { 318 | isa = XCBuildConfiguration; 319 | buildSettings = { 320 | ALWAYS_SEARCH_USER_PATHS = NO; 321 | CLANG_ANALYZER_NONNULL = YES; 322 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; 323 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 324 | CLANG_CXX_LIBRARY = "libc++"; 325 | CLANG_ENABLE_MODULES = YES; 326 | CLANG_ENABLE_OBJC_ARC = YES; 327 | CLANG_WARN_BOOL_CONVERSION = YES; 328 | CLANG_WARN_CONSTANT_CONVERSION = YES; 329 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 330 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 331 | CLANG_WARN_EMPTY_BODY = YES; 332 | CLANG_WARN_ENUM_CONVERSION = YES; 333 | CLANG_WARN_INFINITE_RECURSION = YES; 334 | CLANG_WARN_INT_CONVERSION = YES; 335 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 336 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 337 | CLANG_WARN_UNREACHABLE_CODE = YES; 338 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 339 | CODE_SIGNING_REQUIRED = NO; 340 | COPY_PHASE_STRIP = NO; 341 | ENABLE_TESTABILITY = YES; 342 | GCC_C_LANGUAGE_STANDARD = gnu99; 343 | GCC_DYNAMIC_NO_PIC = NO; 344 | GCC_OPTIMIZATION_LEVEL = 0; 345 | GCC_PREPROCESSOR_DEFINITIONS = ( 346 | "POD_CONFIGURATION_DEBUG=1", 347 | "DEBUG=1", 348 | "$(inherited)", 349 | ); 350 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 351 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 352 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 353 | GCC_WARN_UNDECLARED_SELECTOR = YES; 354 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 355 | GCC_WARN_UNUSED_FUNCTION = YES; 356 | GCC_WARN_UNUSED_VARIABLE = YES; 357 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 358 | ONLY_ACTIVE_ARCH = YES; 359 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 360 | STRIP_INSTALLED_PRODUCT = NO; 361 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 362 | SYMROOT = "${SRCROOT}/../build"; 363 | }; 364 | name = Debug; 365 | }; 366 | 34FE9531DA9AF2820790339988D5FF41 /* Release */ = { 367 | isa = XCBuildConfiguration; 368 | buildSettings = { 369 | ALWAYS_SEARCH_USER_PATHS = NO; 370 | CLANG_ANALYZER_NONNULL = YES; 371 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; 372 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 373 | CLANG_CXX_LIBRARY = "libc++"; 374 | CLANG_ENABLE_MODULES = YES; 375 | CLANG_ENABLE_OBJC_ARC = YES; 376 | CLANG_WARN_BOOL_CONVERSION = YES; 377 | CLANG_WARN_CONSTANT_CONVERSION = YES; 378 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 379 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 380 | CLANG_WARN_EMPTY_BODY = YES; 381 | CLANG_WARN_ENUM_CONVERSION = YES; 382 | CLANG_WARN_INFINITE_RECURSION = YES; 383 | CLANG_WARN_INT_CONVERSION = YES; 384 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 385 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 386 | CLANG_WARN_UNREACHABLE_CODE = YES; 387 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 388 | CODE_SIGNING_REQUIRED = NO; 389 | COPY_PHASE_STRIP = YES; 390 | ENABLE_NS_ASSERTIONS = NO; 391 | GCC_C_LANGUAGE_STANDARD = gnu99; 392 | GCC_PREPROCESSOR_DEFINITIONS = ( 393 | "POD_CONFIGURATION_RELEASE=1", 394 | "$(inherited)", 395 | ); 396 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 397 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 398 | GCC_WARN_UNDECLARED_SELECTOR = YES; 399 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 400 | GCC_WARN_UNUSED_FUNCTION = YES; 401 | GCC_WARN_UNUSED_VARIABLE = YES; 402 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 403 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 404 | STRIP_INSTALLED_PRODUCT = NO; 405 | SYMROOT = "${SRCROOT}/../build"; 406 | VALIDATE_PRODUCT = YES; 407 | }; 408 | name = Release; 409 | }; 410 | 4C2A7938BF48AC9845131D724C2140EA /* Debug */ = { 411 | isa = XCBuildConfiguration; 412 | baseConfigurationReference = 90E0D52016E8190D3573CFE38005C687 /* Pods-ZWSlideViewController_Example.debug.xcconfig */; 413 | buildSettings = { 414 | CODE_SIGN_IDENTITY = ""; 415 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 416 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 417 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 418 | CURRENT_PROJECT_VERSION = 1; 419 | DEBUG_INFORMATION_FORMAT = dwarf; 420 | DEFINES_MODULE = YES; 421 | DYLIB_COMPATIBILITY_VERSION = 1; 422 | DYLIB_CURRENT_VERSION = 1; 423 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 424 | ENABLE_STRICT_OBJC_MSGSEND = YES; 425 | GCC_NO_COMMON_BLOCKS = YES; 426 | INFOPLIST_FILE = "Target Support Files/Pods-ZWSlideViewController_Example/Info.plist"; 427 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 428 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 429 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 430 | MACH_O_TYPE = staticlib; 431 | MODULEMAP_FILE = "Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example.modulemap"; 432 | MTL_ENABLE_DEBUG_INFO = YES; 433 | OTHER_LDFLAGS = ""; 434 | OTHER_LIBTOOLFLAGS = ""; 435 | PODS_ROOT = "$(SRCROOT)"; 436 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 437 | PRODUCT_NAME = Pods_ZWSlideViewController_Example; 438 | SDKROOT = iphoneos; 439 | SKIP_INSTALL = YES; 440 | TARGETED_DEVICE_FAMILY = "1,2"; 441 | VERSIONING_SYSTEM = "apple-generic"; 442 | VERSION_INFO_PREFIX = ""; 443 | }; 444 | name = Debug; 445 | }; 446 | A2609DB5B9B8D9591FD94BE90DB31C5E /* Release */ = { 447 | isa = XCBuildConfiguration; 448 | baseConfigurationReference = F5224412C51B8144A86F40ABF928E5D4 /* ZWSlideViewController.xcconfig */; 449 | buildSettings = { 450 | CODE_SIGN_IDENTITY = ""; 451 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 452 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 453 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 454 | CURRENT_PROJECT_VERSION = 1; 455 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 456 | DEFINES_MODULE = YES; 457 | DYLIB_COMPATIBILITY_VERSION = 1; 458 | DYLIB_CURRENT_VERSION = 1; 459 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 460 | ENABLE_STRICT_OBJC_MSGSEND = YES; 461 | GCC_NO_COMMON_BLOCKS = YES; 462 | GCC_PREFIX_HEADER = "Target Support Files/ZWSlideViewController/ZWSlideViewController-prefix.pch"; 463 | INFOPLIST_FILE = "Target Support Files/ZWSlideViewController/Info.plist"; 464 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 465 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 466 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 467 | MODULEMAP_FILE = "Target Support Files/ZWSlideViewController/ZWSlideViewController.modulemap"; 468 | MTL_ENABLE_DEBUG_INFO = NO; 469 | PRODUCT_NAME = ZWSlideViewController; 470 | SDKROOT = iphoneos; 471 | SKIP_INSTALL = YES; 472 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 473 | TARGETED_DEVICE_FAMILY = "1,2"; 474 | VERSIONING_SYSTEM = "apple-generic"; 475 | VERSION_INFO_PREFIX = ""; 476 | }; 477 | name = Release; 478 | }; 479 | D0FC6C14B7BD7442EE0311DBE3EDE188 /* Debug */ = { 480 | isa = XCBuildConfiguration; 481 | baseConfigurationReference = F5224412C51B8144A86F40ABF928E5D4 /* ZWSlideViewController.xcconfig */; 482 | buildSettings = { 483 | CODE_SIGN_IDENTITY = ""; 484 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 485 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 486 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 487 | CURRENT_PROJECT_VERSION = 1; 488 | DEBUG_INFORMATION_FORMAT = dwarf; 489 | DEFINES_MODULE = YES; 490 | DYLIB_COMPATIBILITY_VERSION = 1; 491 | DYLIB_CURRENT_VERSION = 1; 492 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 493 | ENABLE_STRICT_OBJC_MSGSEND = YES; 494 | GCC_NO_COMMON_BLOCKS = YES; 495 | GCC_PREFIX_HEADER = "Target Support Files/ZWSlideViewController/ZWSlideViewController-prefix.pch"; 496 | INFOPLIST_FILE = "Target Support Files/ZWSlideViewController/Info.plist"; 497 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 498 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 499 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 500 | MODULEMAP_FILE = "Target Support Files/ZWSlideViewController/ZWSlideViewController.modulemap"; 501 | MTL_ENABLE_DEBUG_INFO = YES; 502 | PRODUCT_NAME = ZWSlideViewController; 503 | SDKROOT = iphoneos; 504 | SKIP_INSTALL = YES; 505 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 506 | TARGETED_DEVICE_FAMILY = "1,2"; 507 | VERSIONING_SYSTEM = "apple-generic"; 508 | VERSION_INFO_PREFIX = ""; 509 | }; 510 | name = Debug; 511 | }; 512 | F7BD21893801A3558D5BDE15D66F42C1 /* Release */ = { 513 | isa = XCBuildConfiguration; 514 | baseConfigurationReference = AA31EBA1DDF29F64DF5DBC0673678F2C /* Pods-ZWSlideViewController_Example.release.xcconfig */; 515 | buildSettings = { 516 | CODE_SIGN_IDENTITY = ""; 517 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 518 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 519 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 520 | CURRENT_PROJECT_VERSION = 1; 521 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 522 | DEFINES_MODULE = YES; 523 | DYLIB_COMPATIBILITY_VERSION = 1; 524 | DYLIB_CURRENT_VERSION = 1; 525 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 526 | ENABLE_STRICT_OBJC_MSGSEND = YES; 527 | GCC_NO_COMMON_BLOCKS = YES; 528 | INFOPLIST_FILE = "Target Support Files/Pods-ZWSlideViewController_Example/Info.plist"; 529 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 530 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 531 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 532 | MACH_O_TYPE = staticlib; 533 | MODULEMAP_FILE = "Target Support Files/Pods-ZWSlideViewController_Example/Pods-ZWSlideViewController_Example.modulemap"; 534 | MTL_ENABLE_DEBUG_INFO = NO; 535 | OTHER_LDFLAGS = ""; 536 | OTHER_LIBTOOLFLAGS = ""; 537 | PODS_ROOT = "$(SRCROOT)"; 538 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 539 | PRODUCT_NAME = Pods_ZWSlideViewController_Example; 540 | SDKROOT = iphoneos; 541 | SKIP_INSTALL = YES; 542 | TARGETED_DEVICE_FAMILY = "1,2"; 543 | VERSIONING_SYSTEM = "apple-generic"; 544 | VERSION_INFO_PREFIX = ""; 545 | }; 546 | name = Release; 547 | }; 548 | /* End XCBuildConfiguration section */ 549 | 550 | /* Begin XCConfigurationList section */ 551 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 552 | isa = XCConfigurationList; 553 | buildConfigurations = ( 554 | 1C7D17A37D091C98D2F0DD886C3A9320 /* Debug */, 555 | 34FE9531DA9AF2820790339988D5FF41 /* Release */, 556 | ); 557 | defaultConfigurationIsVisible = 0; 558 | defaultConfigurationName = Release; 559 | }; 560 | C9C550CD8490BEC1550913F915322908 /* Build configuration list for PBXNativeTarget "Pods-ZWSlideViewController_Example" */ = { 561 | isa = XCConfigurationList; 562 | buildConfigurations = ( 563 | 4C2A7938BF48AC9845131D724C2140EA /* Debug */, 564 | F7BD21893801A3558D5BDE15D66F42C1 /* Release */, 565 | ); 566 | defaultConfigurationIsVisible = 0; 567 | defaultConfigurationName = Release; 568 | }; 569 | E194601290FD78467A5FB3B601DF2F5A /* Build configuration list for PBXNativeTarget "ZWSlideViewController" */ = { 570 | isa = XCConfigurationList; 571 | buildConfigurations = ( 572 | D0FC6C14B7BD7442EE0311DBE3EDE188 /* Debug */, 573 | A2609DB5B9B8D9591FD94BE90DB31C5E /* Release */, 574 | ); 575 | defaultConfigurationIsVisible = 0; 576 | defaultConfigurationName = Release; 577 | }; 578 | /* End XCConfigurationList section */ 579 | }; 580 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 581 | } 582 | --------------------------------------------------------------------------------