├── examplePic ├── 222.gif ├── 333.gif ├── 444.gif └── first.gif ├── MYNavigationController_Example ├── Assets.xcassets │ ├── Contents.json │ ├── jy_back@2x.png │ ├── jy_back@3x.png │ ├── 1_star_.imageset │ │ ├── 1_star_@3x.png │ │ └── Contents.json │ ├── jy_back.imageset │ │ ├── jy_back@2x.png │ │ ├── jy_back@3x.png │ │ └── Contents.json │ └── AppIcon.appiconset │ │ └── Contents.json ├── ViewController.h ├── MenuController.h ├── AdressViewController.h ├── AppDelegate.h ├── main.m ├── MYNavigationController │ ├── MYBackView.h │ ├── MYContainerController.h │ ├── MYNavigationController.h │ ├── MYBackView.m │ ├── MYAnimationManager.h │ ├── MYNavigationController.m │ ├── MYContainerController.m │ └── MYAnimationManager.m ├── Info.plist ├── Base.lproj │ ├── Main.storyboard │ └── LaunchScreen.storyboard ├── AppDelegate.m ├── AdressViewController.m ├── MenuController.m ├── ViewController.m └── AdressViewController.xib ├── MYNavigationController_Example.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj ├── MYNavigationController_ExampleTests ├── Info.plist └── MYNavigationController_ExampleTests.m ├── MYNavigationController_ExampleUITests ├── Info.plist └── MYNavigationController_ExampleUITests.m ├── README.md └── .gitignore /examplePic/222.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderMyy/MYNavigationController/HEAD/examplePic/222.gif -------------------------------------------------------------------------------- /examplePic/333.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderMyy/MYNavigationController/HEAD/examplePic/333.gif -------------------------------------------------------------------------------- /examplePic/444.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderMyy/MYNavigationController/HEAD/examplePic/444.gif -------------------------------------------------------------------------------- /examplePic/first.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderMyy/MYNavigationController/HEAD/examplePic/first.gif -------------------------------------------------------------------------------- /MYNavigationController_Example/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /MYNavigationController_Example/Assets.xcassets/jy_back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderMyy/MYNavigationController/HEAD/MYNavigationController_Example/Assets.xcassets/jy_back@2x.png -------------------------------------------------------------------------------- /MYNavigationController_Example/Assets.xcassets/jy_back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderMyy/MYNavigationController/HEAD/MYNavigationController_Example/Assets.xcassets/jy_back@3x.png -------------------------------------------------------------------------------- /MYNavigationController_Example/Assets.xcassets/1_star_.imageset/1_star_@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderMyy/MYNavigationController/HEAD/MYNavigationController_Example/Assets.xcassets/1_star_.imageset/1_star_@3x.png -------------------------------------------------------------------------------- /MYNavigationController_Example/Assets.xcassets/jy_back.imageset/jy_back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderMyy/MYNavigationController/HEAD/MYNavigationController_Example/Assets.xcassets/jy_back.imageset/jy_back@2x.png -------------------------------------------------------------------------------- /MYNavigationController_Example/Assets.xcassets/jy_back.imageset/jy_back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderMyy/MYNavigationController/HEAD/MYNavigationController_Example/Assets.xcassets/jy_back.imageset/jy_back@3x.png -------------------------------------------------------------------------------- /MYNavigationController_Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MYNavigationController_Example/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /MYNavigationController_Example/MenuController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MenuController.h 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MenuController : UIViewController 12 | 13 | @property (nonatomic, copy) NSString *lastSelectedStr; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /MYNavigationController_Example/AdressViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AdressViewController.h 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/23. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AdressViewController : UIViewController 12 | 13 | @property (nonatomic, assign) NSInteger tag; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /MYNavigationController_Example/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /MYNavigationController_Example/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /MYNavigationController_Example/MYNavigationController/MYBackView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MYBackView.h 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MYBackView : UIView 12 | 13 | //背景颜色View 14 | @property (nonatomic, strong) UIView *backColorView; 15 | //占位 16 | @property (nonatomic, strong) UIView *topView; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /MYNavigationController_Example/Assets.xcassets/1_star_.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "1_star_@3x.png", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /MYNavigationController_Example/Assets.xcassets/jy_back.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "jy_back@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "jy_back@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MYNavigationController_Example/MYNavigationController/MYContainerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MYContainerController.h 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MYNavigationController.h" 11 | 12 | @interface MYContainerController : UIPresentationController 13 | 14 | @property (nonatomic, assign) MYPresentedViewShowStyle style; 15 | @property (nonatomic, assign,getter=isNeedClearBack) BOOL clearBack; 16 | //frame 17 | @property (assign, nonatomic) CGRect showFrame; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /MYNavigationController_ExampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /MYNavigationController_ExampleUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /MYNavigationController_Example/MYNavigationController/MYNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MYNavigationController.h 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MYAnimationManager.h" 11 | 12 | @interface MYNavigationController : UINavigationController 13 | 14 | //创建菜单 15 | - (instancetype)initWithShowFrame:(CGRect)showFrame ShowStyle:(MYPresentedViewShowStyle)showStyle root:(UIViewController *)rootController callback:(handleBack)callback; 16 | //是否展开 17 | @property (nonatomic, assign,getter=isPresented) BOOL presented; 18 | //是否需要显示透明蒙板 19 | @property (nonatomic, assign,getter=isNeedClearBack) BOOL clearBack; 20 | //回调 21 | @property (copy, nonatomic)handleBack callback; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /MYNavigationController_Example/MYNavigationController/MYBackView.m: -------------------------------------------------------------------------------- 1 | // 2 | // MYBackView.m 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import "MYBackView.h" 10 | 11 | @implementation MYBackView 12 | 13 | - (UIView *)topView 14 | { 15 | if (!_topView) { 16 | _topView = [[UIView alloc]initWithFrame:CGRectMake(0,0, [UIScreen mainScreen].bounds.size.width,64)]; 17 | _topView.backgroundColor = [UIColor clearColor]; 18 | } 19 | return _topView; 20 | } 21 | 22 | - (UIView *)backColorView 23 | { 24 | if (!_backColorView) { 25 | _backColorView = [[UIView alloc]initWithFrame:CGRectMake(0,64, [UIScreen mainScreen].bounds.size.width,[UIScreen mainScreen].bounds.size.height - 64)]; 26 | } 27 | return _backColorView; 28 | } 29 | 30 | - (instancetype)initWithFrame:(CGRect)frame 31 | { 32 | if (self = [super initWithFrame:frame]) { 33 | 34 | [self addSubview:self.topView]; 35 | [self addSubview:self.backColorView]; 36 | } 37 | return self; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /MYNavigationController_ExampleTests/MYNavigationController_ExampleTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // MYNavigationController_ExampleTests.m 3 | // MYNavigationController_ExampleTests 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MYNavigationController_ExampleTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation MYNavigationController_ExampleTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MYNavigationController 2 | ### 写在最前 : 通常情况下 , 导航的作用域为整个屏幕 , 即使把view范围缩小 , 但是push的效果依然存在于全局 . 此demo将导航的作用域可以进行随意压缩 , 便可以实现在页面中的页面可以局部性的push , pop 3 | 4 | ## 使用范例 :

