首页的推荐已经完成

This commit is contained in:
fengshuo
2022-03-01 19:28:16 +08:00
parent 2cfcaf8959
commit 66de1ae1d2
13 changed files with 184 additions and 12 deletions

View File

@@ -14,6 +14,7 @@ NSString * const kTeenagerAlertDatekey = @"kTeenagerAlertDatekey";
NSString * const kRoomMiniNotificationKey = @"RoomMiniNotificationKey";
NSString * const kRoomGiftEffectUpdateNotificationKey = @"RoomGiftEffectUpdateNotificationKey";
NSString * const kRoomRoomSettingNotificationKey = @"kRoomRoomSettingNotificationKey";
NSString * const kHomeMoreScrollPageKey = @"kHomeMoreScrollPageKey";
///
NSString * const KeyWithType(KeyType type) {
BOOL isRelase = NO;

View File

@@ -11,10 +11,10 @@
///Tool
#import "NetImageView.h"
#import "ThemeColor.h"
#import "XPMacro.h"
#import "UIImage+Utils.h"
///Model
#import "HomeRecommendRoomModel.h"
@interface XPHomeHotRoomCollectionViewCell ()
///
@property (nonatomic,strong) UIImageView *backImageView;
@@ -32,7 +32,8 @@
@property (nonatomic,strong) UIImageView *sexImageView;
///
@property (nonatomic,strong) UILabel *nickLabel;
///
@property (nonatomic,strong) UIView *rippleView;
@end
@implementation XPHomeHotRoomCollectionViewCell
@@ -50,6 +51,7 @@
#pragma mark - Private Method
- (void)initSubViews {
[self.contentView addSubview:self.backImageView];
[self.backImageView addSubview:self.rippleView];
[self.backImageView addSubview:self.roomTagImageView];
[self.backImageView addSubview:self.roomDesLabel];
[self.backImageView addSubview:self.notImageView];
@@ -57,6 +59,46 @@
[self.backImageView addSubview:self.avatarImageView];
[self.backImageView addSubview:self.sexImageView];
[self.backImageView addSubview:self.nickLabel];
[self addAnimation];
}
- (void)addAnimation {
NSInteger pulsingCount = 3;
double animationDuration = 3;
CALayer * animationLayer = [CALayer layer];
for (int i = 0; i < pulsingCount; i++) {
CALayer * pulsingLayer = [CALayer layer];
pulsingLayer.frame = CGRectMake(0, 0, 50, 50);
pulsingLayer.borderColor = [UIColor whiteColor].CGColor;
pulsingLayer.borderWidth = 1;
pulsingLayer.cornerRadius = 50 / 2;
CAMediaTimingFunction * defaultCurve = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
CAAnimationGroup * animationGroup = [CAAnimationGroup animation];
animationGroup.fillMode = kCAFillModeBackwards;
animationGroup.beginTime = CACurrentMediaTime() + (double)i * animationDuration / (double)pulsingCount;
animationGroup.duration = animationDuration;
animationGroup.repeatCount = HUGE;
animationGroup.removedOnCompletion = NO;
animationGroup.timingFunction = defaultCurve;
CABasicAnimation * scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimation.fromValue = @1.4;
scaleAnimation.toValue = @3;
scaleAnimation.removedOnCompletion = NO;
CAKeyframeAnimation * opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
opacityAnimation.values = @[@1, @0.9, @0.8, @0.7, @0.6, @0.5, @0.4, @0.3, @0.2, @0.1, @0];
opacityAnimation.keyTimes = @[@0, @0.1, @0.2, @0.3, @0.4, @0.5, @0.6, @0.7, @0.8, @0.9, @1];
opacityAnimation.removedOnCompletion = NO;
animationGroup.animations = @[scaleAnimation, opacityAnimation];
[pulsingLayer addAnimation:animationGroup forKey:@"plulsing"];
[animationLayer addSublayer:pulsingLayer];
}
[self.rippleView.layer addSublayer:animationLayer];
}
- (void)initSubViewConstraints {
@@ -94,6 +136,11 @@
make.top.mas_equalTo(self.notImageView.mas_bottom).offset(9);
}];
[self.rippleView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self.avatarImageView);
make.size.mas_equalTo(CGSizeMake(50, 50));
}];
[self.nickLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.backImageView);
@@ -146,7 +193,7 @@
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
_avatarImageView = [[NetImageView alloc] initWithConfig:config];
_avatarImageView.layer.masksToBounds = YES;
_avatarImageView.layer.cornerRadius = 48/2;
_avatarImageView.layer.cornerRadius = 50/2;
_avatarImageView.layer.borderColor = [UIColor whiteColor].CGColor;
_avatarImageView.layer.borderWidth = 1.1;
}
@@ -205,4 +252,13 @@
return _notImageView;
}
- (UIView *)rippleView {
if (!_rippleView) {
_rippleView = [[UIView alloc] init];
_rippleView.backgroundColor = [UIColor clearColor];
}
return _rippleView;
}
@end

