MVC应用:简易版的应用管理

来源:互联网 发布:淘宝模特小兮 编辑:程序博客网 时间:2024/04/30 13:06

1.程序运行效果



2.程序项目结构



03,对应代码

////  YFController.m//  01-应用管理////  Created by YF on 16/3/1.//  Copyright © 2016年 YF. All rights reserved.//#import "YFController.h"#import "YFAppModel.h"#import "YFAppView.h"#import "YFCoverView.h"//plist 文件名#define kYFAppPlist @"app.plist"//列数#define kAppColumn 3//应用图的宽#define kAppViewWidth 80//应用图的高#define kAppViewHeight 90@interface YFController ()<yfAppViewDelegate>//所有的应用模型 集合@property(nonatomic,strong)NSArray<YFAppModel *>  *dataArray;@property(nonatomic,weak)YFCoverView *coverView;@end@implementation YFController- (void)viewDidLoad {    [super viewDidLoad];    self.view.backgroundColor = [UIColor whiteColor];        [self setupAppView];}//设置 应用的 布局-(void)setupAppView{        //计算 间隔    CGFloat margin = (self.view.frame.size.width - kAppColumn *kAppViewWidth) / (kAppColumn +1);        for (int i = 0; i < self.dataArray.count; i++) {        //计算行索引        NSInteger rowIndex = i / kAppColumn;        //计算列索引        NSInteger columnIndex = i % kAppColumn;        //计算 图标的 x        CGFloat appViewX = (columnIndex + 1) *margin + columnIndex * kAppViewWidth;        //计算 图标的 y        CGFloat appViewY = (rowIndex + 1) * margin + rowIndex * kAppViewHeight;        //创建图标        YFAppView *appView = [YFAppView appView];        appView.deleagte = self;        //设置图标的frame        appView.frame = CGRectMake(appViewX, appViewY, kAppViewWidth, kAppViewHeight);                [self.view addSubview:appView];                appView.appModel = self.dataArray[i];    }}/** *  懒加载数据 * *  @return 数组 */-(NSArray<YFAppModel *> *)dataArray{    if (_dataArray == nil) {        NSString *path = [[NSBundle mainBundle] pathForResource:kYFAppPlist ofType:nil];        NSArray *tempDataArray =  [NSArray arrayWithContentsOfFile:path];                NSMutableArray *dataArray = [NSMutableArray array];                for (NSDictionary *dict in tempDataArray) {            YFAppModel *appModel = [YFAppModel appModelWithDict:dict];            [dataArray addObject:appModel];        }        _dataArray = dataArray;    }        return _dataArray;}/** *  懒加载覆盖界面 * *  @return 覆盖界面 */-(YFCoverView *)coverView{    if (_coverView == nil) {        YFCoverView *coverView = [[YFCoverView alloc]initWithFrame:self.view.frame];        [self.view addSubview:coverView];        _coverView = coverView;    }    return _coverView;}-(void)appView:(YFAppView *)appView downlBtn:(UIButton *)downBtn downloadApp:(YFAppModel *)appModel{    [UIView animateWithDuration:1 animations:^{        self.coverView.appModel = appModel;        self.coverView.alpha = 0.6;    }completion:^(BOOL finished) {                [UIView animateWithDuration:1.0 animations:^{            downBtn.enabled = NO;            [self.coverView removeFromSuperview];        }];    }];}@end



////  YFAppModel.h//  01-应用管理////  Created by YF on 16/3/1.//  Copyright © 2016年 YF. All rights reserved.//#import <Foundation/Foundation.h>@interface YFAppModel : NSObject//注意事项/** *  NSString 使用 copy 关键字     是因为   copy 能够对重新拷贝一份对象 所以两个指针指向的是不同的地址            strong 是不能对对象重新进行拷贝 所以两个指针指向的是同一个地址 *//** *  属性  应用名称 */@property(nonatomic,copy)NSString *name;/** *  属性  应用图标 */@property(nonatomic,copy)NSString *icon;/** *  类方法  根据字典 初始化 对象模型 * *  @param dict 字典 * *  @return 模型 *//** *  instancetype  与  id  的区别     1.instancetype 只能用作为 返回值参数  而且会明确当前的 对象是 当前类的对象    2.id  是万能指针  既能当做  返回参数  也可以当做 普通参数  不明确指向对象 */+(instancetype)appModelWithDict:(NSDictionary *)dict;-(instancetype)initWithDict:(NSDictionary *)dict;@end////  YFAppModel.m//  01-应用管理////  Created by YF on 16/3/1.//  Copyright © 2016年 YF. All rights reserved.//#import "YFAppModel.h"@implementation YFAppModel+(instancetype)appModelWithDict:(NSDictionary *)dict{    return [[self alloc]initWithDict:dict];}-(instancetype)initWithDict:(NSDictionary *)dict{       if (self = [super init]) {        //KVC 进行属性的赋值        [self setValuesForKeysWithDictionary:dict];    }    return self;}@end