5 | 6 | ``` 7 | 创建弹窗菜单 , 并创建MYNavigationController导航控制器对其包装 , 设置需要展示的frame以及弹出动画类型. 8 | MenuController *menu = [[MenuController alloc]init]; 9 | MYNavigationController *nav = [[MYNavigationController alloc]initWithShowFrame:CGRectMake(0, (my_Screen_Height - 388)*0.5, my_Screen_Width, 388) ShowStyle:MYPresentedViewShowStyleFromBottomSpringStyle root:menu callback:^(id callback) { 10 | 11 | NSLog(@"----------点击了-------%@",callback); 12 | 13 | }]; 14 | //弹出弹窗 15 | [self presentViewController:nav animated:YES completion:nil]; 16 | //值得注意的是 : callback为MYNavigationController导航控制器的一个公开属性 , 在内部菜单中 , 可以自行实现 , 并回调出任意内容 17 | 18 | ``` 19 | ![image](https://github.com/coderMyy/MYNavigationController/blob/master/examplePic/first.gif) 20 | ![image](https://github.com/coderMyy/MYNavigationController/blob/master/examplePic/222.gif) 21 |
22 |
23 |
24 |
25 | ![image](https://github.com/coderMyy/MYNavigationController/blob/master/examplePic/333.gif) 26 | ![image](https://github.com/coderMyy/MYNavigationController/blob/master/examplePic/444.gif) 27 |
28 |
29 |
30 | ## ---- 其他具体的内容 , 请见demo 31 | -------------------------------------------------------------------------------- /MYNavigationController_ExampleUITests/MYNavigationController_ExampleUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // MYNavigationController_ExampleUITests.m 3 | // MYNavigationController_ExampleUITests 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MYNavigationController_ExampleUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation MYNavigationController_ExampleUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | # CocoaPods 31 | # 32 | # We recommend against adding the Pods directory to your .gitignore. However 33 | # you should judge for yourself, the pros and cons are mentioned at: 34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 35 | # 36 | # Pods/ 37 | 38 | # Carthage 39 | # 40 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 41 | # Carthage/Checkouts 42 | 43 | Carthage/Build 44 | 45 | # fastlane 46 | # 47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 48 | # screenshots whenever they are needed. 49 | # For more information about the recommended setup visit: 50 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 51 | 52 | fastlane/report.xml 53 | fastlane/screenshots 54 | 55 | #Code Injection 56 | # 57 | # After new code Injection tools there's a generated folder /iOSInjectionProject 58 | # https://github.com/johnno1962/injectionforxcode 59 | 60 | iOSInjectionProject/ 61 | -------------------------------------------------------------------------------- /MYNavigationController_Example/MYNavigationController/MYAnimationManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // MYAnimationManager.h 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #define my_Screen_Width [UIScreen mainScreen].bounds.size.width 12 | #define my_Screen_Height [UIScreen mainScreen].bounds.size.height 13 | #define my_Screen_Bounds [UIScreen mainScreen].bounds 14 | 15 | typedef NS_ENUM(NSInteger){ 16 | 17 | //从上到下降动画 18 | MYPresentedViewShowStyleFromTopDropStyle = 0, 19 | //从上到下展开动画 20 | MYPresentedViewShowStyleFromTopSpreadStyle = 1, 21 | //从上到下弹簧效果 22 | MYPresentedViewShowStyleFromTopSpringStyle = 2, 23 | //从下到上下降动画 24 | MYPresentedViewShowStyleFromBottomDropStyle = 3, 25 | //从下到上展开动画 26 | MYPresentedViewShowStyleFromBottomSpreadStyle = 4, 27 | //从下到上弹簧效果 28 | MYPresentedViewShowStyleFromBottomSpringStyle = 5, 29 | //直接呈现效果 30 | MYPresentedViewShowStyleSuddenStyle = 6 31 | 32 | }MYPresentedViewShowStyle; 33 | 34 | typedef void(^handleBack)(id callback); 35 | 36 | @interface MYAnimationManager : NSObject 37 | 38 | //记录当前模态状态 39 | @property (nonatomic, assign,getter=isPresented) BOOL presented; 40 | //动画类型 41 | @property (assign, nonatomic) MYPresentedViewShowStyle showStyle; 42 | //frame 43 | @property (assign, nonatomic) CGRect showViewFrame; 44 | //是否显示暗色蒙板 45 | @property (nonatomic, assign,getter=isNeedClearBack) BOOL clearBack; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /MYNavigationController_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 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /MYNavigationController_Example/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /MYNavigationController_Example/MYNavigationController/MYNavigationController.m: -------------------------------------------------------------------------------- 1 | // 2 | // MYNavigationController.m 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import "MYNavigationController.h" 10 | 11 | @interface MYNavigationController () 12 | //动画管理 13 | @property (nonatomic, strong) MYAnimationManager *animationManager; 14 | 15 | @end 16 | 17 | @implementation MYNavigationController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | // Do any additional setup after loading the view. 22 | } 23 | 24 | //管理 25 | - (MYAnimationManager *)animationManager 26 | { 27 | if (!_animationManager) { 28 | _animationManager = [[MYAnimationManager alloc]init]; 29 | } 30 | return _animationManager; 31 | } 32 | 33 | 34 | 35 | - (instancetype)initWithShowFrame:(CGRect)showFrame ShowStyle:(MYPresentedViewShowStyle)showStyle root:(UIViewController *)rootController callback:(handleBack)callback 36 | { 37 | //断言 38 | // NSParameterAssert(![@(showStyle)isKindOfClass:[NSNumber class]]||![@(isBottomMenu)isKindOfClass:[NSNumber class]]); 39 | if (self = [super initWithRootViewController:rootController]) { 40 | 41 | //设置管理 42 | self.transitioningDelegate = self.animationManager; 43 | self.modalPresentationStyle = UIModalPresentationCustom; 44 | self.callback = callback; 45 | self.animationManager.showStyle = showStyle; 46 | self.animationManager.showViewFrame = showFrame; 47 | } 48 | return self; 49 | } 50 | 51 | 52 | 53 | - (void)setClearBack:(BOOL)clearBack 54 | { 55 | _clearBack = clearBack; 56 | 57 | self.animationManager.clearBack = clearBack; 58 | } 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /MYNavigationController_Example/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /MYNavigationController_Example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | } 88 | ], 89 | "info" : { 90 | "version" : 1, 91 | "author" : "xcode" 92 | } 93 | } -------------------------------------------------------------------------------- /MYNavigationController_Example/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "ViewController.h" 11 | 12 | @interface AppDelegate () 13 | 14 | @end 15 | 16 | @implementation AppDelegate 17 | 18 | 19 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 20 | 21 | UIWindow *keywindow = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; 22 | 23 | ViewController *vc = [[ViewController alloc]init]; 24 | UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc]; 25 | keywindow.rootViewController = nav; 26 | [keywindow makeKeyAndVisible]; 27 | self.window = keywindow; 28 | 29 | return YES; 30 | } 31 | 32 | 33 | - (void)applicationWillResignActive:(UIApplication *)application { 34 | // 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. 35 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 36 | } 37 | 38 | 39 | - (void)applicationDidEnterBackground:(UIApplication *)application { 40 | // 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. 41 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 42 | } 43 | 44 | 45 | - (void)applicationWillEnterForeground:(UIApplication *)application { 46 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 47 | } 48 | 49 | 50 | - (void)applicationDidBecomeActive:(UIApplication *)application { 51 | // 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. 52 | } 53 | 54 | 55 | - (void)applicationWillTerminate:(UIApplication *)application { 56 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 57 | } 58 | 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /MYNavigationController_Example/MYNavigationController/MYContainerController.m: -------------------------------------------------------------------------------- 1 | // 2 | // MYContainerController.m 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import "MYContainerController.h" 10 | #import "MYBackView.h" 11 | 12 | @interface MYContainerController () 13 | 14 | //蒙板点击层 (只处理点击) 15 | @property (nonatomic, strong) UIControl *coverView; 16 | //蒙板背景展示图(只处理颜色展示) 17 | @property (nonatomic, strong) MYBackView *backView; 18 | 19 | @end 20 | 21 | @implementation MYContainerController 22 | 23 | - (MYBackView *)backView 24 | { 25 | if (!_backView) { 26 | _backView = [[MYBackView alloc]initWithFrame:my_Screen_Bounds]; 27 | if (self.isNeedClearBack) { 28 | 29 | _backView.backColorView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.000001]; 30 | }else{ 31 | 32 | _backView.backColorView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; 33 | if (_showFrame.origin.y > 64) { 34 | _backView.topView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; 35 | } 36 | } 37 | [_backView addSubview:self.coverView]; 38 | } 39 | return _backView; 40 | } 41 | 42 | //蒙板 43 | - (UIControl *)coverView 44 | { 45 | if (!_coverView) { 46 | 47 | _coverView = [[UIControl alloc]initWithFrame:my_Screen_Bounds]; 48 | [_coverView addTarget:self action:@selector(coverViewTouch) forControlEvents:UIControlEventTouchUpInside]; 49 | } 50 | return _coverView; 51 | } 52 | 53 | 54 | //重写布局 55 | - (void)containerViewWillLayoutSubviews 56 | { 57 | [super containerViewWillLayoutSubviews]; 58 | //容器frame,不能遮挡导航栏 , 透明除外 59 | self.containerView.frame = my_Screen_Bounds; 60 | self.presentedView.frame = self.showFrame; 61 | [self.containerView insertSubview:self.backView belowSubview:self.presentedView]; 62 | } 63 | 64 | 65 | //蒙板点击 66 | - (void)coverViewTouch 67 | { 68 | [UIView animateWithDuration:0.1 animations:^{ 69 | self.backView.backColorView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.001]; 70 | self.backView.topView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.001]; 71 | [self.presentedViewController dismissViewControllerAnimated:YES completion:nil]; 72 | } completion:^(BOOL finished) { 73 | 74 | if ([self.presentedViewController isKindOfClass:[MYNavigationController class]]) { 75 | MYNavigationController *presentedVc = (MYNavigationController *)self.presentedViewController; 76 | presentedVc.presented = NO; 77 | } 78 | [self.coverView removeFromSuperview]; 79 | }]; 80 | } 81 | 82 | @end 83 | -------------------------------------------------------------------------------- /MYNavigationController_Example/AdressViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AdressViewController.m 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/23. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import "AdressViewController.h" 10 | 11 | @interface AdressViewController () 12 | 13 | @property (weak, nonatomic) IBOutlet UITextView *adress; 14 | 15 | @property (weak, nonatomic) IBOutlet UILabel *tipLabel; 16 | 17 | @property (weak, nonatomic) IBOutlet UIImageView *starImageview; 18 | 19 | @end 20 | 21 | @implementation AdressViewController 22 | 23 | 24 | 25 | - (void)viewDidLoad { 26 | [super viewDidLoad]; 27 | 28 | self.automaticallyAdjustsScrollViewInsets = NO; 29 | 30 | switch (_tag) { 31 | case 1: 32 | self.adress.text = @"https://github.com/coderMyy/MYCoreTextLabel"; 33 | self.tipLabel.text = @"轻量级图文混排 , 实现图片文字混排 , 可显示常规链接比如网址,@,话题等 , 可以自定义链接字,设置关键字高亮等功能 . 适用于微博,微信,IM聊天对话等场景 . 实现这些功能仅用了几百行代码,耦合性也较低"; 34 | break; 35 | case 2: 36 | self.adress.text = @"https://github.com/coderMyy/MYPhotoBrowser"; 37 | self.tipLabel.text = @"简易版照片浏览器。功能主要有 : 点击点放大缩小 , 长按保存发送给好友操作 , 带文本描述照片,从点击照片放大,当前浏览照片缩小等功能。功能逐渐完善增加中,两行代码集成"; 38 | break; 39 | case 3: 40 | self.adress.text = @"https://github.com/coderMyy/MYDropMenu"; 41 | self.tipLabel.text = @"上拉下拉菜单,可随意自定义,随意修改大小,位置,各个项目通用"; 42 | break; 43 | case 4: 44 | self.adress.text = @"http://blog.csdn.net/codermy"; 45 | self.tipLabel.text = @"博客地址,一般会记录一些偏门的,或者容易出错的东西.."; 46 | break; 47 | default: 48 | break; 49 | } 50 | 51 | [self shake]; 52 | } 53 | 54 | 55 | - (IBAction)copyClick:(id)sender { 56 | 57 | UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; 58 | pasteboard.string = self.adress.text; 59 | UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"拷贝成功" message:nil preferredStyle:UIAlertControllerStyleAlert]; 60 | UIAlertAction *sure = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]; 61 | [alert addAction:sure]; 62 | [self presentViewController:alert animated:YES completion:nil]; 63 | 64 | } 65 | 66 | - (void)shake 67 | { 68 | //创建keyFrame 69 | CAKeyframeAnimation *animation = [CAKeyframeAnimation animation]; 70 | 71 | animation.keyPath = @"transform.rotation"; 72 | 73 | animation.repeatCount = MAXFLOAT; 74 | 75 | animation.duration = 0.1; 76 | 77 | animation.values = @[@(-M_PI_4 *0.2),@(M_PI_4 *0.2),@(-M_PI_4 *0.2),@(M_PI_4 *0.2)]; 78 | 79 | [self.starImageview.layer addAnimation:animation forKey:@"shake"]; 80 | } 81 | 82 | - (void)viewWillDisappear:(BOOL)animated 83 | { 84 | [super viewWillDisappear:animated]; 85 | [self.starImageview.layer removeAnimationForKey:@"shake"]; 86 | } 87 | 88 | @end 89 | -------------------------------------------------------------------------------- /MYNavigationController_Example/MenuController.m: -------------------------------------------------------------------------------- 1 | // 2 | // MenuController.m 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import "MenuController.h" 10 | #import "MYNavigationController.h" 11 | 12 | @interface MenuController () 13 | 14 | @property (nonatomic, strong) UITableView *listView; //菜单列表 15 | 16 | @property (nonatomic, strong) NSMutableArray *dataSource; 17 | 18 | @property (nonatomic, strong) UIView *titleView; //自定义titleView 19 | 20 | @property (nonatomic, strong) UILabel *titleLabel; //标题 21 | 22 | @property (nonatomic, strong) UILabel *listPathLabel; //已选择路径 23 | 24 | @property (nonatomic, strong) UIButton *backButton; //返回按钮 25 | 26 | @end 27 | 28 | @implementation MenuController 29 | 30 | #pragma mark - 假数据 31 | - (NSMutableArray *)dataSource 32 | { 33 | if (!_dataSource) { 34 | _dataSource = [NSMutableArray arrayWithObjects:@"目录一",@"目录二",@"目录三",@"目录四",@"目录五",@"目录六", nil]; 35 | } 36 | return _dataSource; 37 | } 38 | 39 | #pragma mark - 列表 40 | - (UITableView *)listView 41 | { 42 | if (!_listView) { 43 | _listView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain]; 44 | [_listView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"tableViewCell"]; 45 | _listView.delegate = self; 46 | _listView.dataSource = self; 47 | _listView.rowHeight = 50; 48 | } 49 | return _listView; 50 | } 51 | 52 | #pragma mark - 标题 53 | - (UILabel *)titleLabel 54 | { 55 | if (!_titleLabel) { 56 | _titleLabel = [[UILabel alloc]init]; 57 | _titleLabel.textColor = [UIColor redColor]; 58 | _titleLabel.font = [UIFont systemFontOfSize:17 weight:1]; 59 | _titleLabel.text = @"路径选择"; 60 | _titleLabel.textAlignment = NSTextAlignmentCenter; 61 | } 62 | return _titleLabel; 63 | } 64 | 65 | #pragma mark - 路径展示 66 | - (UILabel *)listPathLabel 67 | { 68 | if (!_listPathLabel) { 69 | _listPathLabel = [[UILabel alloc]init]; 70 | _listPathLabel.textColor = [UIColor redColor]; 71 | _listPathLabel.font = [UIFont systemFontOfSize:14 weight:0.5]; 72 | _listPathLabel.text = @"当前选择 : "; 73 | } 74 | return _listPathLabel; 75 | } 76 | 77 | #pragma mark - 返回 78 | - (UIButton *)backButton 79 | { 80 | if (!_backButton) { 81 | _backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 82 | [_backButton setImage:[UIImage imageNamed:@"jy_back"] forState:UIControlStateNormal]; 83 | [_backButton addTarget:self action:@selector(returnBack) forControlEvents:UIControlEventTouchUpInside]; 84 | } 85 | return _backButton; 86 | } 87 | 88 | #pragma mark - 标题栏容器 89 | - (UIView *)titleView 90 | { 91 | if (!_titleView) { 92 | _titleView = [[UIView alloc]init]; 93 | _titleView.backgroundColor = [UIColor blueColor]; 94 | 95 | [_titleView addSubview:self.backButton]; 96 | [_titleView addSubview:self.titleLabel]; 97 | [_titleView addSubview:self.listPathLabel]; 98 | 99 | _backButton.frame = CGRectMake(0, 0, 50, 44); 100 | _titleLabel.frame = CGRectMake(0, 0, self.view.bounds.size.width, 44); 101 | _listPathLabel.frame = CGRectMake(15, CGRectGetMaxY(self.titleLabel.frame), self.view.bounds.size.width - 30, 44); 102 | } 103 | return _titleView; 104 | } 105 | 106 | - (void)viewDidLoad { 107 | [super viewDidLoad]; 108 | 109 | [self configUI]; 110 | 111 | //设置当前路径 112 | if (_lastSelectedStr.length) { 113 | self.listPathLabel.text = self.lastSelectedStr; 114 | } 115 | } 116 | 117 | #pragma mark - UI 118 | - (void)configUI 119 | { 120 | [self.view addSubview:self.titleView]; 121 | [self.view addSubview:self.listView]; 122 | self.titleView.frame = CGRectMake(0, 0, self.view.bounds.size.width, 88); //自定义view充当标题栏部分 123 | self.listView.frame = CGRectMake(0, CGRectGetMaxY(self.titleView.frame),self.view.bounds.size.width,300); //cell高度为50 , 一共显示6个cell 124 | } 125 | 126 | 127 | 128 | #pragma mark - 处理导航 129 | - (void)viewWillAppear:(BOOL)animated 130 | { 131 | [super viewWillAppear:animated]; 132 | self.navigationController.navigationBar.hidden = YES; //为了使菜单的标题栏可以符合我们格式布局,直接隐藏原导航即可,标题栏部分我们自行写一个 133 | 134 | if (self.navigationController.childViewControllers.count < 2) { 135 | self.backButton.hidden = YES; 136 | } 137 | } 138 | 139 | 140 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 141 | { 142 | return 6; 143 | } 144 | 145 | 146 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 147 | { 148 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"tableViewCell"]; 149 | cell.textLabel.textAlignment = NSTextAlignmentCenter; 150 | cell.textLabel.font = [UIFont systemFontOfSize:16 weight:1]; 151 | cell.textLabel.text = self.dataSource[indexPath.row]; 152 | return cell; 153 | } 154 | 155 | 156 | #pragma mark - 点击事件 157 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 158 | { 159 | MenuController *menu = [[MenuController alloc]init]; 160 | NSString *currentPath = [NSString stringWithFormat:@"%@%@/",self.listPathLabel.text,self.dataSource[indexPath.row]]; //当前选择路径 161 | menu.lastSelectedStr = currentPath; //将当前路径传入下层 162 | [self.navigationController pushViewController:menu animated:YES]; 163 | 164 | #warning ----------- 值得注意的是 ------------- 165 | //导航控制器中,有个callback可以使用 .为id类型 , 你可以将任意的元素回调到触发弹窗的控制器中 , 方便处理数据 166 | MYNavigationController *nav = (MYNavigationController *)self.navigationController; 167 | if (nav.callback) { 168 | nav.callback(self.dataSource[indexPath.row]); 169 | } 170 | } 171 | 172 | #pragma mark - 返回上一级 173 | - (void)returnBack 174 | { 175 | [self.navigationController popViewControllerAnimated:YES]; 176 | } 177 | 178 | 179 | @end 180 | -------------------------------------------------------------------------------- /MYNavigationController_Example/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "MenuController.h" 11 | #import "MYNavigationController.h" 12 | #import "AdressViewController.h" 13 | 14 | @interface ViewController () 15 | 16 | @property (nonatomic, strong) UITableView *exampleListView; 17 | 18 | @property (nonatomic, strong) NSArray *listArray; 19 | 20 | @end 21 | 22 | @implementation ViewController 23 | 24 | - (NSArray *)listArray 25 | { 26 | if (!_listArray) { 27 | _listArray = @[@"效果一",@"效果二",@"效果三",@"朋友圈表情文字网址等混排框架",@"照片浏览器框架",@"常用万能菜单框架",@"博客"]; 28 | } 29 | return _listArray; 30 | } 31 | 32 | - (UITableView *)exampleListView 33 | { 34 | if (!_exampleListView) { 35 | _exampleListView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain]; 36 | [_exampleListView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"useExampleCell"]; 37 | _exampleListView.delegate = self; 38 | _exampleListView.dataSource = self; 39 | _exampleListView.rowHeight = 60; 40 | } 41 | return _exampleListView; 42 | } 43 | 44 | 45 | - (void)viewDidLoad { 46 | [super viewDidLoad]; 47 | 48 | self.title = @"使用列表"; 49 | self.view.backgroundColor = [UIColor redColor]; 50 | 51 | [self.view addSubview:self.exampleListView]; 52 | } 53 | 54 | 55 | #pragma mark - dataSource 56 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 57 | { 58 | return self.listArray.count; 59 | } 60 | 61 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 62 | { 63 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"useExampleCell"]; 64 | cell.textLabel.textAlignment = NSTextAlignmentCenter; 65 | cell.textLabel.font = [UIFont systemFontOfSize:18 weight:1]; 66 | cell.textLabel.textColor = [UIColor blueColor]; 67 | cell.textLabel.text = self.listArray[indexPath.row]; 68 | return cell; 69 | } 70 | 71 | 72 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 73 | { 74 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 75 | 76 | switch (indexPath.row) { 77 | case 0: 78 | { 79 | [self exampleOne]; 80 | } 81 | break; 82 | case 1: 83 | { 84 | [self exampleTwo]; 85 | } 86 | 87 | break; 88 | case 2: 89 | { 90 | [self exampleThree]; 91 | } 92 | break; 93 | 94 | case 3: 95 | { 96 | AdressViewController *adressVc = [[AdressViewController alloc]init]; 97 | adressVc.tag = 1; 98 | [self.navigationController pushViewController:adressVc animated:YES]; 99 | } 100 | break; 101 | case 4: 102 | { 103 | AdressViewController *adressVc = [[AdressViewController alloc]init]; 104 | adressVc.tag = 2; 105 | [self.navigationController pushViewController:adressVc animated:YES]; 106 | } 107 | break; 108 | case 5: 109 | { 110 | AdressViewController *adressVc = [[AdressViewController alloc]init]; 111 | adressVc.tag = 3; 112 | [self.navigationController pushViewController:adressVc animated:YES]; 113 | } 114 | 115 | break; 116 | case 6: 117 | { 118 | AdressViewController *adressVc = [[AdressViewController alloc]init]; 119 | adressVc.tag = 4; 120 | [self.navigationController pushViewController:adressVc animated:YES]; 121 | } 122 | break; 123 | 124 | default: 125 | break; 126 | } 127 | 128 | } 129 | 130 | 131 | 132 | #pragma mark - 例一 133 | - (void)exampleOne 134 | { 135 | 136 | //ShowFrame : 你需要展示的弹窗的frame , 记住 ,如果不需要隐藏这个小弹窗的导航, 那么导航部分的44高度 也需要计算进showFrame中 137 | //ShowStype : 138 | /* 139 | //从上到下降动画 140 | MYPresentedViewShowStyleFromTopDropStyle = 0, 141 | //从上到下展开动画 142 | MYPresentedViewShowStyleFromTopSpreadStyle = 1, 143 | //从上到下弹簧效果 144 | MYPresentedViewShowStyleFromTopSpringStyle = 2, 145 | //从下到上下降动画 146 | MYPresentedViewShowStyleFromBottomDropStyle = 3, 147 | //从下到上展开动画 148 | MYPresentedViewShowStyleFromBottomSpreadStyle = 4, 149 | //从下到上弹簧效果 150 | MYPresentedViewShowStyleFromBottomSpringStyle = 5, 151 | //直接呈现效果 152 | MYPresentedViewShowStyleSuddenStyle = 6 153 | */ 154 | 155 | //root : 即导航控制器包装的控制器 156 | //callback: 用于回调数据 . 是 MYNavigationController公开的属性之一 , 你可以在菜单中获取到该callback , 进行数据回调 157 | 158 | MenuController *menu = [[MenuController alloc]init]; 159 | MYNavigationController *nav = [[MYNavigationController alloc]initWithShowFrame:CGRectMake(0, my_Screen_Height - 388, my_Screen_Width, 388) ShowStyle:MYPresentedViewShowStyleFromBottomDropStyle root:menu callback:^(id callback) { 160 | 161 | NSLog(@"----------点击了-------%@",callback); 162 | 163 | }]; 164 | [self presentViewController:nav animated:YES completion:nil]; 165 | } 166 | 167 | #pragma mark - 例二 168 | - (void)exampleTwo 169 | { 170 | MenuController *menu = [[MenuController alloc]init]; 171 | MYNavigationController *nav = [[MYNavigationController alloc]initWithShowFrame:CGRectMake(0, (my_Screen_Height - 388)*0.5, my_Screen_Width, 388) ShowStyle:MYPresentedViewShowStyleFromBottomSpringStyle root:menu callback:^(id callback) { 172 | 173 | NSLog(@"----------点击了-------%@",callback); 174 | 175 | }]; 176 | [self presentViewController:nav animated:YES completion:nil]; 177 | } 178 | 179 | 180 | #pragma mark - 例三 181 | - (void)exampleThree 182 | { 183 | MenuController *menu = [[MenuController alloc]init]; 184 | MYNavigationController *nav = [[MYNavigationController alloc]initWithShowFrame:CGRectMake(0, 64, my_Screen_Width, 388) ShowStyle:MYPresentedViewShowStyleFromTopDropStyle root:menu callback:^(id callback) { 185 | 186 | NSLog(@"----------点击了-------%@",callback); 187 | 188 | }]; 189 | [self presentViewController:nav animated:YES completion:nil]; 190 | } 191 | 192 | @end 193 | -------------------------------------------------------------------------------- /MYNavigationController_Example/MYNavigationController/MYAnimationManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // MYAnimationManager.m 3 | // MYNavigationController_Example 4 | // 5 | // Created by 孟遥 on 2017/3/22. 6 | // Copyright © 2017年 mengyao. All rights reserved. 7 | // 8 | 9 | #import "MYAnimationManager.h" 10 | #import "MYContainerController.h" 11 | 12 | @implementation MYAnimationManager 13 | 14 | //返回自定义模态容器 15 | - (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented presentingViewController:(UIViewController *)presenting sourceViewController:(UIViewController *)source 16 | { 17 | 18 | MYContainerController *presentationVc = [[MYContainerController alloc]initWithPresentedViewController:presented presentingViewController:presenting]; 19 | //蒙版属性传入 20 | presentationVc.clearBack = _clearBack; 21 | presentationVc.showFrame = _showViewFrame; 22 | return presentationVc; 23 | } 24 | 25 | - (id)animationControllerForDismissedController:(UIViewController *)dismissed 26 | { 27 | return self; 28 | } 29 | 30 | - (id)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source 31 | { 32 | return self; 33 | } 34 | 35 | //转场动画持续时间 36 | - (NSTimeInterval)transitionDuration:(id)transitionContext 37 | { 38 | return 0.25; 39 | } 40 | 41 | //自定义转场动画 42 | - (void)animateTransition:(id)transitionContext 43 | { 44 | CGRect bottomStopFrame = CGRectMake(_showViewFrame.origin.x, my_Screen_Height + _showViewFrame.size.height, _showViewFrame.size.width, _showViewFrame.size.height); 45 | CGRect topStopFrame = CGRectMake(_showViewFrame.origin.x, -_showViewFrame.size.height, _showViewFrame.size.width, _showViewFrame.size.height); 46 | CGRect beginFrame = CGRectZero; 47 | CGRect stopFrame = CGRectZero; 48 | UIView *presentedView = nil; 49 | 50 | if (_presented) { 51 | 52 | presentedView = [transitionContext viewForKey:UITransitionContextFromViewKey]; 53 | beginFrame = _showViewFrame; 54 | stopFrame = [self beginStopFrame:topStopFrame bottomStop:bottomStopFrame]; 55 | 56 | }else{ 57 | 58 | presentedView = [transitionContext viewForKey:UITransitionContextToViewKey]; 59 | stopFrame = _showViewFrame; 60 | beginFrame = [self beginStopFrame:topStopFrame bottomStop:bottomStopFrame]; 61 | } 62 | 63 | UIView *container = [transitionContext containerView]; 64 | [container addSubview:presentedView]; 65 | 66 | //动画 67 | [self animationBeginFrame:beginFrame stop:stopFrame view:presentedView context:transitionContext]; 68 | } 69 | 70 | 71 | 72 | - (void)animationBeginFrame:(CGRect)beginFrame stop:(CGRect)stopFrame view:(UIView *)presentedView context:(id)transitionContext 73 | { 74 | //位移动画 75 | if ((_showStyle == MYPresentedViewShowStyleFromTopDropStyle)||(_showStyle == MYPresentedViewShowStyleFromBottomDropStyle)) { 76 | 77 | presentedView.frame = beginFrame; 78 | [UIView animateWithDuration:0.25 animations:^{ 79 | 80 | presentedView.frame = stopFrame; 81 | } completion:^(BOOL finished) { 82 | 83 | [transitionContext completeTransition:YES]; 84 | _presented = !_presented; 85 | }]; 86 | 87 | //伸展动画 88 | }else if((_showStyle == MYPresentedViewShowStyleFromTopSpreadStyle)||(_showStyle ==MYPresentedViewShowStyleFromBottomSpreadStyle)){ 89 | 90 | if (_showStyle == MYPresentedViewShowStyleFromTopSpreadStyle) { 91 | presentedView.layer.anchorPoint = CGPointMake(0.5, 0.0); 92 | }else{ 93 | presentedView.layer.anchorPoint = CGPointMake(0.5, 1); 94 | } 95 | 96 | CGFloat scaleY = 0; 97 | if (_presented) { 98 | 99 | scaleY = 0.0001; 100 | }else{ 101 | 102 | scaleY = 1.0; 103 | presentedView.transform = CGAffineTransformMakeScale(1.0, 0.0001); 104 | } 105 | 106 | [UIView animateWithDuration:0.25 animations:^{ 107 | 108 | presentedView.transform = CGAffineTransformMakeScale(1.0, scaleY); 109 | } completion:^(BOOL finished) { 110 | 111 | [transitionContext completeTransition:YES]; 112 | _presented = scaleY == 0.00001 ? NO : YES; 113 | }]; 114 | //弹簧效果 115 | }else if ((_showStyle == MYPresentedViewShowStyleFromBottomSpringStyle)||(_showStyle == MYPresentedViewShowStyleFromTopSpringStyle)){ 116 | 117 | presentedView.frame = beginFrame; 118 | [UIView animateWithDuration:0.5 delay:0.0 usingSpringWithDamping:0.5 initialSpringVelocity:8.0 options:UIViewAnimationOptionCurveLinear animations:^{ 119 | 120 | presentedView.frame = stopFrame; 121 | } completion:^(BOOL finished) { 122 | 123 | [transitionContext completeTransition:YES]; 124 | _presented = !_presented; 125 | }]; 126 | //直接呈现 127 | }else{ 128 | 129 | _presented ? (presentedView.alpha = 1.0) : (presentedView.alpha = 0.00001); 130 | [UIView animateWithDuration:0.15 animations:^{ 131 | 132 | _presented ? (presentedView.alpha = 0.00001) : (presentedView.alpha = 1.0); 133 | } completion:^(BOOL finished) { 134 | 135 | [transitionContext completeTransition:YES]; 136 | _presented = !_presented; 137 | }]; 138 | } 139 | } 140 | 141 | 142 | - (CGRect)beginStopFrame:(CGRect)topStopFrame bottomStop:(CGRect)bottomStopFrame 143 | { 144 | CGRect frame = CGRectZero; 145 | switch (_showStyle) { 146 | case MYPresentedViewShowStyleFromTopDropStyle: 147 | 148 | frame = topStopFrame; 149 | break; 150 | case MYPresentedViewShowStyleFromBottomDropStyle: 151 | 152 | frame = bottomStopFrame; 153 | break; 154 | case MYPresentedViewShowStyleFromTopSpreadStyle: 155 | 156 | frame = topStopFrame; 157 | break; 158 | case MYPresentedViewShowStyleFromBottomSpreadStyle: 159 | 160 | frame = bottomStopFrame; 161 | break; 162 | case MYPresentedViewShowStyleFromTopSpringStyle: 163 | 164 | frame = topStopFrame; 165 | break; 166 | case MYPresentedViewShowStyleFromBottomSpringStyle: 167 | 168 | frame = bottomStopFrame; 169 | break; 170 | case MYPresentedViewShowStyleSuddenStyle: 171 | 172 | frame = _showViewFrame; 173 | break; 174 | default: 175 | break; 176 | } 177 | return frame; 178 | } 179 | 180 | @end 181 | -------------------------------------------------------------------------------- /MYNavigationController_Example/AdressViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. 32 | 33 | 34 | 35 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /MYNavigationController_Example.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | B84D577E1E8298D400DDD7A8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D577D1E8298D400DDD7A8 /* main.m */; }; 11 | B84D57811E8298D400DDD7A8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D57801E8298D400DDD7A8 /* AppDelegate.m */; }; 12 | B84D57841E8298D400DDD7A8 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D57831E8298D400DDD7A8 /* ViewController.m */; }; 13 | B84D57871E8298D400DDD7A8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B84D57851E8298D400DDD7A8 /* Main.storyboard */; }; 14 | B84D57891E8298D400DDD7A8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B84D57881E8298D400DDD7A8 /* Assets.xcassets */; }; 15 | B84D578C1E8298D400DDD7A8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B84D578A1E8298D400DDD7A8 /* LaunchScreen.storyboard */; }; 16 | B84D57971E8298D400DDD7A8 /* MYNavigationController_ExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D57961E8298D400DDD7A8 /* MYNavigationController_ExampleTests.m */; }; 17 | B84D57A21E8298D500DDD7A8 /* MYNavigationController_ExampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D57A11E8298D500DDD7A8 /* MYNavigationController_ExampleUITests.m */; }; 18 | B84D57B21E82994500DDD7A8 /* MYAnimationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D57B11E82994500DDD7A8 /* MYAnimationManager.m */; }; 19 | B84D57B51E82999200DDD7A8 /* MYContainerController.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D57B41E82999200DDD7A8 /* MYContainerController.m */; }; 20 | B84D57B81E8299CA00DDD7A8 /* MYBackView.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D57B71E8299CA00DDD7A8 /* MYBackView.m */; }; 21 | B84D57BB1E829C2F00DDD7A8 /* MYNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D57BA1E829C2F00DDD7A8 /* MYNavigationController.m */; }; 22 | B84D57BE1E82A23D00DDD7A8 /* MenuController.m in Sources */ = {isa = PBXBuildFile; fileRef = B84D57BD1E82A23D00DDD7A8 /* MenuController.m */; }; 23 | B8576AE01E83AAFB006BB12C /* AdressViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B8576ADE1E83AAFB006BB12C /* AdressViewController.m */; }; 24 | B8576AE11E83AAFB006BB12C /* AdressViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B8576ADF1E83AAFB006BB12C /* AdressViewController.xib */; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXContainerItemProxy section */ 28 | B84D57931E8298D400DDD7A8 /* PBXContainerItemProxy */ = { 29 | isa = PBXContainerItemProxy; 30 | containerPortal = B84D57711E8298D400DDD7A8 /* Project object */; 31 | proxyType = 1; 32 | remoteGlobalIDString = B84D57781E8298D400DDD7A8; 33 | remoteInfo = MYNavigationController_Example; 34 | }; 35 | B84D579E1E8298D500DDD7A8 /* PBXContainerItemProxy */ = { 36 | isa = PBXContainerItemProxy; 37 | containerPortal = B84D57711E8298D400DDD7A8 /* Project object */; 38 | proxyType = 1; 39 | remoteGlobalIDString = B84D57781E8298D400DDD7A8; 40 | remoteInfo = MYNavigationController_Example; 41 | }; 42 | /* End PBXContainerItemProxy section */ 43 | 44 | /* Begin PBXFileReference section */ 45 | B84D57791E8298D400DDD7A8 /* MYNavigationController_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MYNavigationController_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | B84D577D1E8298D400DDD7A8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 47 | B84D577F1E8298D400DDD7A8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 48 | B84D57801E8298D400DDD7A8 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 49 | B84D57821E8298D400DDD7A8 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 50 | B84D57831E8298D400DDD7A8 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 51 | B84D57861E8298D400DDD7A8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 52 | B84D57881E8298D400DDD7A8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 53 | B84D578B1E8298D400DDD7A8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 54 | B84D578D1E8298D400DDD7A8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 55 | B84D57921E8298D400DDD7A8 /* MYNavigationController_ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MYNavigationController_ExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | B84D57961E8298D400DDD7A8 /* MYNavigationController_ExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MYNavigationController_ExampleTests.m; sourceTree = ""; }; 57 | B84D57981E8298D400DDD7A8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 58 | B84D579D1E8298D500DDD7A8 /* MYNavigationController_ExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MYNavigationController_ExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 59 | B84D57A11E8298D500DDD7A8 /* MYNavigationController_ExampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MYNavigationController_ExampleUITests.m; sourceTree = ""; }; 60 | B84D57A31E8298D500DDD7A8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 61 | B84D57B01E82994500DDD7A8 /* MYAnimationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MYAnimationManager.h; sourceTree = ""; }; 62 | B84D57B11E82994500DDD7A8 /* MYAnimationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MYAnimationManager.m; sourceTree = ""; }; 63 | B84D57B31E82999200DDD7A8 /* MYContainerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MYContainerController.h; sourceTree = ""; }; 64 | B84D57B41E82999200DDD7A8 /* MYContainerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MYContainerController.m; sourceTree = ""; }; 65 | B84D57B61E8299CA00DDD7A8 /* MYBackView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MYBackView.h; sourceTree = ""; }; 66 | B84D57B71E8299CA00DDD7A8 /* MYBackView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MYBackView.m; sourceTree = ""; }; 67 | B84D57B91E829C2F00DDD7A8 /* MYNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MYNavigationController.h; sourceTree = ""; }; 68 | B84D57BA1E829C2F00DDD7A8 /* MYNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MYNavigationController.m; sourceTree = ""; }; 69 | B84D57BC1E82A23D00DDD7A8 /* MenuController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuController.h; sourceTree = ""; }; 70 | B84D57BD1E82A23D00DDD7A8 /* MenuController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuController.m; sourceTree = ""; }; 71 | B8576ADD1E83AAFB006BB12C /* AdressViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdressViewController.h; sourceTree = ""; }; 72 | B8576ADE1E83AAFB006BB12C /* AdressViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdressViewController.m; sourceTree = ""; }; 73 | B8576ADF1E83AAFB006BB12C /* AdressViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AdressViewController.xib; sourceTree = ""; }; 74 | /* End PBXFileReference section */ 75 | 76 | /* Begin PBXFrameworksBuildPhase section */ 77 | B84D57761E8298D400DDD7A8 /* Frameworks */ = { 78 | isa = PBXFrameworksBuildPhase; 79 | buildActionMask = 2147483647; 80 | files = ( 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | B84D578F1E8298D400DDD7A8 /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | B84D579A1E8298D500DDD7A8 /* Frameworks */ = { 92 | isa = PBXFrameworksBuildPhase; 93 | buildActionMask = 2147483647; 94 | files = ( 95 | ); 96 | runOnlyForDeploymentPostprocessing = 0; 97 | }; 98 | /* End PBXFrameworksBuildPhase section */ 99 | 100 | /* Begin PBXGroup section */ 101 | B84D57701E8298D400DDD7A8 = { 102 | isa = PBXGroup; 103 | children = ( 104 | B84D577B1E8298D400DDD7A8 /* MYNavigationController_Example */, 105 | B84D57951E8298D400DDD7A8 /* MYNavigationController_ExampleTests */, 106 | B84D57A01E8298D500DDD7A8 /* MYNavigationController_ExampleUITests */, 107 | B84D577A1E8298D400DDD7A8 /* Products */, 108 | ); 109 | sourceTree = ""; 110 | }; 111 | B84D577A1E8298D400DDD7A8 /* Products */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | B84D57791E8298D400DDD7A8 /* MYNavigationController_Example.app */, 115 | B84D57921E8298D400DDD7A8 /* MYNavigationController_ExampleTests.xctest */, 116 | B84D579D1E8298D500DDD7A8 /* MYNavigationController_ExampleUITests.xctest */, 117 | ); 118 | name = Products; 119 | sourceTree = ""; 120 | }; 121 | B84D577B1E8298D400DDD7A8 /* MYNavigationController_Example */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | B84D57AF1E8298EE00DDD7A8 /* MYNavigationController */, 125 | B84D577F1E8298D400DDD7A8 /* AppDelegate.h */, 126 | B84D57801E8298D400DDD7A8 /* AppDelegate.m */, 127 | B84D57821E8298D400DDD7A8 /* ViewController.h */, 128 | B84D57831E8298D400DDD7A8 /* ViewController.m */, 129 | B84D57BC1E82A23D00DDD7A8 /* MenuController.h */, 130 | B84D57BD1E82A23D00DDD7A8 /* MenuController.m */, 131 | B84D57851E8298D400DDD7A8 /* Main.storyboard */, 132 | B84D57881E8298D400DDD7A8 /* Assets.xcassets */, 133 | B84D578A1E8298D400DDD7A8 /* LaunchScreen.storyboard */, 134 | B84D578D1E8298D400DDD7A8 /* Info.plist */, 135 | B84D577C1E8298D400DDD7A8 /* Supporting Files */, 136 | B8576ADD1E83AAFB006BB12C /* AdressViewController.h */, 137 | B8576ADE1E83AAFB006BB12C /* AdressViewController.m */, 138 | B8576ADF1E83AAFB006BB12C /* AdressViewController.xib */, 139 | ); 140 | path = MYNavigationController_Example; 141 | sourceTree = ""; 142 | }; 143 | B84D577C1E8298D400DDD7A8 /* Supporting Files */ = { 144 | isa = PBXGroup; 145 | children = ( 146 | B84D577D1E8298D400DDD7A8 /* main.m */, 147 | ); 148 | name = "Supporting Files"; 149 | sourceTree = ""; 150 | }; 151 | B84D57951E8298D400DDD7A8 /* MYNavigationController_ExampleTests */ = { 152 | isa = PBXGroup; 153 | children = ( 154 | B84D57961E8298D400DDD7A8 /* MYNavigationController_ExampleTests.m */, 155 | B84D57981E8298D400DDD7A8 /* Info.plist */, 156 | ); 157 | path = MYNavigationController_ExampleTests; 158 | sourceTree = ""; 159 | }; 160 | B84D57A01E8298D500DDD7A8 /* MYNavigationController_ExampleUITests */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | B84D57A11E8298D500DDD7A8 /* MYNavigationController_ExampleUITests.m */, 164 | B84D57A31E8298D500DDD7A8 /* Info.plist */, 165 | ); 166 | path = MYNavigationController_ExampleUITests; 167 | sourceTree = ""; 168 | }; 169 | B84D57AF1E8298EE00DDD7A8 /* MYNavigationController */ = { 170 | isa = PBXGroup; 171 | children = ( 172 | B84D57B01E82994500DDD7A8 /* MYAnimationManager.h */, 173 | B84D57B11E82994500DDD7A8 /* MYAnimationManager.m */, 174 | B84D57B31E82999200DDD7A8 /* MYContainerController.h */, 175 | B84D57B41E82999200DDD7A8 /* MYContainerController.m */, 176 | B84D57B61E8299CA00DDD7A8 /* MYBackView.h */, 177 | B84D57B71E8299CA00DDD7A8 /* MYBackView.m */, 178 | B84D57B91E829C2F00DDD7A8 /* MYNavigationController.h */, 179 | B84D57BA1E829C2F00DDD7A8 /* MYNavigationController.m */, 180 | ); 181 | path = MYNavigationController; 182 | sourceTree = ""; 183 | }; 184 | /* End PBXGroup section */ 185 | 186 | /* Begin PBXNativeTarget section */ 187 | B84D57781E8298D400DDD7A8 /* MYNavigationController_Example */ = { 188 | isa = PBXNativeTarget; 189 | buildConfigurationList = B84D57A61E8298D500DDD7A8 /* Build configuration list for PBXNativeTarget "MYNavigationController_Example" */; 190 | buildPhases = ( 191 | B84D57751E8298D400DDD7A8 /* Sources */, 192 | B84D57761E8298D400DDD7A8 /* Frameworks */, 193 | B84D57771E8298D400DDD7A8 /* Resources */, 194 | ); 195 | buildRules = ( 196 | ); 197 | dependencies = ( 198 | ); 199 | name = MYNavigationController_Example; 200 | productName = MYNavigationController_Example; 201 | productReference = B84D57791E8298D400DDD7A8 /* MYNavigationController_Example.app */; 202 | productType = "com.apple.product-type.application"; 203 | }; 204 | B84D57911E8298D400DDD7A8 /* MYNavigationController_ExampleTests */ = { 205 | isa = PBXNativeTarget; 206 | buildConfigurationList = B84D57A91E8298D500DDD7A8 /* Build configuration list for PBXNativeTarget "MYNavigationController_ExampleTests" */; 207 | buildPhases = ( 208 | B84D578E1E8298D400DDD7A8 /* Sources */, 209 | B84D578F1E8298D400DDD7A8 /* Frameworks */, 210 | B84D57901E8298D400DDD7A8 /* Resources */, 211 | ); 212 | buildRules = ( 213 | ); 214 | dependencies = ( 215 | B84D57941E8298D400DDD7A8 /* PBXTargetDependency */, 216 | ); 217 | name = MYNavigationController_ExampleTests; 218 | productName = MYNavigationController_ExampleTests; 219 | productReference = B84D57921E8298D400DDD7A8 /* MYNavigationController_ExampleTests.xctest */; 220 | productType = "com.apple.product-type.bundle.unit-test"; 221 | }; 222 | B84D579C1E8298D500DDD7A8 /* MYNavigationController_ExampleUITests */ = { 223 | isa = PBXNativeTarget; 224 | buildConfigurationList = B84D57AC1E8298D500DDD7A8 /* Build configuration list for PBXNativeTarget "MYNavigationController_ExampleUITests" */; 225 | buildPhases = ( 226 | B84D57991E8298D500DDD7A8 /* Sources */, 227 | B84D579A1E8298D500DDD7A8 /* Frameworks */, 228 | B84D579B1E8298D500DDD7A8 /* Resources */, 229 | ); 230 | buildRules = ( 231 | ); 232 | dependencies = ( 233 | B84D579F1E8298D500DDD7A8 /* PBXTargetDependency */, 234 | ); 235 | name = MYNavigationController_ExampleUITests; 236 | productName = MYNavigationController_ExampleUITests; 237 | productReference = B84D579D1E8298D500DDD7A8 /* MYNavigationController_ExampleUITests.xctest */; 238 | productType = "com.apple.product-type.bundle.ui-testing"; 239 | }; 240 | /* End PBXNativeTarget section */ 241 | 242 | /* Begin PBXProject section */ 243 | B84D57711E8298D400DDD7A8 /* Project object */ = { 244 | isa = PBXProject; 245 | attributes = { 246 | LastUpgradeCheck = 0820; 247 | ORGANIZATIONNAME = mengyao; 248 | TargetAttributes = { 249 | B84D57781E8298D400DDD7A8 = { 250 | CreatedOnToolsVersion = 8.2.1; 251 | ProvisioningStyle = Automatic; 252 | }; 253 | B84D57911E8298D400DDD7A8 = { 254 | CreatedOnToolsVersion = 8.2.1; 255 | ProvisioningStyle = Automatic; 256 | TestTargetID = B84D57781E8298D400DDD7A8; 257 | }; 258 | B84D579C1E8298D500DDD7A8 = { 259 | CreatedOnToolsVersion = 8.2.1; 260 | ProvisioningStyle = Automatic; 261 | TestTargetID = B84D57781E8298D400DDD7A8; 262 | }; 263 | }; 264 | }; 265 | buildConfigurationList = B84D57741E8298D400DDD7A8 /* Build configuration list for PBXProject "MYNavigationController_Example" */; 266 | compatibilityVersion = "Xcode 3.2"; 267 | developmentRegion = English; 268 | hasScannedForEncodings = 0; 269 | knownRegions = ( 270 | en, 271 | Base, 272 | ); 273 | mainGroup = B84D57701E8298D400DDD7A8; 274 | productRefGroup = B84D577A1E8298D400DDD7A8 /* Products */; 275 | projectDirPath = ""; 276 | projectRoot = ""; 277 | targets = ( 278 | B84D57781E8298D400DDD7A8 /* MYNavigationController_Example */, 279 | B84D57911E8298D400DDD7A8 /* MYNavigationController_ExampleTests */, 280 | B84D579C1E8298D500DDD7A8 /* MYNavigationController_ExampleUITests */, 281 | ); 282 | }; 283 | /* End PBXProject section */ 284 | 285 | /* Begin PBXResourcesBuildPhase section */ 286 | B84D57771E8298D400DDD7A8 /* Resources */ = { 287 | isa = PBXResourcesBuildPhase; 288 | buildActionMask = 2147483647; 289 | files = ( 290 | B84D578C1E8298D400DDD7A8 /* LaunchScreen.storyboard in Resources */, 291 | B84D57891E8298D400DDD7A8 /* Assets.xcassets in Resources */, 292 | B8576AE11E83AAFB006BB12C /* AdressViewController.xib in Resources */, 293 | B84D57871E8298D400DDD7A8 /* Main.storyboard in Resources */, 294 | ); 295 | runOnlyForDeploymentPostprocessing = 0; 296 | }; 297 | B84D57901E8298D400DDD7A8 /* Resources */ = { 298 | isa = PBXResourcesBuildPhase; 299 | buildActionMask = 2147483647; 300 | files = ( 301 | ); 302 | runOnlyForDeploymentPostprocessing = 0; 303 | }; 304 | B84D579B1E8298D500DDD7A8 /* Resources */ = { 305 | isa = PBXResourcesBuildPhase; 306 | buildActionMask = 2147483647; 307 | files = ( 308 | ); 309 | runOnlyForDeploymentPostprocessing = 0; 310 | }; 311 | /* End PBXResourcesBuildPhase section */ 312 | 313 | /* Begin PBXSourcesBuildPhase section */ 314 | B84D57751E8298D400DDD7A8 /* Sources */ = { 315 | isa = PBXSourcesBuildPhase; 316 | buildActionMask = 2147483647; 317 | files = ( 318 | B84D57B21E82994500DDD7A8 /* MYAnimationManager.m in Sources */, 319 | B84D57B81E8299CA00DDD7A8 /* MYBackView.m in Sources */, 320 | B84D57B51E82999200DDD7A8 /* MYContainerController.m in Sources */, 321 | B84D57841E8298D400DDD7A8 /* ViewController.m in Sources */, 322 | B84D57BE1E82A23D00DDD7A8 /* MenuController.m in Sources */, 323 | B8576AE01E83AAFB006BB12C /* AdressViewController.m in Sources */, 324 | B84D57811E8298D400DDD7A8 /* AppDelegate.m in Sources */, 325 | B84D57BB1E829C2F00DDD7A8 /* MYNavigationController.m in Sources */, 326 | B84D577E1E8298D400DDD7A8 /* main.m in Sources */, 327 | ); 328 | runOnlyForDeploymentPostprocessing = 0; 329 | }; 330 | B84D578E1E8298D400DDD7A8 /* Sources */ = { 331 | isa = PBXSourcesBuildPhase; 332 | buildActionMask = 2147483647; 333 | files = ( 334 | B84D57971E8298D400DDD7A8 /* MYNavigationController_ExampleTests.m in Sources */, 335 | ); 336 | runOnlyForDeploymentPostprocessing = 0; 337 | }; 338 | B84D57991E8298D500DDD7A8 /* Sources */ = { 339 | isa = PBXSourcesBuildPhase; 340 | buildActionMask = 2147483647; 341 | files = ( 342 | B84D57A21E8298D500DDD7A8 /* MYNavigationController_ExampleUITests.m in Sources */, 343 | ); 344 | runOnlyForDeploymentPostprocessing = 0; 345 | }; 346 | /* End PBXSourcesBuildPhase section */ 347 | 348 | /* Begin PBXTargetDependency section */ 349 | B84D57941E8298D400DDD7A8 /* PBXTargetDependency */ = { 350 | isa = PBXTargetDependency; 351 | target = B84D57781E8298D400DDD7A8 /* MYNavigationController_Example */; 352 | targetProxy = B84D57931E8298D400DDD7A8 /* PBXContainerItemProxy */; 353 | }; 354 | B84D579F1E8298D500DDD7A8 /* PBXTargetDependency */ = { 355 | isa = PBXTargetDependency; 356 | target = B84D57781E8298D400DDD7A8 /* MYNavigationController_Example */; 357 | targetProxy = B84D579E1E8298D500DDD7A8 /* PBXContainerItemProxy */; 358 | }; 359 | /* End PBXTargetDependency section */ 360 | 361 | /* Begin PBXVariantGroup section */ 362 | B84D57851E8298D400DDD7A8 /* Main.storyboard */ = { 363 | isa = PBXVariantGroup; 364 | children = ( 365 | B84D57861E8298D400DDD7A8 /* Base */, 366 | ); 367 | name = Main.storyboard; 368 | sourceTree = ""; 369 | }; 370 | B84D578A1E8298D400DDD7A8 /* LaunchScreen.storyboard */ = { 371 | isa = PBXVariantGroup; 372 | children = ( 373 | B84D578B1E8298D400DDD7A8 /* Base */, 374 | ); 375 | name = LaunchScreen.storyboard; 376 | sourceTree = ""; 377 | }; 378 | /* End PBXVariantGroup section */ 379 | 380 | /* Begin XCBuildConfiguration section */ 381 | B84D57A41E8298D500DDD7A8 /* Debug */ = { 382 | isa = XCBuildConfiguration; 383 | buildSettings = { 384 | ALWAYS_SEARCH_USER_PATHS = NO; 385 | CLANG_ANALYZER_NONNULL = YES; 386 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 387 | CLANG_CXX_LIBRARY = "libc++"; 388 | CLANG_ENABLE_MODULES = YES; 389 | CLANG_ENABLE_OBJC_ARC = YES; 390 | CLANG_WARN_BOOL_CONVERSION = YES; 391 | CLANG_WARN_CONSTANT_CONVERSION = YES; 392 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 393 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 394 | CLANG_WARN_EMPTY_BODY = YES; 395 | CLANG_WARN_ENUM_CONVERSION = YES; 396 | CLANG_WARN_INFINITE_RECURSION = YES; 397 | CLANG_WARN_INT_CONVERSION = YES; 398 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 399 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 400 | CLANG_WARN_UNREACHABLE_CODE = YES; 401 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 402 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 403 | COPY_PHASE_STRIP = NO; 404 | DEBUG_INFORMATION_FORMAT = dwarf; 405 | ENABLE_STRICT_OBJC_MSGSEND = YES; 406 | ENABLE_TESTABILITY = YES; 407 | GCC_C_LANGUAGE_STANDARD = gnu99; 408 | GCC_DYNAMIC_NO_PIC = NO; 409 | GCC_NO_COMMON_BLOCKS = YES; 410 | GCC_OPTIMIZATION_LEVEL = 0; 411 | GCC_PREPROCESSOR_DEFINITIONS = ( 412 | "DEBUG=1", 413 | "$(inherited)", 414 | ); 415 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 416 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 417 | GCC_WARN_UNDECLARED_SELECTOR = YES; 418 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 419 | GCC_WARN_UNUSED_FUNCTION = YES; 420 | GCC_WARN_UNUSED_VARIABLE = YES; 421 | IPHONEOS_DEPLOYMENT_TARGET = 10.2; 422 | MTL_ENABLE_DEBUG_INFO = YES; 423 | ONLY_ACTIVE_ARCH = YES; 424 | SDKROOT = iphoneos; 425 | TARGETED_DEVICE_FAMILY = "1,2"; 426 | }; 427 | name = Debug; 428 | }; 429 | B84D57A51E8298D500DDD7A8 /* Release */ = { 430 | isa = XCBuildConfiguration; 431 | buildSettings = { 432 | ALWAYS_SEARCH_USER_PATHS = NO; 433 | CLANG_ANALYZER_NONNULL = YES; 434 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 435 | CLANG_CXX_LIBRARY = "libc++"; 436 | CLANG_ENABLE_MODULES = YES; 437 | CLANG_ENABLE_OBJC_ARC = YES; 438 | CLANG_WARN_BOOL_CONVERSION = YES; 439 | CLANG_WARN_CONSTANT_CONVERSION = YES; 440 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 441 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 442 | CLANG_WARN_EMPTY_BODY = YES; 443 | CLANG_WARN_ENUM_CONVERSION = YES; 444 | CLANG_WARN_INFINITE_RECURSION = YES; 445 | CLANG_WARN_INT_CONVERSION = YES; 446 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 447 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 448 | CLANG_WARN_UNREACHABLE_CODE = YES; 449 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 450 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 451 | COPY_PHASE_STRIP = NO; 452 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 453 | ENABLE_NS_ASSERTIONS = NO; 454 | ENABLE_STRICT_OBJC_MSGSEND = YES; 455 | GCC_C_LANGUAGE_STANDARD = gnu99; 456 | GCC_NO_COMMON_BLOCKS = YES; 457 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 458 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 459 | GCC_WARN_UNDECLARED_SELECTOR = YES; 460 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 461 | GCC_WARN_UNUSED_FUNCTION = YES; 462 | GCC_WARN_UNUSED_VARIABLE = YES; 463 | IPHONEOS_DEPLOYMENT_TARGET = 10.2; 464 | MTL_ENABLE_DEBUG_INFO = NO; 465 | SDKROOT = iphoneos; 466 | TARGETED_DEVICE_FAMILY = "1,2"; 467 | VALIDATE_PRODUCT = YES; 468 | }; 469 | name = Release; 470 | }; 471 | B84D57A71E8298D500DDD7A8 /* Debug */ = { 472 | isa = XCBuildConfiguration; 473 | buildSettings = { 474 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 475 | INFOPLIST_FILE = MYNavigationController_Example/Info.plist; 476 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 477 | PRODUCT_BUNDLE_IDENTIFIER = "mengyao.MYNavigationController-Example"; 478 | PRODUCT_NAME = "$(TARGET_NAME)"; 479 | }; 480 | name = Debug; 481 | }; 482 | B84D57A81E8298D500DDD7A8 /* Release */ = { 483 | isa = XCBuildConfiguration; 484 | buildSettings = { 485 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 486 | INFOPLIST_FILE = MYNavigationController_Example/Info.plist; 487 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 488 | PRODUCT_BUNDLE_IDENTIFIER = "mengyao.MYNavigationController-Example"; 489 | PRODUCT_NAME = "$(TARGET_NAME)"; 490 | }; 491 | name = Release; 492 | }; 493 | B84D57AA1E8298D500DDD7A8 /* Debug */ = { 494 | isa = XCBuildConfiguration; 495 | buildSettings = { 496 | BUNDLE_LOADER = "$(TEST_HOST)"; 497 | INFOPLIST_FILE = MYNavigationController_ExampleTests/Info.plist; 498 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 499 | PRODUCT_BUNDLE_IDENTIFIER = "mengyao.MYNavigationController-ExampleTests"; 500 | PRODUCT_NAME = "$(TARGET_NAME)"; 501 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MYNavigationController_Example.app/MYNavigationController_Example"; 502 | }; 503 | name = Debug; 504 | }; 505 | B84D57AB1E8298D500DDD7A8 /* Release */ = { 506 | isa = XCBuildConfiguration; 507 | buildSettings = { 508 | BUNDLE_LOADER = "$(TEST_HOST)"; 509 | INFOPLIST_FILE = MYNavigationController_ExampleTests/Info.plist; 510 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 511 | PRODUCT_BUNDLE_IDENTIFIER = "mengyao.MYNavigationController-ExampleTests"; 512 | PRODUCT_NAME = "$(TARGET_NAME)"; 513 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MYNavigationController_Example.app/MYNavigationController_Example"; 514 | }; 515 | name = Release; 516 | }; 517 | B84D57AD1E8298D500DDD7A8 /* Debug */ = { 518 | isa = XCBuildConfiguration; 519 | buildSettings = { 520 | INFOPLIST_FILE = MYNavigationController_ExampleUITests/Info.plist; 521 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 522 | PRODUCT_BUNDLE_IDENTIFIER = "mengyao.MYNavigationController-ExampleUITests"; 523 | PRODUCT_NAME = "$(TARGET_NAME)"; 524 | TEST_TARGET_NAME = MYNavigationController_Example; 525 | }; 526 | name = Debug; 527 | }; 528 | B84D57AE1E8298D500DDD7A8 /* Release */ = { 529 | isa = XCBuildConfiguration; 530 | buildSettings = { 531 | INFOPLIST_FILE = MYNavigationController_ExampleUITests/Info.plist; 532 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 533 | PRODUCT_BUNDLE_IDENTIFIER = "mengyao.MYNavigationController-ExampleUITests"; 534 | PRODUCT_NAME = "$(TARGET_NAME)"; 535 | TEST_TARGET_NAME = MYNavigationController_Example; 536 | }; 537 | name = Release; 538 | }; 539 | /* End XCBuildConfiguration section */ 540 | 541 | /* Begin XCConfigurationList section */ 542 | B84D57741E8298D400DDD7A8 /* Build configuration list for PBXProject "MYNavigationController_Example" */ = { 543 | isa = XCConfigurationList; 544 | buildConfigurations = ( 545 | B84D57A41E8298D500DDD7A8 /* Debug */, 546 | B84D57A51E8298D500DDD7A8 /* Release */, 547 | ); 548 | defaultConfigurationIsVisible = 0; 549 | defaultConfigurationName = Release; 550 | }; 551 | B84D57A61E8298D500DDD7A8 /* Build configuration list for PBXNativeTarget "MYNavigationController_Example" */ = { 552 | isa = XCConfigurationList; 553 | buildConfigurations = ( 554 | B84D57A71E8298D500DDD7A8 /* Debug */, 555 | B84D57A81E8298D500DDD7A8 /* Release */, 556 | ); 557 | defaultConfigurationIsVisible = 0; 558 | defaultConfigurationName = Release; 559 | }; 560 | B84D57A91E8298D500DDD7A8 /* Build configuration list for PBXNativeTarget "MYNavigationController_ExampleTests" */ = { 561 | isa = XCConfigurationList; 562 | buildConfigurations = ( 563 | B84D57AA1E8298D500DDD7A8 /* Debug */, 564 | B84D57AB1E8298D500DDD7A8 /* Release */, 565 | ); 566 | defaultConfigurationIsVisible = 0; 567 | defaultConfigurationName = Release; 568 | }; 569 | B84D57AC1E8298D500DDD7A8 /* Build configuration list for PBXNativeTarget "MYNavigationController_ExampleUITests" */ = { 570 | isa = XCConfigurationList; 571 | buildConfigurations = ( 572 | B84D57AD1E8298D500DDD7A8 /* Debug */, 573 | B84D57AE1E8298D500DDD7A8 /* Release */, 574 | ); 575 | defaultConfigurationIsVisible = 0; 576 | defaultConfigurationName = Release; 577 | }; 578 | /* End XCConfigurationList section */ 579 | }; 580 | rootObject = B84D57711E8298D400DDD7A8 /* Project object */; 581 | } 582 | --------------------------------------------------------------------------------