├── 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 | 
20 | 
21 |
22 |
23 |
24 |
25 | 
26 | 
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 |
--------------------------------------------------------------------------------