////  YFAppView.h//  01-应用管理////  Created by YF on 16/3/1.//  Copyright © 2016年 YF. All rights reserved.//#import <UIKit/UIKit.h>@class YFAppModel,YFAppView;@protocol yfAppViewDelegate <NSObject>-(void)appView:(YFAppView *)appView downlBtn:(UIButton *) downBtn downloadApp:(YFAppModel *)appModel;@end@interface YFAppView : UIView@property(nonatomic,strong)YFAppModel *appModel;/** *  代理     代理的 @property 属性 之中 必须使用  weak  是为了防止 循环引用 */@property(nonatomic,weak)id<yfAppViewDelegate> deleagte;/** *  类方法 创建视图 * *  @return appView */+(instancetype)appView;@end////  YFAppView.m//  01-应用管理////  Created by YF on 16/3/1.//  Copyright © 2016年 YF. All rights reserved.//#import "YFAppView.h"#import "YFAppModel.h"@interface YFAppView()@property (weak, nonatomic) IBOutlet UIImageView *iconImageView;@property (weak, nonatomic) IBOutlet UILabel *nameLableView;@end@implementation YFAppView+(instancetype)appView{    return [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];}-(void)setAppModel:(YFAppModel *)appModel{    _appModel = appModel;        self.iconImageView.image = [UIImage imageNamed:appModel.icon];    self.nameLableView.text = appModel.name;}- (IBAction)downClick:(UIButton *)btn {    if ([self.deleagte respondsToSelector:@selector(appView:downlBtn:downloadApp:)]) {        [self.deleagte appView:self downlBtn:btn downloadApp:self.appModel];    }    }@end




////  YFCoverView.h//  01-应用管理////  Created by YF on 16/3/1.//  Copyright © 2016年 YF. All rights reserved.//#import <UIKit/UIKit.h>@class YFAppModel;@interface YFCoverView : UIView@property(nonatomic,strong)YFAppModel *appModel;@end////  YFCoverView.m//  01-应用管理////  Created by YF on 16/3/1.//  Copyright © 2016年 YF. All rights reserved.//#import "YFCoverView.h"#import "YFAppModel.h"@interface YFCoverView()@property (nonatomic, weak) UILabel *nameLabel;@end@implementation YFCoverView- (instancetype)initWithFrame:(CGRect)frame {    if (self = [super initWithFrame:frame]) {        [self setup];    }    return self;}-(void)setup{    // 设置颜色    self.backgroundColor = [UIColor blackColor];    // 设置alpha 值为0    self.alpha = 0;    [self addLabel];}//添加文本的 UILabel-(void)addLabel{    // 添加一个label    CGSize coverViewSize = self.bounds.size;    UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, coverViewSize.width, 20)];    self.nameLabel = nameLabel;    // 设置中心点    [nameLabel setCenter:CGPointMake(coverViewSize.width/2, coverViewSize.height/2)];    // 设置对其方式    nameLabel.textAlignment = NSTextAlignmentCenter;    // 设置文本颜色    nameLabel.textColor = [UIColor whiteColor];    [self addSubview:nameLabel];}// 重写set方法- (void)setAppModel:(YFAppModel *)appModel {    // 给属性赋值    _appModel = appModel;    // 给控件赋值    _nameLabel.text = [NSString stringWithFormat:@"%@,正在下载...",_appModel.name];}@end


0 0
原创粉丝点击