132 lines
4.1 KiB
Objective-C
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
|