Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
pidan
/
FuSiLive
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
2a0df3f4
authored
May 29, 2026
by
suolong
Browse files
Options
Browse Files
Download
Plain Diff
合并
parents
e3ff8878
b8bf393c
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
306 additions
and
74 deletions
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_bgImage.imageset/Contents.json
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_bgImage.imageset/zone_subscribe_info_bgImage@2x.png
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_bgImage.imageset/zone_subscribe_info_bgImage@3x.png
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_subscribeBtn_off.imageset/Contents.json
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_subscribeBtn_off.imageset/zone_subscribe_info_subscribeBtn_off@2x.png
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_subscribeBtn_off.imageset/zone_subscribe_info_subscribeBtn_off@3x.png
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/Controller/FireFlyMyZone/FUSMyZoneViewController.m
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/View/FireFlyView/View/FUSMyZoneNewsFeedListView.h
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/View/FireFlyView/View/FUSMyZoneNewsFeedListView.m
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/View/FireFlyView/View/FUSMyZoneSubscribeCollectionView.h
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/View/FireFlyView/View/FUSMyZoneSubscribeCollectionView.m
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_bgImage.imageset/Contents.json
0 → 100644
View file @
2a0df3f4
{
"images"
:
[
{
"idiom"
:
"universal"
,
"scale"
:
"1x"
},
{
"filename"
:
"zone_subscribe_info_bgImage@2x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"2x"
},
{
"filename"
:
"zone_subscribe_info_bgImage@3x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"3x"
}
],
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_bgImage.imageset/zone_subscribe_info_bgImage@2x.png
0 → 100644
View file @
2a0df3f4
58.1 KB
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_bgImage.imageset/zone_subscribe_info_bgImage@3x.png
0 → 100644
View file @
2a0df3f4
95.2 KB
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_subscribeBtn_off.imageset/Contents.json
0 → 100644
View file @
2a0df3f4
{
"images"
:
[
{
"idiom"
:
"universal"
,
"scale"
:
"1x"
},
{
"filename"
:
"zone_subscribe_info_subscribeBtn_off@2x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"2x"
},
{
"filename"
:
"zone_subscribe_info_subscribeBtn_off@3x.png"
,
"idiom"
:
"universal"
,
"scale"
:
"3x"
}
],
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_subscribeBtn_off.imageset/zone_subscribe_info_subscribeBtn_off@2x.png
0 → 100644
View file @
2a0df3f4
1.1 KB
Modules/FUSUserCenterModule/FUSUserCenterModule/FUSUserCenterModuleBundle.bundle/FUSUserCenterAssets.xcassets/MyUserZone/zone_subscribe_info_subscribeBtn_off.imageset/zone_subscribe_info_subscribeBtn_off@3x.png
0 → 100644
View file @
2a0df3f4
2.01 KB
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/Controller/FireFlyMyZone/FUSMyZoneViewController.m
View file @
2a0df3f4
...
...
@@ -727,6 +727,7 @@
[
weakSelf
.
myZoneBottomView
fus_updateBottomViewWithModel
:
zoneModel
];
}
weakSelf
.
tableView
.
zoneModel
=
weakSelf
.
zoneModel
;
weakSelf
.
newsFeedListView
.
zoneModel
=
zoneModel
;
}
failure
:^
(
NSString
*
msg
,
NSInteger
code
)
{
if
(
code
==
-
43
)
{
if
([
UIViewController
fus_topViewController
]
==
weakSelf
)
{
...
...
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/View/FireFlyView/View/FUSMyZoneNewsFeedListView.h
View file @
2a0df3f4
...
...
@@ -30,9 +30,15 @@ NS_ASSUME_NONNULL_BEGIN
@property
(
nonatomic
,
copy
)
void
(
^
heightDidChangedHandler
)(
CGFloat
height
);
// 持有空间信息的mdoel
@property
(
nonatomic
,
strong
)
FUSZoneInfosModel
*
zoneModel
;
// 页面的最大高度
@property
(
nonatomic
,
assign
)
CGFloat
maxHeight
;
// 是否禁止进入订阅分页,YES 时点击订阅只弹提示且不能横滑进入订阅页
@property
(
nonatomic
,
assign
)
BOOL
forbidEnterSubscribePage
;
@end
NS_ASSUME_NONNULL_END
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/View/FireFlyView/View/FUSMyZoneNewsFeedListView.m
View file @
2a0df3f4
...
...
@@ -9,6 +9,14 @@
#import "FUSMyZoneNewsFeedListView.h"
#import "FUSMyZoneSubscribeCollectionView.h"
#import "FUSDialogView.h"
typedef
enum
{
FUSMyZoneNewsFeedTabTypeShare
=
0
,
FUSMyZoneNewsFeedTabTypeAlbum
,
FUSMyZoneNewsFeedTabTypeLike
,
FUSMyZoneNewsFeedTabTypeSubscribe
,
}
FUSMyZoneNewsFeedTabType
;
@interface
FUSMyZoneNewsFeedListView
()
<
UIScrollViewDelegate
,
FUSSegmentControlViewDelegate
>
...
...
@@ -21,6 +29,12 @@
// 记录当前页码
@property
(
nonatomic
,
assign
)
NSInteger
currentPage
;
// 标签页类型列表,统一驱动 segment 和实体页创建
@property
(
nonatomic
,
strong
)
NSArray
*
tabTypeList
;
/// 订阅的view
@property
(
nonatomic
,
strong
)
FUSMyZoneSubscribeCollectionView
*
subscribeView
;
@end
@implementation
FUSMyZoneNewsFeedListView
...
...
@@ -46,13 +60,131 @@
}
-
(
void
)
fus_setupViews
{
[
self
fus_buildTabTypeList
];
[
self
fus_initSegmentView
];
[
self
fus_initScrollView
];
self
.
forbidEnterSubscribePage
=
NO
;
}
// 构建当前应该展示的标签页类型列表
-
(
void
)
fus_buildTabTypeList
{
NSMutableArray
<
NSNumber
*>
*
tabTypeList
=
[
NSMutableArray
arrayWithArray
:@[
@
(
FUSMyZoneNewsFeedTabTypeShare
),
@
(
FUSMyZoneNewsFeedTabTypeAlbum
),
@
(
FUSMyZoneNewsFeedTabTypeLike
)
]];
if
(
!
FUSConfig
.
sharedInstanced
.
devConfigs
.
appStatus
)
{
[
tabTypeList
addObject
:
@
(
FUSMyZoneNewsFeedTabTypeSubscribe
)];
}
self
.
tabTypeList
=
[
tabTypeList
copy
];
}
// 当前是否展示了订阅分页
-
(
BOOL
)
fus_hasSubscribePage
{
return
[
self
.
tabTypeList
containsObject
:
@
(
FUSMyZoneNewsFeedTabTypeSubscribe
)];
}
// 返回订阅分页在列表中的索引
-
(
NSInteger
)
fus_subscribePageIndex
{
NSUInteger
subscribePageIndex
=
[
self
.
tabTypeList
indexOfObject
:
@
(
FUSMyZoneNewsFeedTabTypeSubscribe
)];
if
(
subscribePageIndex
==
NSNotFound
)
{
return
NSNotFound
;
}
return
(
NSInteger
)
subscribePageIndex
;
}
// 根据标签页类型返回标题文案
-
(
NSString
*
)
fus_titleForTabType
:
(
FUSMyZoneNewsFeedTabType
)
tabType
{
switch
(
tabType
)
{
case
FUSMyZoneNewsFeedTabTypeShare
:
return
[
NSString
fus_localString
:
@"分享"
];
case
FUSMyZoneNewsFeedTabTypeAlbum
:
return
[
NSString
fus_localString
:
@"相册"
];
case
FUSMyZoneNewsFeedTabTypeLike
:
return
[
NSString
fus_localString
:
@"点赞"
];
case
FUSMyZoneNewsFeedTabTypeSubscribe
:
return
[
NSString
fus_versionLocalString
:
@"订阅"
];
}
}
// 根据标签页类型返回对应的实体页
-
(
FUSNewsFeedCollectionView
*
)
fus_collectionViewForTabType
:
(
FUSMyZoneNewsFeedTabType
)
tabType
frame
:
(
CGRect
)
frame
{
switch
(
tabType
)
{
case
FUSMyZoneNewsFeedTabTypeShare
:
return
[[
FUSNewsFeedCollectionView
alloc
]
initWithFrame
:
frame
dataType
:
FUSNewsFeedDataTypeZoneShare
columnNum
:
2
zoneId
:
self
.
zoneId
];
case
FUSMyZoneNewsFeedTabTypeAlbum
:
return
[[
FUSNewsFeedCollectionView
alloc
]
initWithFrame
:
frame
dataType
:
FUSNewsFeedDataTypeZoneAlbum
columnNum
:
2
zoneId
:
self
.
zoneId
];
case
FUSMyZoneNewsFeedTabTypeLike
:
return
[[
FUSNewsFeedCollectionView
alloc
]
initWithFrame
:
frame
dataType
:
FUSNewsFeedDataTypeZoneLike
columnNum
:
2
zoneId
:
self
.
zoneId
];
case
FUSMyZoneNewsFeedTabTypeSubscribe
:
self
.
subscribeView
=
[[
FUSMyZoneSubscribeCollectionView
alloc
]
initWithFrame
:
frame
dataType
:
FUSNewsFeedDataTypeZoneShare
columnNum
:
2
zoneId
:
self
.
zoneId
];
return
self
.
subscribeView
;
}
}
// 返回当前是否需要拦截进入订阅分页
-
(
BOOL
)
fus_shouldBlockSubscribePage
{
return
self
.
forbidEnterSubscribePage
&&
[
self
fus_hasSubscribePage
];
}
// 处理点击订阅标签时的拦截逻辑
-
(
BOOL
)
fus_handleSubscribeTapIfNeededWithIndex
:
(
NSInteger
)
index
{
if
(
!
[
self
fus_shouldBlockSubscribePage
])
{
return
NO
;
}
NSInteger
subscribePageIndex
=
[
self
fus_subscribePageIndex
];
if
(
index
!=
subscribePageIndex
)
{
return
NO
;
}
[
self
fus_showSubscribeToast
];
[
self
.
segmentControlView
fus_setSelectedItem
:
self
.
currentPage
autoCallBack
:
NO
];
return
YES
;
}
// 处理横向滑动到订阅分页时的拦截逻辑
-
(
void
)
fus_blockSubscribePageIfNeededWithScrollView
:
(
UIScrollView
*
)
scrollView
{
if
(
scrollView
!=
self
.
scrollView
||
!
[
self
fus_shouldBlockSubscribePage
])
{
return
;
}
NSInteger
subscribePageIndex
=
[
self
fus_subscribePageIndex
];
CGFloat
maxOffsetX
=
self
.
scrollView
.
width
*
MAX
(
subscribePageIndex
-
1
,
0
);
if
(
scrollView
.
contentOffset
.
x
>
maxOffsetX
)
{
scrollView
.
contentOffset
=
CGPointMake
(
maxOffsetX
,
scrollView
.
contentOffset
.
y
);
[
self
.
segmentControlView
fus_setSelectedItem
:
MAX
(
subscribePageIndex
-
1
,
0
)
autoCallBack
:
NO
];
}
}
// 设置是否禁止进入订阅分页,并在需要时将当前位置纠正回上一页。
-
(
void
)
setForbidEnterSubscribePage
:
(
BOOL
)
forbidEnterSubscribePage
{
_forbidEnterSubscribePage
=
forbidEnterSubscribePage
;
if
(
!
[
self
fus_shouldBlockSubscribePage
])
{
return
;
}
NSInteger
subscribePageIndex
=
[
self
fus_subscribePageIndex
];
if
(
self
.
currentPage
==
subscribePageIndex
)
{
NSInteger
previousPage
=
MAX
(
subscribePageIndex
-
1
,
0
);
self
.
currentPage
=
previousPage
;
self
.
scrollView
.
contentOffset
=
CGPointMake
(
previousPage
*
self
.
scrollView
.
width
,
0
);
[
self
.
segmentControlView
fus_setSelectedItem
:
previousPage
autoCallBack
:
NO
];
}
}
// 弹出订阅提示文案
-
(
void
)
fus_showSubscribeToast
{
[
FUSDialogView
fus_showDialog
:[
NSString
fus_versionLocalString
:
@"订阅"
]];
}
-
(
void
)
fus_initSegmentView
{
UIView
*
segmentView
=
[[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
UIView
.
fus_screenW
,
70
)];
self
.
segmentControlView
=
[[
FUSSegmentControlView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
UIView
.
fus_screenW
,
40
)
withItems
:@[[
NSString
fus_localString
:
@"分享"
],[
NSString
fus_localString
:
@"相册"
],[
NSString
fus_localString
:
@"点赞"
],[
NSString
fus_localString
:
@"订阅"
]]];
NSMutableArray
<
NSString
*>
*
items
=
[
NSMutableArray
array
];
for
(
NSNumber
*
tabTypeNumber
in
self
.
tabTypeList
)
{
[
items
addObject
:[
self
fus_titleForTabType
:(
FUSMyZoneNewsFeedTabType
)
tabTypeNumber
.
integerValue
]];
}
self
.
segmentControlView
=
[[
FUSSegmentControlView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
UIView
.
fus_screenW
,
40
)
withItems
:
items
];
self
.
segmentControlView
.
alignment
=
FUSSegmentControlAlignmentCenter
;
self
.
segmentControlView
.
isEqualSpace
=
YES
;
[
self
.
segmentControlView
fus_setUnderLineSelectedImage
:
UIImage
.
fus_segmentSelected
];
...
...
@@ -88,89 +220,29 @@
[
self
addSubview
:
self
.
scrollView
];
self
.
collectionViewList
=
[
NSMutableArray
array
];
FUSNewsFeedCollectionView
*
shareCollectionView
=
[[
FUSNewsFeedCollectionView
alloc
]
initWithFrame
:
self
.
scrollView
.
bounds
dataType
:
FUSNewsFeedDataTypeZoneShare
columnNum
:
2
zoneId
:
self
.
zoneId
];
__weak
typeof
(
self
)
weakSelf
=
self
;
shareCollectionView
.
fus_scrollViewDidScrollHandler
=
^
(
FUSNewsFeedCollectionView
*
_Nonnull
scrollView
,
CGFloat
beginY
)
{
if
(
weakSelf
.
fus_scrollViewDidScrollHandler
)
{
weakSelf
.
fus_scrollViewDidScrollHandler
(
scrollView
);
}
};
shareCollectionView
.
newsFeedScrollViewDidScaleHandler
=
^
(
BOOL
canPassScroll
)
{
weakSelf
.
scrollViewCanBeScroll
=
canPassScroll
;
if
(
!
canPassScroll
)
{
[
weakSelf
fus_scrollToNearPage
];
}
};
shareCollectionView
.
contentInset
=
UIEdgeInsetsMake
(
0
,
0
,
70
,
0
);
CGRect
albumRect
=
self
.
scrollView
.
bounds
;
albumRect
.
origin
.
x
=
self
.
scrollView
.
width
;
FUSNewsFeedCollectionView
*
albumCollectionView
=
[[
FUSNewsFeedCollectionView
alloc
]
initWithFrame
:
albumRect
dataType
:
FUSNewsFeedDataTypeZoneAlbum
columnNum
:
2
zoneId
:
self
.
zoneId
];
albumCollectionView
.
fus_scrollViewDidScrollHandler
=
^
(
FUSNewsFeedCollectionView
*
_Nonnull
scrollView
,
CGFloat
beginY
)
{
if
(
weakSelf
.
fus_scrollViewDidScrollHandler
)
{
weakSelf
.
fus_scrollViewDidScrollHandler
(
scrollView
);
}
};
albumCollectionView
.
newsFeedScrollViewDidScaleHandler
=
^
(
BOOL
canPassScroll
)
{
weakSelf
.
scrollViewCanBeScroll
=
canPassScroll
;
if
(
!
canPassScroll
)
{
[
weakSelf
fus_scrollToNearPage
];
}
};
albumCollectionView
.
contentInset
=
UIEdgeInsetsMake
(
0
,
0
,
70
,
0
);
CGRect
likeRect
=
self
.
scrollView
.
bounds
;
likeRect
.
origin
.
x
=
self
.
scrollView
.
width
*
2
;
FUSNewsFeedCollectionView
*
likeCollectionView
=
[[
FUSNewsFeedCollectionView
alloc
]
initWithFrame
:
likeRect
dataType
:
FUSNewsFeedDataTypeZoneLike
columnNum
:
2
zoneId
:
self
.
zoneId
];
likeCollectionView
.
fus_scrollViewDidScrollHandler
=
^
(
FUSNewsFeedCollectionView
*
_Nonnull
scrollView
,
CGFloat
beginY
)
{
for
(
NSInteger
index
=
0
;
index
<
self
.
tabTypeList
.
count
;
index
++
)
{
CGRect
rect
=
self
.
scrollView
.
bounds
;
rect
.
origin
.
x
=
self
.
scrollView
.
width
*
index
;
NSNumber
*
tabTypeNumber
=
self
.
tabTypeList
[
index
];
FUSMyZoneNewsFeedTabType
tabType
=
(
FUSMyZoneNewsFeedTabType
)
tabTypeNumber
.
integerValue
;
FUSNewsFeedCollectionView
*
collectionView
=
[
self
fus_collectionViewForTabType
:
tabType
frame
:
rect
];
collectionView
.
fus_scrollViewDidScrollHandler
=
^
(
FUSNewsFeedCollectionView
*
_Nonnull
scrollView
,
CGFloat
beginY
)
{
if
(
weakSelf
.
fus_scrollViewDidScrollHandler
)
{
weakSelf
.
fus_scrollViewDidScrollHandler
(
scrollView
);
}
};
likeC
ollectionView
.
newsFeedScrollViewDidScaleHandler
=
^
(
BOOL
canPassScroll
)
{
c
ollectionView
.
newsFeedScrollViewDidScaleHandler
=
^
(
BOOL
canPassScroll
)
{
weakSelf
.
scrollViewCanBeScroll
=
canPassScroll
;
if
(
!
canPassScroll
)
{
[
weakSelf
fus_scrollToNearPage
];
}
};
likeCollectionView
.
contentInset
=
UIEdgeInsetsMake
(
0
,
0
,
70
,
0
);
CGRect
subscribeRect
=
self
.
scrollView
.
bounds
;
subscribeRect
.
origin
.
x
=
self
.
scrollView
.
width
*
3
;
// 订阅分页沿用统一的 collectionView 实体结构,但内部只保留固定内容容器。
FUSMyZoneSubscribeCollectionView
*
subscribeCollectionView
=
[[
FUSMyZoneSubscribeCollectionView
alloc
]
initWithFrame
:
subscribeRect
dataType
:
FUSNewsFeedDataTypeZoneShare
columnNum
:
2
zoneId
:
self
.
zoneId
];
subscribeCollectionView
.
fus_scrollViewDidScrollHandler
=
^
(
FUSNewsFeedCollectionView
*
_Nonnull
scrollView
,
CGFloat
beginY
)
{
if
(
weakSelf
.
fus_scrollViewDidScrollHandler
)
{
weakSelf
.
fus_scrollViewDidScrollHandler
(
scrollView
);
}
};
subscribeCollectionView
.
newsFeedScrollViewDidScaleHandler
=
^
(
BOOL
canPassScroll
)
{
weakSelf
.
scrollViewCanBeScroll
=
canPassScroll
;
if
(
!
canPassScroll
)
{
[
weakSelf
fus_scrollToNearPage
];
collectionView
.
contentInset
=
UIEdgeInsetsMake
(
0
,
0
,
70
,
0
);
[
self
.
collectionViewList
addObject
:
collectionView
];
[
collectionView
addObserver
:
self
forKeyPath
:
@"contentSize"
options
:
NSKeyValueObservingOptionNew
|
NSKeyValueObservingOptionOld
context
:
nil
];
[
self
.
scrollView
addSubview
:
collectionView
];
}
};
subscribeCollectionView
.
contentInset
=
UIEdgeInsetsMake
(
0
,
0
,
70
,
0
);
[
self
.
collectionViewList
addObject
:
shareCollectionView
];
[
self
.
collectionViewList
addObject
:
albumCollectionView
];
[
self
.
collectionViewList
addObject
:
likeCollectionView
];
[
self
.
collectionViewList
addObject
:
subscribeCollectionView
];
[
shareCollectionView
addObserver
:
self
forKeyPath
:
@"contentSize"
options
:
NSKeyValueObservingOptionNew
|
NSKeyValueObservingOptionOld
context
:
nil
];
[
albumCollectionView
addObserver
:
self
forKeyPath
:
@"contentSize"
options
:
NSKeyValueObservingOptionNew
|
NSKeyValueObservingOptionOld
context
:
nil
];
[
likeCollectionView
addObserver
:
self
forKeyPath
:
@"contentSize"
options
:
NSKeyValueObservingOptionNew
|
NSKeyValueObservingOptionOld
context
:
nil
];
[
subscribeCollectionView
addObserver
:
self
forKeyPath
:
@"contentSize"
options
:
NSKeyValueObservingOptionNew
|
NSKeyValueObservingOptionOld
context
:
nil
];
[
self
.
scrollView
addSubview
:
shareCollectionView
];
[
self
.
scrollView
addSubview
:
albumCollectionView
];
[
self
.
scrollView
addSubview
:
likeCollectionView
];
[
self
.
scrollView
addSubview
:
subscribeCollectionView
];
self
.
scrollView
.
contentSize
=
CGSizeMake
(
self
.
scrollView
.
width
*
self
.
collectionViewList
.
count
,
self
.
scrollView
.
height
);
}
...
...
@@ -195,6 +267,9 @@
#pragma mark - FUSSegmentControlViewDelegate
-
(
void
)
fus_segmentControl
:
(
FUSSegmentControlView
*
)
segmentView
didSelectSegmentControlItemIndex
:
(
NSInteger
)
index
itemText
:
(
NSString
*
)
text
{
if
([
self
fus_handleSubscribeTapIfNeededWithIndex
:
index
])
{
return
;
}
NSInteger
oldIndex
=
self
.
currentPage
;
self
.
currentPage
=
index
;
...
...
@@ -250,6 +325,7 @@
}
-
(
void
)
scrollViewDidScroll
:
(
UIScrollView
*
)
scrollView
{
[
self
fus_blockSubscribePageIfNeededWithScrollView
:
scrollView
];
if
(
!
self
.
scrollViewCanBeScroll
)
{
[
self
fus_scrollToNearPage
];
}
...
...
@@ -270,6 +346,12 @@
}
NSInteger
page
=
(
NSInteger
)(
scrollView
.
contentOffset
.
x
/
scrollView
.
width
);
if
([
self
fus_shouldBlockSubscribePage
]
&&
page
==
[
self
fus_subscribePageIndex
])
{
NSInteger
previousPage
=
MAX
(
page
-
1
,
0
);
self
.
scrollView
.
contentOffset
=
CGPointMake
(
previousPage
*
self
.
scrollView
.
width
,
0
);
[
self
.
segmentControlView
fus_setSelectedItem
:
previousPage
autoCallBack
:
NO
];
return
;
}
if
(
fabs
(
scrollView
.
width
*
page
-
scrollView
.
contentOffset
.
x
)
<
1
)
{
[
self
.
segmentControlView
fus_setSelectedItem
:
page
autoCallBack
:
YES
];
...
...
@@ -302,4 +384,13 @@
}
}
#pragma mark ------ setter
-
(
void
)
setZoneModel
:
(
FUSZoneInfosModel
*
)
zoneModel
{
_zoneModel
=
zoneModel
;
if
([
self
.
tabTypeList
containsObject
:
@
(
FUSMyZoneNewsFeedTabTypeSubscribe
)]
&&
self
.
subscribeView
!=
nil
)
{
self
.
subscribeView
.
zoneModel
=
zoneModel
;
}
}
@end
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/View/FireFlyView/View/FUSMyZoneSubscribeCollectionView.h
View file @
2a0df3f4
...
...
@@ -12,6 +12,9 @@ NS_ASSUME_NONNULL_BEGIN
@interface
FUSMyZoneSubscribeCollectionView
:
FUSNewsFeedCollectionView
// 持有空间信息的mdoel
@property
(
nonatomic
,
strong
)
FUSZoneInfosModel
*
zoneModel
;
/// 订阅分页的固定内容容器,用于承载后续自定义内容。
@property
(
nonatomic
,
strong
,
readonly
)
UIView
*
subscribeContainerView
;
...
...
Modules/FUSUserCenterModule/FUSUserCenterModule/Features/Zone/View/FireFlyView/View/FUSMyZoneSubscribeCollectionView.m
View file @
2a0df3f4
...
...
@@ -7,19 +7,53 @@
//
#import "FUSMyZoneSubscribeCollectionView.h"
#import <FUSFoundation/FUSFoundation-Swift.h>
@interface
FUSMyZoneSubscribeCollectionView
()
/// 订阅分页的固定内容容器,用于保持与动态分页一致的实体页结构。
@property
(
nonatomic
,
strong
)
UIView
*
subscribeContainerView
;
/// 订阅信息卡片容器,用于承载头像、昵称和 ID 信息。
@property
(
nonatomic
,
strong
)
UIImageView
*
subscribeInfoCardView
;
/// 订阅头像,用于展示当前空间主人的头像。
@property
(
nonatomic
,
strong
)
UIImageView
*
avatarImageView
;
/// 订阅昵称,用于展示当前空间主人的昵称。
@property
(
nonatomic
,
strong
)
UILabel
*
nameLabel
;
/// 订阅用户 ID,用于展示当前空间主人的 ID。
@property
(
nonatomic
,
strong
)
UILabel
*
userIdLabel
;
/// 订阅按钮,用于展示当前订阅状态。
@property
(
nonatomic
,
strong
)
UIButton
*
subscribeButton
;
@end
@implementation
FUSMyZoneSubscribeCollectionView
-
(
instancetype
)
initWithFrame
:(
CGRect
)
frame
dataType
:(
FUSNewsFeedDataType
)
dataType
columnNum
:(
NSInteger
)
columnNum
zoneId
:(
NSString
*
)
zoneId
{
UICollectionViewFlowLayout
*
layout
=
[[
UICollectionViewFlowLayout
alloc
]
init
];
layout
.
minimumLineSpacing
=
1
;
layout
.
minimumInteritemSpacing
=
1
;
CGFloat
width
=
(
CGRectGetWidth
(
frame
)
-
layout
.
minimumLineSpacing
)
/
columnNum
;
layout
.
itemSize
=
CGSizeMake
(
width
,
width
);
layout
.
scrollDirection
=
UICollectionViewScrollDirectionVertical
;
self
=
[
super
initWithFrame
:
frame
collectionViewLayout
:
layout
];
if
(
self
)
{
self
.
rootVC
=
[
UIViewController
fus_topViewController
];
[
self
fus_initials
];
}
return
self
;
}
/// 重写父类初始化逻辑,仅保留统一的容器风格,不走动态列表请求。
-
(
void
)
fus_initials
{
self
.
backgroundColor
=
UIColor
.
fus_appBGColor
;
self
.
scrollEnabled
=
NO
;
self
.
alwaysBounceVertical
=
NO
;
self
.
showsHorizontalScrollIndicator
=
NO
;
self
.
showsVerticalScrollIndicator
=
NO
;
self
.
bounces
=
NO
;
...
...
@@ -30,6 +64,43 @@
self
.
subscribeContainerView
=
[[
UIView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
CGRectGetWidth
(
self
.
bounds
),
self
.
subscribeContentHeight
)];
self
.
subscribeContainerView
.
backgroundColor
=
UIColor
.
clearColor
;
[
self
addSubview
:
self
.
subscribeContainerView
];
self
.
subscribeInfoCardView
=
[[
UIImageView
alloc
]
initWithFrame
:
CGRectZero
];
self
.
subscribeInfoCardView
.
contentMode
=
UIViewContentModeScaleAspectFit
;
self
.
subscribeInfoCardView
.
image
=
[
FUSUserCenterBunble
imageNamed
:
@"zone_subscribe_info_bgImage"
];
self
.
subscribeInfoCardView
.
userInteractionEnabled
=
YES
;
[
self
.
subscribeContainerView
addSubview
:
self
.
subscribeInfoCardView
];
self
.
avatarImageView
=
[[
UIImageView
alloc
]
initWithFrame
:
CGRectZero
];
self
.
avatarImageView
.
layer
.
cornerRadius
=
32
.
0
;
self
.
avatarImageView
.
layer
.
masksToBounds
=
YES
;
self
.
avatarImageView
.
contentMode
=
UIViewContentModeScaleAspectFill
;
self
.
avatarImageView
.
backgroundColor
=
[
UIColor
colorWithWhite
:
0
alpha
:
0
.
05
];
[
self
.
subscribeInfoCardView
addSubview
:
self
.
avatarImageView
];
self
.
nameLabel
=
[[
UILabel
alloc
]
initWithFrame
:
CGRectZero
];
self
.
nameLabel
.
font
=
[
UIFont
fus_themeBoldFont
:
18
];
self
.
nameLabel
.
textColor
=
[
UIColor
fus_textColorRich
];
self
.
nameLabel
.
text
=
@""
;
[
self
.
subscribeInfoCardView
addSubview
:
self
.
nameLabel
];
self
.
userIdLabel
=
[[
UILabel
alloc
]
initWithFrame
:
CGRectZero
];
self
.
userIdLabel
.
font
=
[
UIFont
fus_themeFont
:
14
];
self
.
userIdLabel
.
textColor
=
[
UIColor
fus_textColorMedium
];
self
.
userIdLabel
.
text
=
@""
;
[
self
.
subscribeInfoCardView
addSubview
:
self
.
userIdLabel
];
self
.
subscribeButton
=
[
UIButton
buttonWithType
:
UIButtonTypeCustom
];
self
.
subscribeButton
.
userInteractionEnabled
=
NO
;
self
.
subscribeButton
.
backgroundColor
=
[
UIColor
colorWithWhite
:
0
alpha
:
0
.
12
];
self
.
subscribeButton
.
titleLabel
.
font
=
[
UIFont
fus_themeBoldFont
:
16
];
[
self
.
subscribeButton
setTitleColor
:
UIColor
.
whiteColor
forState
:
UIControlStateNormal
];
[
self
.
subscribeButton
setTitle
:[
NSString
stringWithFormat
:
@" %@"
,[
NSString
fus_versionLocalString
:
@"未开启订阅"
]]
forState
:
UIControlStateNormal
];
[
self
.
subscribeButton
setImage
:[
FUSUserCenterBunble
imageNamed
:
@"zone_subscribe_info_subscribeBtn_off"
]
forState
:
UIControlStateNormal
];
self
.
subscribeButton
.
layer
.
cornerRadius
=
26
.
0
;
self
.
subscribeButton
.
layer
.
masksToBounds
=
YES
;
[
self
.
subscribeContainerView
addSubview
:
self
.
subscribeButton
];
self
.
contentSize
=
CGSizeMake
(
CGRectGetWidth
(
self
.
bounds
),
self
.
subscribeContentHeight
);
}
...
...
@@ -38,12 +109,19 @@
[
super
layoutSubviews
];
self
.
subscribeContainerView
.
frame
=
CGRectMake
(
0
,
0
,
CGRectGetWidth
(
self
.
bounds
),
self
.
subscribeContentHeight
);
self
.
subscribeInfoCardView
.
frame
=
CGRectMake
(
15
,
12
,
CGRectGetWidth
(
self
.
bounds
)
-
30
,
124
);
self
.
avatarImageView
.
frame
=
CGRectMake
(
16
,
20
,
64
,
64
);
CGFloat
textOriginX
=
CGRectGetMaxX
(
self
.
avatarImageView
.
frame
)
+
16
;
CGFloat
textWidth
=
CGRectGetWidth
(
self
.
subscribeInfoCardView
.
bounds
)
-
textOriginX
-
16
;
self
.
nameLabel
.
frame
=
CGRectMake
(
textOriginX
,
25
,
textWidth
,
28
);
self
.
userIdLabel
.
frame
=
CGRectMake
(
textOriginX
,
CGRectGetMaxY
(
self
.
nameLabel
.
frame
)
+
8
,
textWidth
,
20
);
self
.
subscribeButton
.
frame
=
CGRectMake
(
15
,
CGRectGetMaxY
(
self
.
subscribeInfoCardView
.
frame
)
+
18
,
CGRectGetWidth
(
self
.
bounds
)
-
30
,
52
);
self
.
contentSize
=
CGSizeMake
(
CGRectGetWidth
(
self
.
bounds
),
self
.
subscribeContentHeight
);
}
/// 返回订阅分页的固定内容高度。
-
(
CGFloat
)
subscribeContentHeight
{
return
2
56
.
0
;
return
2
20
.
0
;
}
/// 返回订阅分页用于占位的最小高度。
...
...
@@ -51,4 +129,13 @@
return
self
.
subscribeContentHeight
;
}
#pragma mark --- setter
-
(
void
)
setZoneModel
:
(
FUSZoneInfosModel
*
)
zoneModel
{
_zoneModel
=
zoneModel
;
[
self
.
avatarImageView
setImageWithURL
:[
NSURL
URLWithString
:
zoneModel
.
face
.
fus_bigCdn
]
placeholder
:[
UIImage
fus_defaultIcon
]];
self
.
nameLabel
.
text
=
zoneModel
.
nickname
;
self
.
userIdLabel
.
text
=
[
NSString
stringWithFormat
:
@"ID: %@"
,
zoneModel
.
uid
];
}
@end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment