通过多次实践后,会开始萌发一种设计框架的想法。
其实也没有什么高上档的,也就是为了可以更加懒惰,过的更加快乐而已。
思路很简单,控制加载过程,以及自动执行释放的事件。
补充:
方便、快速、优化、强大的设计是需要很多实践来测试、维护、修改来确定的。
下面上代码了。
// // MainController.h // 某项目 // // Created by yococo on 3/7/15. // Copyright (c) 2015 yococo. All rights reserved. // #import "LYCHolyContentController.h" @interface MainController : LYCHolyContentController + (MainController *)sharedInstance; @end
// // MainController.m // 某项目 // // Created by yococo on 3/7/15. // Copyright (c) 2015 yococo. All rights reserved. // #import "MainController.h" #import "IndexController.h" #import "BrandController.h" #import "LocationController.h" #import "ProjectController.h" #import "SmartController.h" #import "StrollController.h" #import "FormatsController.h" #import "PropertyController.h" #import "MainModel.h" @interface MainController ()<LYCHolyContentControllerDelgate> // 需要加载的对象 @property (nonatomic, strong) IndexController *indexController; @property (nonatomic, strong) BrandController *brandController; @property (nonatomic, strong) LocationController *locationController; @property (nonatomic, strong) ProjectController *projectController; @property (nonatomic, strong) SmartController *smartController; @property (nonatomic, strong) StrollController *strollController; @property (nonatomic, strong) FormatsController *formatsController; @property (nonatomic, strong) PropertyController *propertyController; @end @implementation MainController + (MainController *)sharedInstance { static MainController *singleton; static dispatch_once_t token; dispatch_once(&token,^{ singleton = [MainController LYCControllerWithViewDirectionHorizontal]; }); return singleton; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)loadView { [super loadView]; // 设置协议 self.lycHolyContentControllerDelgate = self; // 设置控制视图的大小位置 CGRect tempRect = self.lycHolyControlView.frame; tempRect.size.height = 75; tempRect.origin.y = self.lycCurrentBounds.size.height - 75; self.lycHolyControlViewRect = tempRect; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // 触发按钮事件。 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleIndex]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ #pragma mark - 设置按钮 - (NSArray *)lycHolyContentController:(LYCHolyContentController *)contentController buttonOnControlView:(UIView *)view { return [MainModel controlButtons]; } #pragma mark - 设置控制视图背景图 - (void)lycHolyContentController:(LYCHolyContentController *)contentController controlBackgroundImageView:(UIImageView *)imageView { imageView.image = [UIImage LYCImageWithDatasource:LYC__PathFromBundleAppendingPathComponent(@"导航背景.png")]; } #pragma mark - 设置按钮触发事件 - (void)lycHolySystemEventLoadViewControllerWithButton:(LYCHolyButton *)button { switch (button.lycHolyIdentificationStyle) { case LYCHolyIdentificationStyleIndex: { // 不隐藏控制视图 self.lycHolyControlViewHidden = NO; // 设置按钮状态 [self lycHolyShowButtonSelectedState]; [self lycHolyLoadViewControllerWithButton:button initialization:^{ // 初始化 IndexController对象 self.indexController = [IndexController LYCControllerXIBWithViewDirectionHorizontal]; [self.indexController lycUnloadViewControllerWithBlock:^{ // 卸载 IndexController对象后,加载 SmartController对象 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleNews]; }]; } complete:^{ // 加载 IndexController对象 [self lycHolyAddViewController:self.indexController]; }]; } break; case LYCHolyIdentificationStyleBrand: { // 不隐藏控制视图 self.lycHolyControlViewHidden = NO; // 设置按钮状态 [self lycHolyShowButtoNormalStateAndOthersSelectedStateWithCurrentIdentificationStyle]; [self lycHolyLoadViewControllerWithButton:button initialization:^{ // 初始化 BrandController对象 self.brandController = [BrandController LYCControllerXIBWithViewDirectionHorizontal]; [self.brandController lycUnloadViewControllerWithBlock:^{ // 卸载 BrandController对象后,加载 IndexController对象 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleIndex]; }]; } complete:^{ // 加载 BrandController对象 [self lycHolyAddViewController:self.brandController]; }]; } break; case LYCHolyIdentificationStyleLocation: { // 隐藏控制视图 self.lycHolyControlViewHidden = YES; [self lycHolyLoadViewControllerWithButton:button initialization:^{ // 初始化 LocationController对象 self.locationController = [LocationController LYCControllerXIBWithViewDirectionHorizontal]; [self.locationController lycUnloadViewControllerWithBlock:^{ // 卸载 LocationController对象后,加载 IndexController对象 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleIndex]; }]; } complete:^{ // 加载 LocationController对象 [self lycHolyAddViewController:self.locationController]; }]; } break; case LYCHolyIdentificationStyleProject: { // 隐藏控制视图 self.lycHolyControlViewHidden = YES; [self lycHolyLoadViewControllerWithButton:button initialization:^{ // 初始化 ProjectController对象 self.projectController = [ProjectController LYCControllerXIBWithViewDirectionHorizontal]; [self.projectController lycUnloadViewControllerWithBlock:^{ // 卸载 ProjectController对象后,加载 IndexController对象 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleIndex]; }]; } complete:^{ // 加载 ProjectController对象 [self lycHolyAddViewController:self.projectController]; }]; } break; case LYCHolyIdentificationStyleSmart: { // 隐藏控制视图 self.lycHolyControlViewHidden = YES; [self lycHolyLoadViewControllerWithButton:button initialization:^{ // 初始化 SmartController对象 self.smartController = [SmartController LYCControllerXIBWithViewDirectionHorizontal]; [self.smartController lycUnloadViewControllerWithBlock:^{ // 卸载 SmartController对象后,加载 IndexController对象 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleIndex]; }]; } complete:^{ // 加载 SmartController对象 [self lycHolyAddViewController:self.smartController]; }]; } break; case LYCHolyIdentificationStyleStroll: { // 不隐藏控制视图 self.lycHolyControlViewHidden = NO; // 设置按钮状态 [self lycHolyShowButtoNormalStateAndOthersSelectedStateWithCurrentIdentificationStyle]; [self lycHolyLoadViewControllerWithButton:button initialization:^{ // 初始化 StrollController对象 self.strollController = [StrollController LYCControllerXIBWithViewDirectionHorizontal]; [self.strollController lycUnloadViewControllerWithBlock:^{ // 卸载 StrollController对象后,加载 IndexController对象 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleIndex]; }]; } complete:^{ // 加载 StrollController对象 [self lycHolyAddViewController:self.strollController]; }]; } break; case LYCHolyIdentificationStyleFormats: { // 不隐藏控制视图 self.lycHolyControlViewHidden = NO; // 设置按钮状态 [self lycHolyShowButtoNormalStateAndOthersSelectedStateWithCurrentIdentificationStyle]; [self lycHolyLoadViewControllerWithButton:button initialization:^{ // 初始化 FormatsController对象 self.formatsController = [FormatsController LYCControllerXIBWithViewDirectionHorizontal]; [self.formatsController lycUnloadViewControllerWithBlock:^{ // 卸载 FormatsController对象后,加载 IndexController对象 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleIndex]; }]; } complete:^{ // 加载 FormatsController对象 [self lycHolyAddViewController:self.formatsController]; }]; } break; case LYCHolyIdentificationStyleProperty: { // 不隐藏控制视图 self.lycHolyControlViewHidden = NO; // 设置按钮状态 [self lycHolyShowButtoNormalStateAndOthersSelectedStateWithCurrentIdentificationStyle]; [self lycHolyLoadViewControllerWithButton:button initialization:^{ // 初始化 PropertyController对象 self.propertyController = [PropertyController LYCControllerXIBWithViewDirectionHorizontal]; [self.propertyController lycUnloadViewControllerWithBlock:^{ // 卸载 PropertyController对象后,加载 IndexController对象 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleIndex]; }]; } complete:^{ // 加载 PropertyController对象 [self lycHolyAddViewController:self.propertyController]; }]; } break; case LYCHolyIdentificationStyleNews: { // 隐藏控制视图 self.lycHolyControlViewHidden = YES; [self lycHolyLoadViewControllerWithButton:button initialization:^{ // 初始化 SmartController对象 self.smartController = [SmartController CustomController]; [self.smartController lycUnloadViewControllerWithBlock:^{ // 卸载 SmartController对象后,加载 IndexController对象 [self lycHolyLoadViewControllerWithIdentificationStyle:LYCHolyIdentificationStyleIndex]; }]; } complete:^{ // 加载 SmartController对象 [self lycHolyAddViewController:self.smartController]; }]; } break; default: break; } } #pragma mark - 设置释放事件 - (void)lycHolySystemEventReleaseViewControllerWithIdentificationStyle:(LYCHolyIdentificationStyle)identificationStyle { switch (identificationStyle) { case LYCHolyIdentificationStyleIndex: { LYC__Holy__ViewControllerRelease(self.indexController) } break; case LYCHolyIdentificationStyleBrand: { LYC__Holy__ViewControllerRelease(self.brandController) } break; case LYCHolyIdentificationStyleLocation: { LYC__Holy__ViewControllerRelease(self.locationController) } break; case LYCHolyIdentificationStyleProject: { LYC__Holy__ViewControllerRelease(self.projectController) } break; case LYCHolyIdentificationStyleSmart: { LYC__Holy__ViewControllerRelease(self.smartController) } break; case LYCHolyIdentificationStyleStroll: { LYC__Holy__ViewControllerRelease(self.strollController) } break; case LYCHolyIdentificationStyleFormats: { LYC__Holy__ViewControllerRelease(self.formatsController) } break; case LYCHolyIdentificationStyleProperty: { LYC__Holy__ViewControllerRelease(self.propertyController) } break; case LYCHolyIdentificationStyleNews: { LYC__Holy__ViewControllerRelease(self.smartController) } break; default: break; } } @end
下面是负责数据源的。
// // MainModel.h // 某项目 // // Created by yococo on 3/7/15. // Copyright (c) 2015 yococo. All rights reserved. // #import <Foundation/Foundation.h> @interface MainModel : NSObject + (NSArray *)controlButtons; @end
// // MainModel.m // 某项目 // // Created by yococo on 3/7/15. // Copyright (c) 2015 yococo. All rights reserved. // #import "MainModel.h" #import "LYCHolyButton.h" @implementation MainModel + (NSArray *)controlButtons { NSMutableArray *array = [NSMutableArray array]; /********* Add Start ********/ LYCHolyButton *button_index = [LYCHolyButton LycHolyButtonWithFrame:CGRectMake(52, 18, 0, 50) identificationStyle:LYCHolyIdentificationStyleIndex]; [array addObject:button_index]; button_index = nil; /********* Add End ********/ /********* Add Start ********/ LYCHolyButton *button_brand = [LYCHolyButton LycHolyButtonWithFrame:CGRectMake(52, 18, 100, 50) identificationStyle:LYCHolyIdentificationStyleBrand]; button_brand.lycHolyImageNormalPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_01_半暗.png"); button_brand.lycHolyImageSelectedPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_01_正常.png"); [array addObject:button_brand]; button_brand = nil; /********* Add End ********/ /********* Add Start ********/ LYCHolyButton *button_location = [LYCHolyButton LycHolyButtonWithFrame:CGRectMake(183, 18, 100, 50) identificationStyle:LYCHolyIdentificationStyleLocation]; button_location.lycHolyImageNormalPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_02_半暗.png"); button_location.lycHolyImageSelectedPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_02_正常.png"); [array addObject:button_location]; button_location = nil; /********* Add End ********/ /********* Add Start ********/ LYCHolyButton *button_project = [LYCHolyButton LycHolyButtonWithFrame:CGRectMake(321, 18, 100, 50) identificationStyle:LYCHolyIdentificationStyleProject]; button_project.lycHolyImageNormalPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_03_半暗.png"); button_project.lycHolyImageSelectedPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_03_正常.png"); [array addObject:button_project]; button_project = nil; /********* Add End ********/ /********* Add Start ********/ LYCHolyButton *button_smart = [LYCHolyButton LycHolyButtonWithFrame:CGRectMake(455, 18, 100, 50) identificationStyle:LYCHolyIdentificationStyleSmart]; button_smart.lycHolyImageNormalPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_04_半暗.png"); button_smart.lycHolyImageSelectedPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_04_正常.png"); [array addObject:button_smart]; button_smart = nil; /********* Add End ********/ /********* Add Start ********/ LYCHolyButton *button_stroll = [LYCHolyButton LycHolyButtonWithFrame:CGRectMake(592, 18, 100, 50) identificationStyle:LYCHolyIdentificationStyleStroll]; button_stroll.lycHolyImageNormalPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_05_半暗.png"); button_stroll.lycHolyImageSelectedPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_05_正常.png"); [array addObject:button_stroll]; button_stroll = nil; /********* Add End ********/ /********* Add Start ********/ LYCHolyButton *button_formats = [LYCHolyButton LycHolyButtonWithFrame:CGRectMake(725, 18, 100, 50) identificationStyle:LYCHolyIdentificationStyleFormats]; button_formats.lycHolyImageNormalPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_06_半暗.png"); button_formats.lycHolyImageSelectedPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_06_正常.png"); [array addObject:button_formats]; button_formats = nil; /********* Add End ********/ /********* Add Start ********/ LYCHolyButton *button_property = [LYCHolyButton LycHolyButtonWithFrame:CGRectMake(864, 18, 100, 50) identificationStyle:LYCHolyIdentificationStyleProperty]; button_property.lycHolyImageNormalPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_07_半暗.png"); button_property.lycHolyImageSelectedPath = LYC__PathFromBundleAppendingPathComponent(@"导航按钮_07_正常.png"); [array addObject:button_property]; button_property = nil; /********* Add End ********/ /********* Add Start ********/ LYCHolyButton *button_news = [LYCHolyButton LycHolyButtonWithFrame:CGRectMake(964, 18, 0, 50) identificationStyle:LYCHolyIdentificationStyleNews]; [array addObject:button_news]; button_news = nil; /********* Add End ********/ return array; return nil; } @end
已经通过某项目实践过,更新了过一些细节修改。
本设计使用了个人Kit:LYCKit。
作者:木子才
时间: 2024-10-02 00:59:23