Files
yinmeng-ios/xplan-ios/Main/Room/View/PositionContainerView/PositionView/Object/XPRoomPositionLayoutImpl.m
2021-10-18 19:10:13 +08:00

132 lines
4.1 KiB
Objective-C

//
// XPRoomPositionLayoutImpl.m
// xplan-ios
//
// Created by 冯硕 on 2021/10/15.
//
#import "XPRoomPositionLayoutImpl.h"
///Tool
#import "XPMacro.h"
///View
#import "XCRoomPostionNickView.h"
@implementation XPRoomPositionLayoutImpl
///多少个item
- (int)numberOfItems {
return 9;
}
///item的class 所有的坑位的样式是相同的 如果不同的话 在做
- (Class)classOfPositionItme {
return [XCRoomPostionNickView class];
}
///获取所有item中心点
- (NSArray<NSValue *> *)getPositionItemsCenter {
int number = [self numberOfItems];
CGSize itemSize = [self getNormalItemSize];
CGSize ownerSize = [self getOwnerItemSize];
CGFloat lineSpace = [self getItemsLineSpace];
CGFloat interiteSpace = [self getItemsInteritemSpace];
CGFloat ownerItemMaxY = ownerSize.height + [self getOwnerItemToNormalItemHeight];
CGPoint ownerCenter = CGPointMake(KScreenWidth / 2, ownerSize.height / 2);
NSMutableArray* itemArray = [NSMutableArray arrayWithCapacity:number];
NSValue * ownerCenterValue = [NSValue valueWithCGPoint:ownerCenter];
[itemArray addObject:ownerCenterValue];
for (int i = 1; i < number; i++) {
CGPoint itemCenter = CGPointZero;
if (i <= 4) {
itemCenter = CGPointMake(itemSize.width / 2 + (itemSize.width + interiteSpace) * (i -1), ownerItemMaxY + itemSize.height/ 2);
} else {
itemCenter = CGPointMake(itemSize.width / 2 + (itemSize.width + interiteSpace) * (i -1), ownerItemMaxY + itemSize.height/ 2 + itemSize.height + lineSpace);
}
NSValue * itemCenterValue = [NSValue valueWithCGPoint:itemCenter];
[itemArray addObject:itemCenterValue];
}
return itemArray;
}
///获取所有item的布局
- (NSArray<NSValue *> *)getPositionItemsRect {
int number = [self numberOfItems];
CGSize itemSize = [self getNormalItemSize];
CGSize ownerSize = [self getOwnerItemSize];
CGFloat lineSpace = [self getItemsLineSpace];
CGFloat interiteSpace = [self getItemsInteritemSpace];
CGFloat ownerItemMaxY = [self getOwnerItemSize].height + [self getOwnerItemToNormalItemHeight];
NSMutableArray* itemArray = [NSMutableArray arrayWithCapacity:number];
CGRect ownerRect = CGRectMake((KScreenWidth - 40)/2 - ownerSize.width / 2, 0, ownerSize.width, ownerSize.height);
NSValue * ownerFrameValue = [NSValue valueWithCGRect:ownerRect];
[itemArray addObject:ownerFrameValue];
for (int i = 1; i < number; i++) {
CGPoint itemOrigin = CGPointZero;
if (i <= 4) {
itemOrigin = CGPointMake((itemSize.width + interiteSpace) * (i -1), ownerItemMaxY);
} else {
itemOrigin = CGPointMake((itemSize.width + interiteSpace) * (i-4 -1), ownerItemMaxY + itemSize.height + lineSpace);
}
CGRect itemRect = CGRectMake(itemOrigin.x, itemOrigin.y, itemSize.width, itemSize.height);
NSValue * itemRectValue = [NSValue valueWithCGRect:itemRect];
[itemArray addObject:itemRectValue];
}
return itemArray;
}
#pragma mark - Public Method
- (CGFloat)getPositionViewHeight {
CGFloat height = 0;
CGSize itemSize = [self getNormalItemSize];
CGSize ownerSize = [self getOwnerItemSize];
CGFloat lineSpace = [self getItemsLineSpace];
int numberLine =([self numberOfItems] -1)/ [self numberOfItemInLine];
height = ownerSize.height +(itemSize.height + lineSpace) * numberLine + [self getOwnerItemToNormalItemHeight];
return height;
}
#pragma mark - Private Method
///获取房主坑位的大小
- (CGSize)getOwnerItemSize {
return CGSizeMake(58 + 5, 58 + 12 + 6 + 5);
}
///获取普通坑位的大小
- (CGSize)getNormalItemSize {
CGFloat itemWidth = 55 + 5;
return CGSizeMake(itemWidth, itemWidth + 12 + 6);
}
///获取行之间的间隙
- (CGFloat)getItemsLineSpace {
return 15;
}
///获取列之间的间隙
- (CGFloat)getItemsInteritemSpace {
int number= [self numberOfItemInLine];
CGFloat itemWidth = (KScreenWidth - 40 - [self getNormalItemSize].width * number) / (number - 1);
return itemWidth;
}
///获取容器外部的间隙
- (UIEdgeInsets)getContainerEsgeInsets {
return UIEdgeInsetsMake(0, 20, 0, 20);
}
///房主item和普通item之间的距离
- (CGFloat)getOwnerItemToNormalItemHeight {
return 33;
}
///一列有几个item 房主不算
- (int)numberOfItemInLine {
return 4;
}
@end