View File

@@ -8,9 +8,17 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class XPHomeHotRoomTableViewCell, HomeRecommendRoomModel;
@protocol XPHomeHotRoomTableViewCellDelegate <NSObject>
- (void)xPHomeHotRoomTableViewCell:(XPHomeHotRoomTableViewCell *)view didClickItem:(HomeRecommendRoomModel *)roomInfo;
@end
@interface XPHomeHotRoomTableViewCell : UITableViewCell
@property (nonatomic,strong) NSArray *hotAnchorList;
///代理
@property (nonatomic,weak) id<XPHomeHotRoomTableViewCellDelegate> delegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -61,6 +61,12 @@
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
[collectionView deselectItemAtIndexPath:indexPath animated:YES];
if (self.hotAnchorList.count > 0) {
HomeRecommendRoomModel * info = [self.hotAnchorList objectAtIndex:indexPath.row];
if (self.delegate && [self.delegate respondsToSelector:@selector(xPHomeHotRoomTableViewCell:didClickItem:)]) {
[self.delegate xPHomeHotRoomTableViewCell:self didClickItem:info];
}
}
}
#pragma mark - Getters And Setters

View File

@@ -8,9 +8,17 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class XPHomeRecommendTableViewCell, HomeRecommendRoomModel;
@protocol XPHomeRecommendTableViewCellDelegate <NSObject>
- (void)xPHomeRecommendTableViewCell:(XPHomeRecommendTableViewCell *)view didClickItem:(HomeRecommendRoomModel *)roomInfo;
@end
@interface XPHomeRecommendTableViewCell : UITableViewCell
@property (nonatomic,strong) NSArray *recommendList;
///代理
@property (nonatomic,weak) id<XPHomeRecommendTableViewCellDelegate> delegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -92,7 +92,13 @@
}
#pragma mark - Event Response
- (void)tapRecognizer:(UITapGestureRecognizer *)tap {
NSInteger index = tap.view.tag - 1001;
if (index < self.recommendList.count) {
HomeRecommendRoomModel * recommend = [_recommendList objectAtIndex:index];
if (self.delegate && [self.delegate respondsToSelector:@selector(xPHomeRecommendTableViewCell:didClickItem:)]) {
[self.delegate xPHomeRecommendTableViewCell:self didClickItem:recommend];
}
}
}
#pragma mark - Getters And Setters

View File

