Skip to content

Commit 4285282

Browse files
committed
打赏 - 冒泡列表
1 parent 51bc94d commit 4285282

File tree

6 files changed

+86
-100
lines changed

6 files changed

+86
-100
lines changed

Coding_iOS/Models/Tweet.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,10 @@
4444
- (NSInteger)numOfComments;
4545
- (BOOL)hasMoreComments;
4646

47-
- (NSInteger)numOfLikers;
48-
- (BOOL)hasMoreLikers;
47+
- (NSArray *)like_reward_users;
48+
- (BOOL)hasLikesOrRewards;
49+
- (BOOL)hasMoreLikesOrRewards;
50+
- (BOOL)rewardedBy:(User *)user;
4951

5052
- (NSString *)toDoLikePath;
5153
- (void)changeToLiked:(NSNumber *)liked;

Coding_iOS/Models/Tweet.m

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -83,24 +83,39 @@ - (BOOL)hasMoreComments{
8383
return (_comments.intValue > _comment_list.count || _comments.intValue > 5);
8484
}
8585

86-
- (NSInteger)numOfLikers{
87-
return MIN(_like_users.count +1,
88-
MIN(_likes.intValue,
89-
[self maxLikerNum]));
90-
}
91-
92-
- (NSInteger)maxLikerNum{
93-
NSInteger maxNum = 9;
94-
if (kDevice_Is_iPhone6) {
95-
maxNum = 11;
96-
}else if (kDevice_Is_iPhone6Plus){
97-
maxNum = 12;
86+
- (NSArray *)like_reward_users{
87+
if (_reward_users.count > 0) {
88+
NSLog(@"_reward_users.count > 0");
9889
}
99-
return maxNum;
90+
NSMutableArray *like_reward_users = _like_users.count > 0? _like_users.mutableCopy: @[].mutableCopy;//点赞的人多,用点赞的人列表做基
91+
[_reward_users enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(User *obj, NSUInteger idx, BOOL *stop) {
92+
__block NSInteger originalIndex = NSNotFound;
93+
[like_reward_users enumerateObjectsUsingBlock:^(User *obj_, NSUInteger idx_, BOOL *stop_) {
94+
if ([obj.global_key isEqualToString:obj_.global_key]) {
95+
originalIndex = idx_;
96+
}
97+
}];
98+
if (originalIndex != NSNotFound) {
99+
[like_reward_users exchangeObjectAtIndex:originalIndex withObjectAtIndex:0];
100+
}else{
101+
[like_reward_users insertObject:obj atIndex:0];
102+
}
103+
}];
104+
return like_reward_users;
100105
}
101-
102-
- (BOOL)hasMoreLikers{
103-
return (_likes.intValue > _like_users.count || _likes.intValue > [self maxLikerNum] - 1);
106+
- (BOOL)hasLikesOrRewards{
107+
return (_likes.integerValue + _rewards.integerValue) > 0;
108+
}
109+
- (BOOL)hasMoreLikesOrRewards{
110+
return (_likes.integerValue > _like_users.count || _rewards.integerValue > _reward_users.count);
111+
}
112+
- (BOOL)rewardedBy:(User *)user{
113+
for (User *obj in _reward_users) {
114+
if ([obj.global_key isEqualToString:user.global_key]) {
115+
return YES;
116+
}
117+
}
118+
return NO;
104119
}
105120

106121
- (NSString *)toDoLikePath{

Coding_iOS/Views/CCell/TweetLikeUserCCell.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@
1313

1414
@interface TweetLikeUserCCell : UICollectionViewCell
1515

16-
- (void)configWithUser:(User *)user likesNum:(NSNumber *)likes;
16+
- (void)configWithUser:(User *)user rewarded:(BOOL)rewarded;
1717

1818
@end

Coding_iOS/Views/CCell/TweetLikeUserCCell.m

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,47 +11,43 @@
1111
#import "TweetLikeUserCCell.h"
1212

1313
@interface TweetLikeUserCCell ()
14-
@property (strong, nonatomic) User *curUser;
15-
@property (strong, nonatomic) NSNumber *likes;
1614
@property (strong, nonatomic) UIImageView *imgView;
1715
@property (strong, nonatomic) UILabel *likesLabel;
1816

1917
@end
2018

2119
@implementation TweetLikeUserCCell
22-
- (void)configWithUser:(User *)user likesNum:(NSNumber *)likes{
23-
self.curUser = user;
24-
self.likes = likes;
25-
20+
- (void)configWithUser:(User *)user rewarded:(BOOL)rewarded{
2621
if (!self.imgView) {
2722
self.imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kTweetCell_LikeUserCCell_Height, kTweetCell_LikeUserCCell_Height)];
28-
[self.imgView doCircleFrame];
23+
self.imgView.layer.masksToBounds = YES;
24+
self.imgView.layer.cornerRadius = kTweetCell_LikeUserCCell_Height/2;
25+
self.imgView.layer.borderColor = [UIColor colorWithHexString:@"0xFFAE03"].CGColor;
2926
[self.contentView addSubview:self.imgView];
3027
}
31-
if (_curUser) {
32-
[self.imgView sd_setImageWithURL:[_curUser.avatar urlImageWithCodePathResizeToView:_imgView] placeholderImage:kPlaceholderMonkeyRoundView(_imgView)];
28+
if (user) {
29+
[self.imgView sd_setImageWithURL:[user.avatar urlImageWithCodePathResizeToView:_imgView] placeholderImage:kPlaceholderMonkeyRoundView(_imgView)];
3330
if (_likesLabel) {
3431
_likesLabel.hidden = YES;
3532
}
3633
}else{
3734
[self.imgView sd_setImageWithURL:nil];
3835
[self.imgView setImage:[UIImage imageWithColor:[UIColor colorWithHexString:@"0xdadada"]]];
3936
if (!_likesLabel) {
40-
_likesLabel = [[UILabel alloc] initWithFrame:_imgView.frame];
37+
_likesLabel = [[UILabel alloc] initWithFrame:_imgView.bounds];
4138
_likesLabel.backgroundColor = [UIColor clearColor];
4239
_likesLabel.textColor = [UIColor whiteColor];
4340
_likesLabel.font = [UIFont systemFontOfSize:15];
4441
_likesLabel.minimumScaleFactor = 0.5;
4542
_likesLabel.textAlignment = NSTextAlignmentCenter;
46-
[self.contentView addSubview:_likesLabel];
43+
[self.imgView addSubview:_likesLabel];
4744
}
48-
_likesLabel.text = [NSString stringWithFormat:@"%d", _likes.intValue];
45+
_likesLabel.text = @"···";
4946
_likesLabel.hidden = NO;
5047
}
48+
self.imgView.layer.borderWidth = rewarded? 1.0 : 0.0;
5149
}
5250
- (void)layoutSubviews{
5351
[super layoutSubviews];
5452
}
55-
56-
5753
@end

Coding_iOS/Views/Cell/TweetCell.m

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#define kTweet_TimtFont [UIFont systemFontOfSize:12]
2222
#define kTweet_LikeUsersLineCount 7.0
2323

24+
#define kTweetCell_MaxCollectionNum (kDevice_Is_iPhone6Plus? 12: kDevice_Is_iPhone6? 10 : 9)
25+
2426
#import "TweetCell.h"
2527
#import "TweetLikeUserCCell.h"
2628
#import "TweetCommentCell.h"
@@ -36,6 +38,7 @@
3638

3739
@interface TweetCell ()
3840
@property (strong, nonatomic) Tweet *tweet;
41+
@property (strong, nonatomic) NSArray *like_reward_users;
3942
@property (assign, nonatomic) BOOL needTopView;
4043

4144
@property (strong, nonatomic) UIView *topView;
@@ -53,11 +56,6 @@ @interface TweetCell ()
5356

5457
@implementation TweetCell
5558

56-
- (void)setTweet:(Tweet *)tweet needTopView:(BOOL)needTopView{
57-
_tweet = tweet;
58-
_needTopView = needTopView;
59-
}
60-
6159
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
6260
{
6361
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
@@ -213,22 +211,11 @@ - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reus
213211
}
214212
return self;
215213
}
214+
- (void)setTweet:(Tweet *)tweet needTopView:(BOOL)needTopView{
215+
_tweet = tweet;
216+
_like_reward_users = [_tweet like_reward_users];
217+
_needTopView = needTopView;
216218

217-
- (void)awakeFromNib
218-
{
219-
// Initialization code
220-
self.selectionStyle = UITableViewCellSelectionStyleNone;
221-
}
222-
223-
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
224-
{
225-
[super setSelected:selected animated:animated];
226-
227-
// Configure the view for the selected state
228-
}
229-
230-
- (void)layoutSubviews{
231-
[super layoutSubviews];
232219
if (!_tweet) {
233220
return;
234221
}
@@ -320,7 +307,7 @@ - (void)layoutSubviews{
320307
curBottomY += kTweetCell_LikeComment_Height;
321308
curBottomY += [TweetCell likeCommentBtn_BottomPadingWithTweet:_tweet];
322309

323-
if (_tweet.numOfLikers > 0 || _tweet.numOfComments > 0) {
310+
if ([_tweet hasLikesOrRewards] || _tweet.numOfComments > 0) {
324311
[_commentOrLikeBeginImgView setY:(curBottomY - CGRectGetHeight(_commentOrLikeBeginImgView.frame) + 1)];
325312
_commentOrLikeBeginImgView.hidden = NO;
326313
}else{
@@ -329,7 +316,7 @@ - (void)layoutSubviews{
329316

330317
//点赞的人_列表
331318
// 可有可无
332-
if (_tweet.numOfLikers > 0) {
319+
if ([_tweet hasLikesOrRewards]) {
333320
CGFloat likeUsersHeight = [TweetCell likeUsersHeightWithTweet:_tweet];
334321
[self.likeUsersView setFrame:CGRectMake(kTweetCell_PadingLeft, curBottomY, kTweetCell_ContentWidth, likeUsersHeight)];
335322
[self.likeUsersView reloadData];
@@ -341,7 +328,7 @@ - (void)layoutSubviews{
341328
}
342329
}
343330
//评论与赞的分割线
344-
if (_tweet.numOfLikers > 0 && _tweet.numOfComments > 0) {
331+
if ([_tweet hasLikesOrRewards] && _tweet.numOfComments > 0) {
345332
[_commentOrLikeSplitlineView setY:(curBottomY -1)];
346333
_commentOrLikeSplitlineView.hidden = NO;
347334
}else{
@@ -460,7 +447,7 @@ - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSe
460447
if (collectionView == _mediaView) {
461448
row = _tweet.htmlMedia.imageItems.count;
462449
}else{
463-
row = _tweet.numOfLikers;
450+
row = MIN(kTweetCell_MaxCollectionNum, [_tweet hasMoreLikesOrRewards]? _like_reward_users.count + 1: _like_reward_users.count);
464451
}
465452
return row;
466453
}
@@ -485,11 +472,12 @@ - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cell
485472
}
486473
}else{
487474
TweetLikeUserCCell *ccell = [collectionView dequeueReusableCellWithReuseIdentifier:kCCellIdentifier_TweetLikeUser forIndexPath:indexPath];
488-
if (indexPath.row >= _tweet.numOfLikers-1 && _tweet.hasMoreLikers) {
489-
[ccell configWithUser:nil likesNum:_tweet.likes];
475+
if (indexPath.row >= kTweetCell_MaxCollectionNum -1
476+
|| indexPath.row >= _like_reward_users.count) {
477+
[ccell configWithUser:nil rewarded:NO];
490478
}else{
491-
User *curUser = [_tweet.like_users objectAtIndex:indexPath.row];
492-
[ccell configWithUser:curUser likesNum:nil];
479+
User *curUser = [_like_reward_users objectAtIndex:indexPath.row];
480+
[ccell configWithUser:curUser rewarded:[_tweet rewardedBy:curUser]];
493481
}
494482
return ccell;
495483
}
@@ -556,12 +544,13 @@ - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPa
556544
browser.photos = photos; // 设置所有的图片
557545
[browser show];
558546
}else{
559-
if (indexPath.row >= _tweet.numOfLikers-1 && _tweet.hasMoreLikers) {
547+
if (indexPath.row >= kTweetCell_MaxCollectionNum -1
548+
|| indexPath.row >= _like_reward_users.count) {
560549
if (_moreLikersBtnClickedBlock) {
561550
_moreLikersBtnClickedBlock(_tweet);
562551
}
563552
}else{
564-
User *curUser = [_tweet.like_users objectAtIndex:indexPath.row];
553+
User *curUser = [_like_reward_users objectAtIndex:indexPath.row];
565554
if (_userBtnClickedBlock) {
566555
_userBtnClickedBlock(curUser);
567556
}

Coding_iOS/Views/Cell/TweetDetailCell.m

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
#define kTweetDetailCell_PadingBottom 10.0
1616
#define kTweetDetailCell_LikeUserCCell_Height 25.0
1717
#define kTweetDetailCell_LikeUserCCell_Pading 10.0
18-
#define kTweetDetailCell_LikeNumMax (kDevice_Is_iPhone6Plus? 12: kDevice_Is_iPhone6? 11: 9)
18+
19+
#define kTweetDetailCell_MaxCollectionNum (kDevice_Is_iPhone6Plus? 12: kDevice_Is_iPhone6? 11: 9)
1920

2021

2122

@@ -29,6 +30,8 @@
2930
#import "SendRewardManager.h"
3031

3132
@interface TweetDetailCell ()
33+
@property (strong, nonatomic) NSArray *like_reward_users;
34+
3235
@property (strong, nonatomic) UITapImageView *ownerImgView;
3336
@property (strong, nonatomic) UIButton *ownerNameBtn;
3437
@property (strong, nonatomic) UILabel *timeLabel, *fromLabel;
@@ -164,22 +167,14 @@ - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reus
164167
return self;
165168
}
166169

167-
- (void)awakeFromNib
168-
{
169-
// Initialization code
170-
}
171-
172-
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
173-
{
174-
[super setSelected:selected animated:animated];
175-
176-
// Configure the view for the selected state
177-
}
178-
179170
- (void)setTweet:(Tweet *)tweet{
180-
if (tweet) {
181-
_tweet = tweet;
171+
_tweet = tweet;
172+
_like_reward_users = [_tweet like_reward_users];
173+
174+
if (!_tweet) {
175+
return;
182176
}
177+
183178
BOOL isProjectTweet = _tweet.project_id != nil;
184179
self.likeBtn.hidden = isProjectTweet;
185180
self.rewardBtn.hidden = isProjectTweet;
@@ -254,7 +249,7 @@ - (void)setTweet:(Tweet *)tweet{
254249

255250
//点赞的人_列表
256251
// 可有可无
257-
if (_tweet.likes.intValue > 0) {
252+
if ([_tweet hasLikesOrRewards]) {
258253
CGFloat likeUsersHeight = [[self class] likeUsersHeightWithTweet:_tweet];
259254
[self.likeUsersView setFrame:CGRectMake(0, curBottomY, kScreen_Width, likeUsersHeight)];
260255
[self.likeUsersView reloadData];
@@ -424,29 +419,19 @@ - (void)rewardBtnClicked:(id)sender{
424419

425420
#pragma mark Collection M
426421
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
427-
NSInteger row = 0;
428-
if (_tweet.like_users.count > 0) {
429-
row = _tweet.like_users.count;
430-
if (_tweet.likes.integerValue > _tweet.like_users.count) {
431-
row++;
432-
}
433-
row = MIN(row, kTweetDetailCell_LikeNumMax);
434-
}
422+
NSInteger row = MIN(kTweetDetailCell_MaxCollectionNum, [_tweet hasMoreLikesOrRewards]? _like_reward_users.count + 1: _like_reward_users.count);
435423
return row;
436424
}
437425

438426
// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
439427
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
440428
TweetLikeUserCCell *ccell = [collectionView dequeueReusableCellWithReuseIdentifier:kCCellIdentifier_TweetLikeUser forIndexPath:indexPath];
441-
if (indexPath.row >= kTweetDetailCell_LikeNumMax-1) {
442-
[ccell configWithUser:nil likesNum:_tweet.likes];
429+
if (indexPath.row >= kTweetDetailCell_MaxCollectionNum -1
430+
|| indexPath.row >= _like_reward_users.count) {
431+
[ccell configWithUser:nil rewarded:NO];
443432
}else{
444-
if (_tweet.like_users.count > indexPath.row) {
445-
User *curUser = [_tweet.like_users objectAtIndex:indexPath.row];
446-
[ccell configWithUser:curUser likesNum:nil];
447-
}else {
448-
[ccell configWithUser:nil likesNum:_tweet.likes];
449-
}
433+
User *curUser = [_like_reward_users objectAtIndex:indexPath.row];
434+
[ccell configWithUser:curUser rewarded:[_tweet rewardedBy:curUser]];
450435
}
451436
return ccell;
452437
}
@@ -469,14 +454,13 @@ - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectio
469454
}
470455

471456
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
472-
NSInteger numberOfItems = MIN(_tweet.like_users.count +1, _tweet.like_users.count);
473-
numberOfItems = MIN(numberOfItems, kTweetDetailCell_LikeNumMax);
474-
if (indexPath.row >= numberOfItems-1) {
457+
if (indexPath.row >= kTweetDetailCell_MaxCollectionNum -1
458+
|| indexPath.row >= _like_reward_users.count) {
475459
if (_moreLikersBtnClickedBlock) {
476460
_moreLikersBtnClickedBlock(_tweet);
477461
}
478-
}else if (_tweet.like_users.count > indexPath.row){
479-
User *curUser = [_tweet.like_users objectAtIndex:indexPath.row];
462+
}else{
463+
User *curUser = [_like_reward_users objectAtIndex:indexPath.row];
480464
if (_userBtnClickedBlock) {
481465
_userBtnClickedBlock(curUser);
482466
}

0 commit comments

Comments
 (0)