关于 LYCHolyContentController 的使用记录

通过多次实践后,会开始萌发一种设计框架的想法。

其实也没有什么高上档的,也就是为了可以更加懒惰,过的更加快乐而已。

思路很简单,控制加载过程,以及自动执行释放的事件。


补充:

方便、快速、优化、强大的设计是需要很多实践来测试、维护、修改来确定的。


下面上代码了。


//
//  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。


作者:木子才

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值