了解过身边很多朋友在开发中都遇到了这样一个需求,需要集成一个日历到项目中去,用来显示一些和项目中有关的需求。比如说提醒事项、签到、跳转到当天的周期信息等等。但是自定义一款日历非常的耗时,需要处理的数据逻辑繁多。一般在项目经理的催促下我们最好采用集成一款第三方,然后根据需求进行进一步的修改。最近在自己的项目中也遇到了这样的问题,在很多开源的平台下载了许许多多的第三方日历插件,但是觉得都不是太理想(以下比较过其他第三方日历插件后我做了一些优化调整)。所以说自己花时间自定义了一款易用的日历,测试过很多次,达到了一个比较满意的效果,在此推荐给大家。
项目地址以及演示 Demo:https://github.com/CoderZYWang/WZYCalendar
使用语言:Objective-C
优化方向:
① 解决数据加载过多内存消耗过大问题,一次只加载四个月份的数据。
② 解决控件循环引用问题,不会创建过多的控件,减轻界面显示时的压力。
③ 提供回调接口,点击日期可以方便拿到当前的时间。
④ 拒绝 xib、storyboard 搭建,纯代码编写。
⑤ 项目中采用了模块封装,代码清晰,添加了比较多的注释,方便开发者的二次修改以及增加新的功能。
集成方式:
① 打开终端,进入到自己的项目目录下
$ cd WZYCalendarDemo/
② pod search(如果查询不到,可以 pod setup 更新一下最新的库文件,如果你曾经更新过,那么这一步骤不会花费太多时间)
pod search WZYCalendar
③ 打开 Podfile 文件集成
④ 在自己的项目中集成
//
// ViewController.m
// WZYCalendarDemo
//
// Created by 王中尧 on 2016/12/25.
// Copyright © 2016年 wzy. All rights reserved.
//
#import "ViewController.h"
#import <WZYCalendar/WZYCalendar.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 设置尺寸
CGFloat width = self.view.bounds.size.width - 20.0;
CGPoint origin = CGPointMake(10.0, 64.0 + 80.0);
// 传入Calendar的origin和width,自动计算控件高度
WZYCalendarView *calendar = [[WZYCalendarView alloc] initWithFrameOrigin:origin width:width];
// 点击某一天的回调
calendar.didSelectDayHandler = ^(NSInteger year, NSInteger month, NSInteger day) {
NSLog(@"%ld年%ld月%ld日", year, month, day);
};
// 添加到控制器的view中
[self.view addSubview:calendar];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
是不是特别的简单,如果大家对日期的功能不满足,那么可以进行自定义。在项目的源码中有非常清晰的注释供大家参考。
如果大家觉得还不错,记得在 GitHub 给予您宝贵的一个 star。