205 lines
8.0 KiB
Mathematica
205 lines
8.0 KiB
Mathematica
|
|
//
|
|||
|
|
// SessionUtilOC.m
|
|||
|
|
// LegendTeam
|
|||
|
|
//
|
|||
|
|
// Created by 梁博 on 20/12/21.
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
#import "SessionUtilOC.h"
|
|||
|
|
|
|||
|
|
@implementation SessionUtilOC
|
|||
|
|
|
|||
|
|
+ (BOOL)shouldReloadWhenInsert:(NSArray<NSIndexPath *> *)indexPaths tableView:(UITableView *)tableView {
|
|||
|
|
// 如果插入数据后,中间有空档,则不能直接插入,需要全量重新加载
|
|||
|
|
NSMutableDictionary * sectionCurrentCount = [NSMutableDictionary dictionary];
|
|||
|
|
NSMutableDictionary * sectionMaxCount = [NSMutableDictionary dictionary];
|
|||
|
|
NSMutableDictionary * sectionInsertingCount = [NSMutableDictionary dictionary];
|
|||
|
|
|
|||
|
|
for(NSIndexPath * indexPath in indexPaths)
|
|||
|
|
{
|
|||
|
|
NSInteger section = indexPath.section;
|
|||
|
|
NSInteger count = [tableView numberOfRowsInSection:section];
|
|||
|
|
sectionCurrentCount[@(section)] = @(count);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for(NSIndexPath * indexPath in indexPaths)
|
|||
|
|
{
|
|||
|
|
NSInteger section = indexPath.section;
|
|||
|
|
NSInteger row = indexPath.row;
|
|||
|
|
NSInteger count = [sectionCurrentCount[@(section)] integerValue];
|
|||
|
|
NSInteger sectionMaxNum = [sectionMaxCount[@(section)] integerValue];
|
|||
|
|
NSInteger max = 0;
|
|||
|
|
if (row <= count)
|
|||
|
|
{
|
|||
|
|
sectionCurrentCount[@(section)] = @(count+1);
|
|||
|
|
max = count + 1;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
max = row + 1;
|
|||
|
|
}
|
|||
|
|
max = MAX(max, sectionMaxNum);
|
|||
|
|
sectionMaxCount[@(section)] = @(max);
|
|||
|
|
|
|||
|
|
NSInteger sectionCurrentCount = [sectionInsertingCount[@(section)] integerValue];
|
|||
|
|
sectionInsertingCount[@(section)] = @(++ sectionCurrentCount);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for(NSNumber * sectionKey in sectionMaxCount.allKeys)
|
|||
|
|
{
|
|||
|
|
NSInteger maxCount = [sectionMaxCount[sectionKey] integerValue];
|
|||
|
|
NSInteger currentCount = [sectionInsertingCount[sectionKey] integerValue];
|
|||
|
|
NSInteger section = [sectionKey integerValue];
|
|||
|
|
NSInteger count = [tableView numberOfRowsInSection:section];
|
|||
|
|
if (maxCount > count + currentCount)
|
|||
|
|
{
|
|||
|
|
return YES;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return NO;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
+ (NSArray<NSIndexPath *> *)getIndexPathsWith:(NSArray <NSNumber *>*)indexs {
|
|||
|
|
NSMutableArray *addIndexPathes = [NSMutableArray array];
|
|||
|
|
[indexs enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
|
|||
|
|
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[obj integerValue] inSection:0];
|
|||
|
|
[addIndexPathes addObject:indexPath];
|
|||
|
|
}];
|
|||
|
|
return [addIndexPathes copy];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
+ (CGSize)sizeWithImageOriginSize:(CGSize)originSize
|
|||
|
|
minSize:(CGSize)imageMinSize
|
|||
|
|
maxSize:(CGSize)imageMaxSiz{
|
|||
|
|
|
|||
|
|
NSInteger imageWidth = originSize.width ,imageHeight = originSize.height;
|
|||
|
|
imageWidth = imageWidth == 0 ? 1 : imageWidth;
|
|||
|
|
imageHeight = imageHeight == 0 ? 1 : imageHeight;
|
|||
|
|
NSInteger imageMinWidth = imageMinSize.width, imageMinHeight = imageMinSize.height;
|
|||
|
|
NSInteger imageMaxWidth = imageMaxSiz.width, imageMaxHeight = imageMaxSiz.height;
|
|||
|
|
|
|||
|
|
CGFloat newWidth = imageWidth;
|
|||
|
|
CGFloat newHeight = imageHeight;
|
|||
|
|
|
|||
|
|
if (imageWidth > imageHeight) //宽图
|
|||
|
|
{
|
|||
|
|
if (imageWidth > imageMaxWidth) {
|
|||
|
|
// 宽度大于最大宽度时, 取最大宽度 100 * 50 60
|
|||
|
|
newWidth = imageMaxWidth;
|
|||
|
|
// 根据宽度比例获取高度
|
|||
|
|
newHeight = imageHeight * imageMaxWidth / imageWidth;
|
|||
|
|
} else if (imageWidth < imageMinWidth) {
|
|||
|
|
// 宽度小于于最小宽度时, 取最小宽度 20 * 10 30
|
|||
|
|
newWidth = imageMinWidth;
|
|||
|
|
// 根据宽度比例获取高度
|
|||
|
|
newHeight = imageHeight * imageMinWidth / imageWidth;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(imageWidth < imageHeight)//高图
|
|||
|
|
{
|
|||
|
|
if (imageHeight > imageMaxHeight) {
|
|||
|
|
// 高度大于最大高度时, 取最大高度 50 * 100 60
|
|||
|
|
newHeight = imageMaxHeight;
|
|||
|
|
newWidth = imageWidth * imageMaxHeight / imageHeight;
|
|||
|
|
} else if (imageHeight < imageMinHeight) {
|
|||
|
|
// 高度小于最小高度时, 取最大高度 10 * 20 30
|
|||
|
|
newHeight = imageMinHeight;
|
|||
|
|
newWidth = imageWidth * imageMinHeight / imageHeight;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// 控制宽度最大最小显示逻辑
|
|||
|
|
if (newWidth > imageMaxWidth) {
|
|||
|
|
newWidth = imageMaxWidth;
|
|||
|
|
}
|
|||
|
|
if (newWidth < imageMinWidth) {
|
|||
|
|
newWidth = imageMinWidth;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 控制高度最大最小显示逻辑
|
|||
|
|
if (newHeight > imageMaxHeight) {
|
|||
|
|
newHeight = imageMaxHeight;
|
|||
|
|
}
|
|||
|
|
if (newHeight < imageMinHeight) {
|
|||
|
|
newHeight = imageMinHeight;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return CGSizeMake(newWidth, newHeight);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
+ (NSString*)showTime:(NSTimeInterval)msglastTime showDetail:(BOOL)showDetail {
|
|||
|
|
//今天的时间
|
|||
|
|
NSDate *nowDate = [NSDate date];
|
|||
|
|
NSDate *msgDate = [NSDate dateWithTimeIntervalSince1970:msglastTime];
|
|||
|
|
NSTimeInterval nowTimeInterval = [nowDate timeIntervalSince1970];
|
|||
|
|
|
|||
|
|
NSString *result = nil;
|
|||
|
|
NSCalendarUnit components = (NSCalendarUnit)(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday|NSCalendarUnitHour | NSCalendarUnitMinute);
|
|||
|
|
NSDateComponents *nowDateComponents = [[NSCalendar currentCalendar] components:components fromDate:nowDate];
|
|||
|
|
NSDateComponents *msgDateComponents = [[NSCalendar currentCalendar] components:components fromDate:msgDate];
|
|||
|
|
|
|||
|
|
double OnedayTimeIntervalValue = 24*60*60; //一天的秒数
|
|||
|
|
// NSInteger hour = msgDateComponents.hour;
|
|||
|
|
// if (hour > 12)
|
|||
|
|
// {
|
|||
|
|
// hour = hour - 12;
|
|||
|
|
// }
|
|||
|
|
BOOL isSameYer = nowDateComponents.year == msgDateComponents.year;
|
|||
|
|
BOOL isSameMonth = isSameYer && (nowDateComponents.month == msgDateComponents.month);
|
|||
|
|
BOOL isSameDay = isSameYer && isSameMonth && (nowDateComponents.day == msgDateComponents.day);
|
|||
|
|
// 如果要求强制显示AM、需要通过日历控件自己计算
|
|||
|
|
NSInteger reduceInterval = nowTimeInterval - msglastTime;
|
|||
|
|
if (showDetail) {
|
|||
|
|
if (reduceInterval < OnedayTimeIntervalValue) {
|
|||
|
|
// 24小时内 显示 XX以前
|
|||
|
|
result =[NSString stringWithFormat:@"%@", [self stringFromDate:msgDate format:@"h:mm aa"]];
|
|||
|
|
} else if (isSameMonth && (nowDateComponents.day == (msgDateComponents.day + 1))) {
|
|||
|
|
// 昨天
|
|||
|
|
result =[NSString stringWithFormat:@"Yesterday %@", [self stringFromDate:msgDate format:@"h:mm aa"]];
|
|||
|
|
} else if (isSameYer) {
|
|||
|
|
// 当年内
|
|||
|
|
result =[NSString stringWithFormat:@"%@", [self stringFromDate:msgDate format:@"MMM d, h:mm aa"]];
|
|||
|
|
} else {
|
|||
|
|
result =[NSString stringWithFormat:@"%@", [self stringFromDate:msgDate format:@"MMM d, yyyy h:mm aa"]];
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
if (isSameDay) {
|
|||
|
|
// 今天
|
|||
|
|
result =[NSString stringWithFormat:@"%@", [self stringFromDate:msgDate format:@"h:mm aa"]];
|
|||
|
|
} else if (isSameMonth && (nowDateComponents.day == (msgDateComponents.day + 1))) {
|
|||
|
|
// 昨天
|
|||
|
|
result =[NSString stringWithFormat:@"Yesterday"];
|
|||
|
|
} else if (isSameYer) {
|
|||
|
|
// 当年内
|
|||
|
|
result =[NSString stringWithFormat:@"%@", [self stringFromDate:msgDate format:@"MMM d"]];
|
|||
|
|
} else {
|
|||
|
|
result =[NSString stringWithFormat:@"%@", [self stringFromDate:msgDate format:@"MMM d, yyyy"]];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
|
|||
|
|
[formatter setDateFormat:@"hh:mm aa"];
|
|||
|
|
NSDate *tempDate = [formatter dateFromString:@"16:20"];
|
|||
|
|
// 24小时制,需要处理一下显示
|
|||
|
|
if (tempDate && ([result containsString:@"AM"] || [result containsString:@"PM"])) {
|
|||
|
|
NSString *string1 = [result stringByReplacingOccurrencesOfString:@"AM" withString:@""];
|
|||
|
|
NSString *string2 = [string1 stringByReplacingOccurrencesOfString:@"PM" withString:@""];
|
|||
|
|
result = string2;
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
+ (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format {
|
|||
|
|
NSDateFormatter *fomatter = [[NSDateFormatter alloc] init];
|
|||
|
|
[fomatter setTimeZone:[NSTimeZone localTimeZone]];
|
|||
|
|
[fomatter setDateFormat:format];
|
|||
|
|
return [fomatter stringFromDate:date];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@end
|