Commit 9382b8055881cd0e8fc38288a2f1504454f73ec9

Authored by liushiyu
2 parents feaeaa87 d84fd0ec
metaCode.xcodeproj/project.pbxproj
... ... @@ -188,7 +188,6 @@
188 188 790D01842A2D89E100C5978D /* UIColor+CNHexColor.swift */,
189 189 7C49312C2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift */,
190 190 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */,
191   - 790D01A02A2DD69200C5978D /* CNLiveTips.swift */,
192 191 79282A3B2A2EDC2500B5F8CF /* NSString+CNLiveExtensions.swift */,
193 192 798A44EF2A305BC200815935 /* UIButton+CNLiveExtension.swift */,
194 193 );
... ... @@ -261,6 +260,7 @@
261 260 7963988A2A260B3300D045EB /* Classes */ = {
262 261 isa = PBXGroup;
263 262 children = (
  263 + 7C4931322A3076BE000E44B4 /* CustomView */,
264 264 790D01832A2D89E100C5978D /* Extensions */,
265 265 7CD675502A29C036008354C1 /* Constant */,
266 266 796398912A260C0100D045EB /* Common */,
... ... @@ -370,6 +370,15 @@
370 370 path = ViewModel;
371 371 sourceTree = "<group>";
372 372 };
  373 + 7C4931322A3076BE000E44B4 /* CustomView */ = {
  374 + isa = PBXGroup;
  375 + children = (
  376 + 79282A412A2F173300B5F8CF /* CNLiveHotButton.swift */,
  377 + 790D01A02A2DD69200C5978D /* CNLiveTips.swift */,
  378 + );
  379 + name = CustomView;
  380 + sourceTree = "<group>";
  381 + };
373 382 7CD675212A26F844008354C1 /* HomePage */ = {
374 383 isa = PBXGroup;
375 384 children = (
... ... @@ -407,7 +416,6 @@
407 416 isa = PBXGroup;
408 417 children = (
409 418 7CD675512A29C04B008354C1 /* CNLiveConstant.swift */,
410   - 79282A412A2F173300B5F8CF /* CNLiveHotButton.swift */,
411 419 );
412 420 path = Constant;
413 421 sourceTree = "<group>";
... ...
metaCode/Classes/Constant/CNLiveHotButton.swift renamed to metaCode/Classes/CNLiveHotButton.swift
metaCode/Classes/Extensions/CNLiveTips.swift renamed to metaCode/Classes/CNLiveTips.swift
metaCode/Classes/Main/HomePage/Controller/CNMetaCodeHomePageController.swift
... ... @@ -14,7 +14,8 @@ let Height: CGFloat = UIScreen.main.bounds.size.height
14 14  
15 15 class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDelegate, NewPagedFlowViewDataSource, CNCustomIndexViewDelegate{
16 16  
17   -
  17 + ///NewPagedFlowView 开始滑动时的偏移量
  18 + private var beginOffset = 0.0
18 19  
19 20 private var tabBarY:CGFloat = 0.0
20 21  
... ... @@ -57,7 +58,7 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
57 58 self.tabBarY = (self.tabBarController?.tabBar.top)!
58 59  
59 60  
60   - for i in (0..<6) {
  61 + for i in (0..<5) {
61 62 self.dataArray.add("122")
62 63 }
63 64  
... ... @@ -102,14 +103,75 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
102 103 bannerView?.superScrollView = flowView.scrollView
103 104 bannerView?.associatedVCView = self.view
104 105 bannerView?.delegate = self
105   - return bannerView
  106 + return bannerView
106 107 }
107 108  
108 109 func sizeForPage(in flowView: NewPagedFlowView!) -> CGSize {
109 110 return CGSize(width: Width-50, height: Height)
110 111 }
111 112  
  113 + ///NewPagedFlowView 开始滑动
  114 + func willBeginScroll(_ scrollView: UIScrollView!) {
  115 + beginOffset = scrollView.contentOffset.x
  116 + }
  117 + ///NewPagedFlowView 滑动中
  118 + func didScroll(_ scrollView: UIScrollView!) {
  119 +
  120 + let currentOffset:CGFloat = scrollView.contentOffset.x
  121 +
  122 + if(currentOffset > beginOffset){
  123 +
  124 +
  125 + if let rightView = self.backgroupView.getRightView(){
  126 +
  127 + if let currentApearView = self.backgroupView.currentApearView{
  128 + self.backgroupView.insertSubview(rightView, belowSubview: currentApearView)
  129 + }
  130 +
  131 + self.backgroupView.currentApearView?.maskLayer.right = KSreenWidth - (currentOffset-beginOffset)*2.5
  132 + }else{
  133 +
  134 + }
  135 + }
  136 +
  137 + if(currentOffset < beginOffset){
  138 + if let leftView = self.backgroupView.getLeftView(){
  139 +
  140 + if let currentApearView = self.backgroupView.currentApearView{
  141 + self.backgroupView.insertSubview(leftView, belowSubview: currentApearView)
  142 + }
  143 +
  144 + self.backgroupView.currentApearView?.maskLayer.left = (beginOffset-currentOffset)*2.5
  145 + }else{
  146 +
  147 + }
  148 + }
  149 + }
  150 +
  151 + ///NewPagedFlowView 滑动将要结束
  152 + func willEndScroll(_ scrollView: UIScrollView!) {
  153 +
  154 + //暂时禁止再次滑动,后期优化通过自定义UIScrollView 结束动画来实现
  155 + scrollView.isScrollEnabled = false
  156 + }
  157 + ///NewPagedFlowView 滑动结束
  158 + func didEndScroll(_ scrollView: UIScrollView!) {
  159 + print("scrollView.contentOffset.x = ",scrollView.contentOffset.x)
  160 + let toIndex:Int = Int(scrollView.contentOffset.x/(Width-50))
  161 +
  162 + if toIndex == self.backgroupView.currentApearViewIndex{
  163 + return
  164 + }
  165 +
  166 + self.backgroupView.replaceCurerrentApearView(fromIndex: self.backgroupView.currentApearViewIndex, toIndex: toIndex)
  167 +
  168 + scrollView.isScrollEnabled = true
  169 +
  170 + }
  171 +
  172 +
112 173 //MARK: - CNCustomIndexView 代理方法
  174 +
113 175 func customIndexViewWillBeiginScroll(scrollView: UIScrollView) {
114 176 self.view.height = KSreenHeight
115 177 }
... ...
metaCode/Classes/Main/HomePage/View/CNHomePageBackgroupView.swift
... ... @@ -9,7 +9,12 @@ import Foundation
9 9 import UIKit
10 10 class CNHomePageBackgroupSubView : UIView
11 11 {
  12 + ///前面的视图
  13 + var preSubView: CNHomePageBackgroupSubView?
  14 + ///后面的视图
  15 + var nextSubView: CNHomePageBackgroupSubView?
12 16  
  17 + var name: String = ""
13 18 lazy var imageView: UIImageView = {
14 19 let imageView: UIImageView = UIImageView(image: UIImage(named: "homePage_backgroup_blue"))
15 20 imageView.frame = self.bounds
... ... @@ -23,6 +28,16 @@ class CNHomePageBackgroupSubView : UIView
23 28 return titleLabel
24 29 }()
25 30  
  31 + ///自定义mask
  32 + lazy var maskLayer: CALayer = {
  33 + let maskLayer = CALayer.init()
  34 + maskLayer.frame = self.bounds;
  35 + maskLayer.backgroundColor = UIColor.gray.cgColor
  36 + self.layer.mask = maskLayer
  37 +
  38 + return maskLayer
  39 + }()
  40 +
26 41  
27 42 override init(frame: CGRect) {
28 43 super.init(frame: frame)
... ... @@ -42,13 +57,27 @@ class CNHomePageBackgroupSubView : UIView
42 57 self.titleLabel.text = title
43 58 }
44 59 ///设置图片
45   - func setImage(image:UIImage)->Void{
46   - self.imageView.image = image
  60 + func setImage(image:UIImage?)->Void{
  61 + if let tempImage = image{
  62 + self.imageView.image = tempImage
  63 + }else{
  64 +
  65 + }
47 66 }
48 67 }
49 68  
50 69 class CNHomePageBackgroupView: UIView{
51 70  
  71 + ///当前显示的view所处的位置
  72 + var currentApearViewIndex: Int = 0
  73 + ///当前在屏幕显示的view
  74 + var currentApearView: CNHomePageBackgroupSubView?
  75 + ///数据源
  76 + lazy var dataArray:Array<CNHomePageBackgroupSubView> = {
  77 + let dataArray = Array<CNHomePageBackgroupSubView>()
  78 + return dataArray
  79 + }()
  80 +
52 81 // MARK: - 初始化
53 82 override init(frame: CGRect) {
54 83 super.init(frame: frame)
... ... @@ -61,11 +90,116 @@ class CNHomePageBackgroupView: UIView{
61 90  
62 91 //创建UI
63 92 func initUI(){
  93 +
  94 + for i in (0..<5){
  95 +
  96 + let subView: CNHomePageBackgroupSubView = CNHomePageBackgroupSubView.init(frame: self.bounds)
  97 + subView.frame = self.bounds
  98 +
  99 +
  100 + if (i == 0) {
  101 + subView.setTitle(title: "志愿者")
  102 + subView.setImage(image: UIImage(named: "homePage_backgroup_red"))
  103 + subView.name = "志愿者"
  104 + }
  105 + else if(i == 1){
  106 + subView.setTitle(title: "退伍军人")
  107 + subView.setImage(image: UIImage(named: "homePage_backgroup_blue"))
  108 + subView.name = "退伍军人"
  109 +
  110 + }
  111 + else if(i == 2){
  112 + subView.setTitle(title: "慈善家")
  113 + subView.setImage(image: UIImage(named: "homePage_backgroup_red"))
  114 + subView.name = "慈善家"
  115 +
  116 + }
  117 + else if(i == 3){
  118 + subView.setTitle(title: "退休干部")
  119 + subView.setImage(image: UIImage(named: "homePage_backgroup_blue"))
  120 + subView.name = "退休干部"
  121 +
  122 + }
  123 + else if(i == 4){
  124 + subView.setTitle(title: "退休医生")
  125 + subView.setImage(image: UIImage(named: "homePage_backgroup_red"))
  126 + subView.name = "退伍军人"
  127 +
  128 + }
  129 +
  130 + //更新双向链表
  131 + let lastSubView: CNHomePageBackgroupSubView? = self.dataArray.last
  132 + lastSubView?.nextSubView = subView
  133 + subView.preSubView = lastSubView
  134 +
  135 + self.dataArray.append(subView)
  136 +
  137 + if i==0 {
  138 + self.currentApearView = subView
  139 + self.currentApearViewIndex = i
  140 + }
  141 + }
  142 +
  143 + //倒序添加子view
  144 + for i in self.dataArray.enumerated().reversed() {
  145 +
  146 + let subview: CNHomePageBackgroupSubView = i.element
  147 + self.addSubview(subview)
  148 +
  149 + }
  150 +
  151 +
64 152 let subView: CNHomePageBackgroupSubView = CNHomePageBackgroupSubView.init(frame: self.bounds)
65 153 subView.frame = self.bounds
66   - subView.setTitle(title: "志愿者")
67 154  
68   - self.addSubview(subView)
  155 + }
  156 +
  157 + //MARK: - 公开方法
  158 + ///获取当前视图左边的子视图
  159 + func getLeftView()->CNHomePageBackgroupSubView?{
  160 + if(currentApearViewIndex == 0){
  161 + return nil
  162 + }
  163 + return dataArray[currentApearViewIndex - 1]
  164 + }
  165 + ///获取当前视图右边的子视图
  166 + func getRightView()->CNHomePageBackgroupSubView?{
  167 + if(currentApearViewIndex == self.dataArray.count - 1){
  168 + return nil
  169 + }
  170 + return dataArray[currentApearViewIndex + 1]
  171 + }
  172 +
  173 + /// 替换当前显示的子view
  174 + /// - Parameters:
  175 + /// - fromIndex: 原来显示的view索引
  176 + /// - toIndex: 将要显示的view索引
  177 + /// - Returns: 无返回值
  178 + func replaceCurerrentApearView(fromIndex:Int ,toIndex:Int)->Void{
  179 +
  180 + //先保存之前显示的view
  181 + let tempSubView: CNHomePageBackgroupSubView? = self.currentApearView
  182 +
  183 + //找到下一个要显示的view
  184 + if(toIndex < fromIndex){
  185 + self.currentApearView = self.currentApearView?.preSubView
  186 + }
  187 + else{
  188 + self.currentApearView = self.currentApearView?.nextSubView
  189 + }
  190 +
  191 + //把要显示的view放到最顶层
  192 + if let subView = self.currentApearView{
  193 + self.bringSubviewToFront(subView)
  194 + }
  195 + //更新当前显示的view所处的位置
  196 + self.currentApearViewIndex = toIndex
  197 +
  198 +
  199 + //重置之前的currentApearView的Left 和 right
  200 + tempSubView?.maskLayer.left = 0;
  201 + tempSubView?.maskLayer.right = KSreenWidth;
  202 +
69 203 }
70 204  
71 205 }
... ...
metaCode/Classes/Vendors/NewPagedFlowView.h
... ... @@ -182,6 +182,11 @@ typedef NS_ENUM (NSUInteger, NewPagedFlowViewOrientation) {
182 182 /// @param scrollView 滚动的scrollView
183 183 - (void)didScroll:(UIScrollView *)scrollView;
184 184  
  185 +
  186 +/// 将要结束滚动
  187 +/// @param scrollView 滚动的scrollView
  188 +- (void)willEndScroll:(UIScrollView *)scrollView;
  189 +
185 190 /// 已经结束滚动
186 191 /// @param scrollView 滚动的scrollView
187 192 - (void)didEndScroll:(UIScrollView *)scrollView;
... ...
metaCode/Classes/Vendors/NewPagedFlowView.m
... ... @@ -664,11 +664,17 @@ static NSString *subviewClassName;
664 664 #pragma mark --将要开始拖拽
665 665 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
666 666 [self stopTimer];
  667 + if(self.delegate && [self.delegate respondsToSelector:@selector(willBeginScroll:)]){
  668 + [self.delegate willBeginScroll:scrollView];
  669 + }
667 670 }
668 671  
669 672 #pragma mark --结束拖拽
670 673 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
671 674 [self startTimer];
  675 + if(self.delegate && [self.delegate respondsToSelector:@selector(willEndScroll:)]){
  676 + [self.delegate willEndScroll:scrollView];
  677 + }
672 678 }
673 679 //结束滑动
674 680 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
... ...