iOS日历(单选、区间选择,组头悬停,分组月份阴影效果)

iOS日历(单选、区间选择,组头悬停,分组月份阴影效果),第1张

做一个自己的日历

思路:整体用collectionView

难点:组织日期数据,分组背景效果,组头悬停效果

1两层for循环,创建一个二维数组,第一层为月份,第二层为每个月下的天数。

2计算起始日期之间一共有几个月,用于第一层数组。

3计算各个月份一共有几天。并计算每月第一天是星期几,用来添加对应数量的空数据模型。对应天的model对象添加到每月的数组,构成第二层数组。

逻辑:选择开始日期和结束日期区间,开始日期标记为开始变红,结束日期标记为结束变红,两个日期之间的日期变紫。特殊情况:已经选择开始日期,选择结束日期比开始日期早,取消原来的开始日期,将这次点击变为选择开始日期,每次点击选择日期,item的model状态改变重新刷新collectionView

1需要自定义装饰视图,继承UICollectionReusableView实现自定义视图

2在自定义FlowLayout中注册自定义的装饰视图

3因为每个collectionView的section背景装饰视图的月份是不同的,所以需要动态改变。不能直接传值,只能通过layoutAttributesForElementsInRect方法,添加装饰视图

iOS 90之后直接设置 flowLayoutsectionHeadersPinToVisibleBounds = true; 就可以。但是90之前需要自己手动在自定义FlowLayout中计算,组头悬停。可以参考下这老哥的 >

请看看下面的代码行:

NSCalendar calendar = [NSCalendar currentCalendar];

NSInteger weekNumber = [[calendar components: NSWeekCalendarUnit fromDate:date] week];

现在我们如何能得到给定的周数的第一次和最后一天 (假设每周从星期一开始到周日)。

此外如果它可能获得的所有日期数组属于相同的周数。

1、请先开启iPhone显示屏上的“设定”。

2、运用,如下图所示

3、在设定目录中,寻找“电子邮件、详细地址簿、日历”

4、列,进到电子邮件设定目录。

5、下面,在电子邮件账号目录中,点按您要想设置的电子邮件。但是需要注意的是,这类方式只对于Exchange种类的信息,别的信息不兼容这类方式。

6、随后,在电子邮件的详尽设定目录中,点一下“要同歩的电子邮件日数”。

7、一列。一般来说,很有可能默认设置看上去是一个月,这也是为何的iPhone电子邮箱里只有见到近期一个月的电子邮件。

8、下面可以按照自身的需求量开展挑选。例如我这里选“不限”。

9、选择项,可以表明iPhone电子邮箱里的全部电子邮件。假如电子邮件过多,只期待iPhone表明最近的电子邮件,可以挑选时间较短的。

10、在我们重设电子邮箱的同歩日数时,大家将返还到电子邮件应用软件,随后我们可以再度同歩。

iPhone SDK包含设计、创建、调试以及优化iOS软件所需要的工具。同时,它也包含一些头文件、样例代码以及平台技术文档。您可以从苹果iPhone开发中心的会员区下载iPhone SDK。

在iOS中我们经常需要使用到时间戳,但在iOS下获取“时间”的方法有很多。不过总的来说,我们可以在iOS中获取的时间戳主要有两类----绝对时间与相对时间。下面将总结一下这些方法之间的关系。

绝对时间是指那些以固定时间为参考系的时间戳。

常用的有Foundation框架中的

[[NSDate date] timeIntervalSinceReferenceDate];

以及CoreFoundation框架中的

CFAbsoluteTimeGetCurrent();

上述两种方法是等价的,所参考的起始时间都是世界时间(UTC)2001年1月1日凌晨,所返回的double类型的结果都是从参考时间至今经过的秒数。

除了刚才提到的参考时间,还有以世界时间(UTC)1970年1月1日凌晨为参考系的

[[NSDate date] timeIntervalSince1970];

由于参考系是固定的,显然每次通过这些方法获取的时间戳都将是不同的。但绝对不变的参考系并不意味着绝对可靠的结果,实际上当用户手动改变了设备上的系统时间后,基于系统时钟的上述方法返回的结果也会一同改变。

假如我们想获取一种不会被用户手动修改而影响的时间戳,该怎么办?答案是相对时间。

相对时间是指以非固定时间为参考系返回的时间戳

常用的有Foundation框架中的

[[NSProcessInfo processInfo] systemUptime];

和QuartzCore框架中的

CACurrentMediaTime();

上面两种方法获取到的都是设备自最近一次启动至今经过的时间戳。 CFAbsoluteTimeGetCurrent() 方法调用底层的 mach_absolute_time() 方法后将结果转换成秒返回。该结果是设备自最近一次启动至今经过的时间,不随系统时间改变而改变,但当设备重启后,该方法返回的结果也会重置。

两类时间戳都有各自的特点:

绝对时间参考固定的时间点返回时间戳但结果会受系统时钟的影响;

相对时间在设备不重启的情况下总能正确返回某一时间段内流逝的时间;

所以具体要使用哪种方法获取时间戳需要结合不同的需求场景去选择。

获取到了时间戳,也许我们需要利用它来转换为时间并以一定的格式去展示,NSDate转NSString的方法网上有很多,在这里就不再叙述。需要注意的一点是,获取到绝对时间戳是以世界时间(UTC)为准的,NSDate中保存的日期也是以世界时间(UTC)为准的,所以在通过NSDateFormatter转换为NSString的时候一定要注意当前的时区。

如果App本身对获取的时间精度要求很高,还是直接通过网络从服务器获取时间戳会比较保险。当网络可用时,直接从服务器获取;网络不可用时,且设备没有被重启过,可以根据上一次获取服务器时间戳的时刻到此时的时间差来推算出正确的时间。

all-in-the-timing-keeping-track-of-time-passed-on-ios

以上就是关于iOS日历(单选、区间选择,组头悬停,分组月份阴影效果)全部的内容,包括:iOS日历(单选、区间选择,组头悬停,分组月份阴影效果)、iOS 常见的日期格式、如何获取 ios 中的开始日期和结束日期的一周等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9600039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存