@@ -10,6 +10,7 @@
#import <Masonry/Masonry.h>
///Tool
#import "XPMacro.h"
#import "XPConstant.h"
///View
#import "XPHomeBannerTableViewCell.h"
#import "XPHomeMenuTableViewCell.h"
@@ -29,8 +30,9 @@
#define recommendHeight (230 + 11 +108) * kScreenScale
#define hotRoomHeight (162 + 4)
#define sectionHeight 38
UIKIT_EXTERN NSString * kHomeMoreScrollPageKey;
@interface XPHomeRecommendHeaderView ()<UITableViewDelegate, UITableViewDataSource, XPHomeMenuTableViewCellDelegate, XPHomeBannerTableViewCellDelegate>
@interface XPHomeRecommendHeaderView ()<UITableViewDelegate, UITableViewDataSource, XPHomeMenuTableViewCellDelegate, XPHomeBannerTableViewCellDelegate, XPHomeHotRoomTableViewCellDelegate, XPHomeRecommendTableViewCellDelegate, XPHomeSectionViewDelegate>
///
@property (nonatomic,strong) UITableView *tableView;
@end
@@ -126,14 +128,18 @@
if (section == 2) {
XPHomeSectionView * sectionView = [[XPHomeSectionView alloc] init];
sectionView.frame = CGRectMake(0, 0, KScreenWidth, sectionHeight);
sectionView.tag = 1000 + section;
sectionView.imageName = @"home_recommend_section_logo";
sectionView.title = @"最新推荐";
sectionView.delegate= self;
return sectionView;
} else if (section == 3) {
XPHomeSectionView * sectionView = [[XPHomeSectionView alloc] init];
sectionView.frame = CGRectMake(0, 0, KScreenWidth, sectionHeight);
sectionView.imageName = @"home_hot_section_logo";
sectionView.title = @"人气主播";
sectionView.tag = 1000 + section;
sectionView.delegate= self;
return sectionView;
}
return [UIView new];
@@ -169,6 +175,7 @@
cell = [[XPHomeRecommendTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPHomeRecommendTableViewCell class])];
}
cell.recommendList = self.recommendList;
cell.delegate = self;
return cell;
} else {
XPHomeHotRoomTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPHomeHotRoomTableViewCell class])];
@@ -176,6 +183,7 @@
cell = [[XPHomeHotRoomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPHomeHotRoomTableViewCell class])];
}
cell.hotAnchorList = self.hotRoomList;
cell.delegate = self;
return cell;
}
}
@@ -224,6 +232,28 @@
}
}
#pragma mark - XPHomeHotRoomTableViewCellDelegate
- (void)xPHomeHotRoomTableViewCell:(XPHomeHotRoomTableViewCell *)view didClickItem:(HomeRecommendRoomModel *)roomInfo {
if (roomInfo.uid.length > 0) {
[XPRoomViewController openRoom:roomInfo.uid viewController:self.currenViewController];
}
}
#pragma mark - XPHomeRecommendTableViewCellDelegate
- (void)xPHomeRecommendTableViewCell:(XPHomeRecommendTableViewCell *)view didClickItem:(HomeRecommendRoomModel *)roomInfo {
if (roomInfo.roomUid.length > 0) {
[XPRoomViewController openRoom:roomInfo.roomUid viewController:self.currenViewController];
}
}
#pragma mark - XPHomeSectionViewDelegate
- (void)didClickXPHomeSectionView:(XPHomeSectionView *)view {
NSInteger section = view.tag - 1000;
NSString * sectionStr = [NSString stringWithFormat:@"%ld",section];
NSDictionary * dic = @{@"section": sectionStr};
[[NSNotificationCenter defaultCenter] postNotificationName:kHomeMoreScrollPageKey object:dic];
}
#pragma mark - Getters And Setters
- (void)setBannerList:(NSArray<HomeBannerInfoModel *> *)bannerList {
_bannerList = bannerList;

View File

@@ -8,14 +8,19 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class XPHomeSectionView;
@protocol XPHomeSectionViewDelegate <NSObject>
- (void)didClickXPHomeSectionView:(XPHomeSectionView *)view;
@end
@interface XPHomeSectionView : UIView
///显示标题
@property (nonatomic,copy) NSString *title;
///显示图片的名称
@property (nonatomic,copy) NSString *imageName;
///是否隐藏logo
@property (nonatomic,assign) BOOL isHiddenLogo;
///代理
@property (nonatomic,weak) id<XPHomeSectionViewDelegate> delegate;
@end

View File

@@ -24,6 +24,8 @@
@property (nonatomic,strong) UILabel *moreLabel;
///
@property (nonatomic,strong) UIImageView *arrowImageView;
///
@property (nonatomic,strong) UIControl *moreControl;
@end
@implementation XPHomeSectionView
@@ -40,6 +42,7 @@
- (void)initSubViews {
[self addSubview:self.logoStackView];
[self addSubview:self.moreStackView];
[self addSubview:self.moreControl];
[self.logoStackView addArrangedSubview:self.logoImageView];
[self.logoStackView addArrangedSubview:self.titleLabel];
@@ -65,6 +68,17 @@
[self.arrowImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(6, 10));
}];
[self.moreControl mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.right.mas_equalTo(self);
make.width.mas_equalTo(200);
}];
}
#pragma mark - Event Response
- (void)moreControlAction:(UIControl *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickXPHomeSectionView:)]) {
[self.delegate didClickXPHomeSectionView:self];
}
}
#pragma mark - Getters And Setters
@@ -82,10 +96,6 @@
}
}
- (void)setIsHiddenLogo:(BOOL)isHiddenLogo {
_isHiddenLogo = isHiddenLogo;
self.logoImageView.hidden = isHiddenLogo;
}
- (UIStackView *)logoStackView {
if (!_logoStackView) {
@@ -144,5 +154,12 @@
return _titleLabel;
}
- (UIControl *)moreControl {
if (!_moreControl) {
_moreControl = [[UIControl alloc] init];
[_moreControl addTarget:self action:@selector(moreControlAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _moreControl;
}
@end

View File

@@ -126,6 +126,17 @@
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (self.roomList.count > 0) {
HomePlayRoomModel * model = [self.roomList objectAtIndex:indexPath.row];
if (!model.isBanner && model.uid.integerValue > 0) {
[XPRoomViewController openRoom:model.uid viewController:self];
}
}
}
#pragma mark - XPHomeBannerTableViewCellDelegate
- (void)xPHomeBannerTableViewCell:(XPHomeBannerTableViewCell *)view didClickBanner:(HomeBannerInfoModel *)info {
switch (info.skipType) {

View File

@@ -14,6 +14,8 @@
///VC
#import "XPWebViewController.h"
#import "XPRoomViewController.h"
///Model
#import "HomePlayRoomModel.h"
@interface XPHomeHotRoomViewController ()<UITableViewDelegate, UITableViewDataSource>
///
@@ -73,7 +75,16 @@
cell = [[XPHomeListEmptyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPHomeListEmptyTableViewCell class])];
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (self.roomList.count > 0) {
HomePlayRoomModel * model = [self.roomList objectAtIndex:indexPath.row];
if (!model.isBanner && model.uid.integerValue > 0) {
[XPRoomViewController openRoom:model.uid viewController:self];
}
}
}
#pragma mark - JXPagingViewListViewDelegate
- (UIView *)listView {

View File

@@ -172,6 +172,7 @@
}
return (id <JXPagerViewListViewDelegate>)viewController;
}
#pragma mark - JXPagerMainTableViewGestureDelegate
- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

View File

@@ -13,6 +13,7 @@
#import "ThemeColor+Home.h"
#import "XPMacro.h"
#import "XPHtmlURL.h"
#import "XPConstant.h"
///View
#import "XPHomeNavView.h"
#import "XPHomeRecommendViewController.h"
@@ -20,6 +21,8 @@
#import "XPHomePartyContainerViewController.h"
#import "XPWebViewController.h"
UIKIT_EXTERN NSString *kHomeMoreScrollPageKey;
@interface XPHomeViewController ()<XPHomeNavViewDelegate, JXCategoryViewDelegate,JXCategoryListContainerViewDelegate>
///
@property (nonatomic,strong) NSArray<NSString *> *titles;
@@ -52,6 +55,7 @@
self.homeNavView.titleView.delegate = self;
self.homeNavView.titleView.listContainer = self.listContainerView;
[self.homeNavView.titleView reloadData];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(recommendMoreNotification:) name:kHomeMoreScrollPageKey object:nil];
}
- (void)initSubViewConstraints {
@@ -98,6 +102,14 @@
webVC.url = URLWithType(kHomeRankURL);
[self.navigationController pushViewController:webVC animated:YES];
}
#pragma mark - Event Response
- (void)recommendMoreNotification:(NSNotification *)notification {
NSDictionary * dic = notification.object;
//TODO: tad
[self.homeNavView.titleView selectItemAtIndex:1];
}
#pragma mark - Getters And Setters
- (JXCategoryListContainerView *)listContainerView {
if (!_listContainerView) {