Files
keyboard/keyBoard/Class/Shop/VC/KBShopItemVC.m

146 lines
5.7 KiB
Mathematica
Raw Normal View History

2025-11-09 13:56:13 +08:00
//
// KBShopItemVC.m
// keyBoard
//
// Created by Mac on 2025/11/9.
//
#import "KBShopItemVC.h"
#import <MJRefresh/MJRefresh.h>
2025-11-09 18:07:47 +08:00
#import <Masonry/Masonry.h>
#import "KBSkinCardCell.h"
2025-11-09 13:56:13 +08:00
2025-11-09 18:07:47 +08:00
@interface KBShopItemVC ()<UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
2025-11-09 13:56:13 +08:00
@property (nonatomic, copy) void(^scrollCallback)(UIScrollView *scrollView);
@end
@implementation KBShopItemVC
- (void)viewDidLoad {
[super viewDidLoad];
2025-11-13 15:34:56 +08:00
self.view.backgroundColor = [UIColor clearColor];
2025-11-09 13:56:13 +08:00
2025-11-09 18:07:47 +08:00
// collectionView
[self.view addSubview:self.collectionView];
[self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view); // mas
}];
2025-11-09 13:56:13 +08:00
2025-11-09 18:07:47 +08:00
// 2
2025-11-10 15:38:30 +08:00
KBWeakSelf
2025-11-09 13:56:13 +08:00
if (self.isNeedHeader) {
2025-11-09 18:07:47 +08:00
self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
2025-11-09 13:56:13 +08:00
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
2025-11-09 18:07:47 +08:00
[weakSelf.collectionView.mj_header endRefreshing];
2025-11-09 13:56:13 +08:00
});
}];
}
if (self.isNeedFooter) {
2025-11-09 18:07:47 +08:00
self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
2025-11-09 13:56:13 +08:00
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
2025-11-09 18:07:47 +08:00
[weakSelf.dataSource addObject:@"加载更多成功"]; //
[weakSelf.collectionView reloadData];
[weakSelf.collectionView.mj_footer endRefreshing];
2025-11-09 13:56:13 +08:00
});
}];
2025-11-09 18:07:47 +08:00
}
if (@available(iOS 11.0, *)) {
self.collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
2025-11-09 13:56:13 +08:00
}
[self beginFirstRefresh];
}
2025-11-09 18:07:47 +08:00
#pragma mark -
2025-11-09 13:56:13 +08:00
2025-11-09 18:07:47 +08:00
//
2025-11-09 13:56:13 +08:00
- (void)beginFirstRefresh {
if (!self.isHeaderRefreshed) {
[self beginRefreshImmediately];
}
}
- (void)beginRefreshImmediately {
if (self.isNeedHeader) {
2025-11-09 18:07:47 +08:00
[self.collectionView.mj_header beginRefreshing];
2025-11-09 13:56:13 +08:00
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.isHeaderRefreshed = YES;
2025-11-09 18:07:47 +08:00
[self.collectionView reloadData];
[self.collectionView.mj_header endRefreshing];
2025-11-09 13:56:13 +08:00
});
2025-11-09 18:07:47 +08:00
} else {
2025-11-09 13:56:13 +08:00
self.isHeaderRefreshed = YES;
2025-11-09 18:07:47 +08:00
[self.collectionView reloadData];
2025-11-09 13:56:13 +08:00
}
}
2025-11-09 18:07:47 +08:00
#pragma mark - UICollectionView DataSource
2025-11-09 13:56:13 +08:00
2025-11-09 18:07:47 +08:00
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
if (!self.isHeaderRefreshed) return 0;
2025-11-09 13:56:13 +08:00
return self.dataSource.count;
}
2025-11-09 18:07:47 +08:00
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
KBSkinCardCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"KBSkinCardCell" forIndexPath:indexPath];
NSString *title = (indexPath.item < self.dataSource.count) ? self.dataSource[indexPath.item] : @"Dopamine";
[cell configWithTitle:title imageURL:nil price:@"20"]; // 20
2025-11-09 13:56:13 +08:00
return cell;
}
2025-11-09 18:07:47 +08:00
#pragma mark - UICollectionView DelegateFlowLayout
2025-11-09 13:56:13 +08:00
2025-11-09 18:07:47 +08:00
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
// 16 12
CGFloat insetLR = 16.0;
CGFloat spacing = 12.0;
CGFloat contentW = collectionView.bounds.size.width - insetLR * 2;
CGFloat itemW = floor((contentW - spacing) / 2.0);
CGFloat itemH = itemW * 0.75 + 56; // KBSkinCardCell
return CGSizeMake(itemW, itemH);
2025-11-09 13:56:13 +08:00
}
2025-11-09 18:07:47 +08:00
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(12, 16, 12, 16);
2025-11-09 13:56:13 +08:00
}
2025-11-09 18:07:47 +08:00
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
return 12.0;
2025-11-09 13:56:13 +08:00
}
2025-11-09 18:07:47 +08:00
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
return 12.0;
2025-11-09 13:56:13 +08:00
}
2025-11-09 18:07:47 +08:00
#pragma mark - UIScrollView Delegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
!self.scrollCallback ?: self.scrollCallback(scrollView);
2025-11-09 13:56:13 +08:00
}
2025-11-09 18:07:47 +08:00
#pragma mark - JXPagingViewListViewDelegate
- (UIView *)listView { return self.view; }
- (UIScrollView *)listScrollView { return self.collectionView; }
- (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback { self.scrollCallback = callback; }
- (void)listWillAppear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
- (void)listDidAppear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
- (void)listWillDisappear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
- (void)listDidDisappear { NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd)); }
#pragma mark - Lazy
- (UICollectionView *)collectionView {
if (!_collectionView) {
UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
2025-11-13 15:34:56 +08:00
_collectionView.backgroundColor = [UIColor clearColor];
2025-11-09 18:07:47 +08:00
_collectionView.dataSource = self;
_collectionView.delegate = self;
// cell
[_collectionView registerClass:KBSkinCardCell.class forCellWithReuseIdentifier:@"KBSkinCardCell"]; //
}
return _collectionView;
2025-11-09 13:56:13 +08:00
}
@end