Commit 75b5e01a5414e35cbd141a88a205031c1a802394
1 parent
e6c6b89e
废弃CNHomepageDetailViewController
Showing
2 changed files
with
357 additions
and
393 deletions
metaCode/Classes/Main/HomePages/Controller/AuthController/push相关/CNHomePageAnimationTransition.swift
| @@ -39,28 +39,7 @@ extension CNHomePageAnimationTransition: UIViewControllerAnimatedTransitioning { | @@ -39,28 +39,7 @@ extension CNHomePageAnimationTransition: UIViewControllerAnimatedTransitioning { | ||
| 39 | let fromNavi = fromVCtemp.viewControllers![0] as! CNLiveBaseNavigationController | 39 | let fromNavi = fromVCtemp.viewControllers![0] as! CNLiveBaseNavigationController |
| 40 | let fromVC = fromNavi.viewControllers.first as! CNLiveAuthViewController | 40 | let fromVC = fromNavi.viewControllers.first as! CNLiveAuthViewController |
| 41 | guard let toNaviVC = transitionContext.viewController(forKey: .to) as? CNHomePageBaseNavigationController else { return } | 41 | guard let toNaviVC = transitionContext.viewController(forKey: .to) as? CNHomePageBaseNavigationController else { return } |
| 42 | - if toNaviVC.topViewController is CNHomepageDetailViewController{ | ||
| 43 | - guard let selectedCell = fromVC.selectedCell else { return } | ||
| 44 | - let toVC = toNaviVC.topViewController as! CNHomepageDetailViewController | ||
| 45 | - let frame = selectedCell.convert(selectedCell.bgBackView.frame, to: fromVC.view) | ||
| 46 | - //2.Set presentation original size. | ||
| 47 | - toVC.view.frame = frame | ||
| 48 | - toVC.scrollView.imageView.frame.size.width = GlobalConstants.todayCardSize.width | ||
| 49 | - toVC.scrollView.imageView.frame.size.height = GlobalConstants.todayCardSize.height | ||
| 50 | - | ||
| 51 | - containerView.addSubview(toNaviVC.view) | ||
| 52 | - | ||
| 53 | - //3.Change original size to final size with animation. | ||
| 54 | - UIView.animate(withDuration: transitonDuration, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: { | ||
| 55 | - toVC.view.frame = UIScreen.main.bounds | ||
| 56 | - toVC.scrollView.imageView.frame.size.width = KSreenWidth | ||
| 57 | - toVC.scrollView.imageView.frame.size.height = KSreenWidth*DownSlideSingleCourseImgH/DownSlideSingleCourseW | ||
| 58 | - toVC.closeBtn.alpha = 1 | ||
| 59 | - | ||
| 60 | - }) { (completed) in | ||
| 61 | - transitionContext.completeTransition(completed) | ||
| 62 | - } | ||
| 63 | - }else if toNaviVC.topViewController is CNHomepageDuanJuDetailViewController{ | 42 | + if toNaviVC.topViewController is CNHomepageDuanJuDetailViewController{ |
| 64 | guard let selectedCell = fromVC.selectedDuanjuCell else { return } | 43 | guard let selectedCell = fromVC.selectedDuanjuCell else { return } |
| 65 | let toVC = toNaviVC.topViewController as! CNHomepageDuanJuDetailViewController | 44 | let toVC = toNaviVC.topViewController as! CNHomepageDuanJuDetailViewController |
| 66 | let frame = selectedCell.convert(selectedCell.totalView.frame, to: fromVC.view) | 45 | let frame = selectedCell.convert(selectedCell.totalView.frame, to: fromVC.view) |
| @@ -87,22 +66,7 @@ extension CNHomePageAnimationTransition: UIViewControllerAnimatedTransitioning { | @@ -87,22 +66,7 @@ extension CNHomePageAnimationTransition: UIViewControllerAnimatedTransitioning { | ||
| 87 | guard let toVCTabbar = transitionContext.viewController(forKey: .to) as? CNLiveBaseTabBarViewController else { return } | 66 | guard let toVCTabbar = transitionContext.viewController(forKey: .to) as? CNLiveBaseTabBarViewController else { return } |
| 88 | let toVCNav = toVCTabbar.viewControllers?.first as! CNLiveBaseNavigationController | 67 | let toVCNav = toVCTabbar.viewControllers?.first as! CNLiveBaseNavigationController |
| 89 | let toVC = toVCNav.viewControllers.first as! CNLiveAuthViewController | 68 | let toVC = toVCNav.viewControllers.first as! CNLiveAuthViewController |
| 90 | - if fromNaviVC.topViewController is CNHomepageDetailViewController{ | ||
| 91 | - guard let selectedCell = toVC.selectedCell else { return } | ||
| 92 | - let fromVC = fromNaviVC.topViewController as! CNHomepageDetailViewController | ||
| 93 | - | ||
| 94 | - UIView.animate(withDuration: transitonDuration - 0.3, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: { | ||
| 95 | - let frame = selectedCell.convert(selectedCell.bgBackView.frame, to: toVC.view) | ||
| 96 | - fromVC.view.frame = frame | ||
| 97 | - fromVC.view.layer.cornerRadius = GlobalConstants.toDayCardCornerRadius | ||
| 98 | - fromVC.scrollView.imageView.frame.size.width = GlobalConstants.todayCardSize.width | ||
| 99 | - fromVC.scrollView.imageView.frame.size.height = GlobalConstants.todayCardSize.height | ||
| 100 | - fromVC.closeBtn.alpha = 0 | ||
| 101 | - | ||
| 102 | - }) { (completed) in | ||
| 103 | - transitionContext.completeTransition(completed) | ||
| 104 | - } | ||
| 105 | - }else if fromNaviVC.topViewController is CNHomepageDuanJuDetailViewController{ | 69 | + if fromNaviVC.topViewController is CNHomepageDuanJuDetailViewController{ |
| 106 | guard let selectedCell = toVC.selectedDuanjuCell else { return } | 70 | guard let selectedCell = toVC.selectedDuanjuCell else { return } |
| 107 | let fromVC = fromNaviVC.topViewController as! CNHomepageDuanJuDetailViewController | 71 | let fromVC = fromNaviVC.topViewController as! CNHomepageDuanJuDetailViewController |
| 108 | UIView.animate(withDuration: transitonDuration - 0.3, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: { | 72 | UIView.animate(withDuration: transitonDuration - 0.3, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: { |
metaCode/Classes/Main/HomePages/Controller/AuthController/push相关/CNHomepageDetailViewController.swift
| 1 | +//// | ||
| 2 | +//// CNHomepageDetailViewController.swift | ||
| 3 | +//// metaCode | ||
| 4 | +//// | ||
| 5 | +//// Created by zx on 2024/1/5. | ||
| 6 | +//// 首页--短剧大图点击详情页(废弃) -> CNUpSlideDetailViewController | ||
| 1 | // | 7 | // |
| 2 | -// CNHomepageDetailViewController.swift | ||
| 3 | -// metaCode | 8 | +//import Foundation |
| 9 | +//import MJRefresh | ||
| 10 | +//import EmptyDataSet_Swift | ||
| 4 | // | 11 | // |
| 5 | -// Created by zx on 2024/1/5. | ||
| 6 | -// 首页--短剧大图点击详情页 | ||
| 7 | - | ||
| 8 | -import Foundation | ||
| 9 | -import MJRefresh | ||
| 10 | -import EmptyDataSet_Swift | ||
| 11 | - | ||
| 12 | -class CNHomepageDetailViewController: CNLiveBaseViewController ,UITableViewDataSource, UITableViewDelegate,EmptyDataSetSource, EmptyDataSetDelegate{ | ||
| 13 | - | ||
| 14 | - //slideModel | ||
| 15 | - var _slideModel : CNLiveDownSlideModel? | ||
| 16 | - var slideModel : CNLiveDownSlideModel? { | ||
| 17 | - get{ | ||
| 18 | - _slideModel | ||
| 19 | - } | ||
| 20 | - set{ | ||
| 21 | - _slideModel = newValue! | ||
| 22 | - } | ||
| 23 | - } | ||
| 24 | - | ||
| 25 | - var dismissClosure: (()->())? | ||
| 26 | - //the point when start to interactive | ||
| 27 | - var interactiveStartingPoint: CGPoint? = nil | ||
| 28 | - var draggingDownToDismiss = false | ||
| 29 | - let cell: CNDownSlideSingleCourseCell! | ||
| 30 | - | ||
| 31 | - private lazy var dismissPanGesture: UIPanGestureRecognizer = { | ||
| 32 | - let ges = UIPanGestureRecognizer() | ||
| 33 | - ges.maximumNumberOfTouches = 1 | ||
| 34 | - ges.addTarget(self, action: #selector(handleDismissPan(gesture:))) | ||
| 35 | - ges.delegate = self | ||
| 36 | - return ges | ||
| 37 | - }() | ||
| 38 | - | ||
| 39 | - lazy var scrollView: CNUpSlideDetailScrollView = { | ||
| 40 | - let frame = self.view.bounds | ||
| 41 | - let view = CNUpSlideDetailScrollView(frame: frame) | ||
| 42 | - view.callBack = {(contentMdl:CNLiveDownSlideContentsModel)->Void in | ||
| 43 | - CNLiveDownSlideTool.detailPushWebVCWithContentsMdl(contentMdl: contentMdl, viewController: self) | ||
| 44 | - } | ||
| 45 | - view.delegate = self | ||
| 46 | - return view | ||
| 47 | - }() | ||
| 48 | - | ||
| 49 | - lazy var closeBtn: UIButton = { | ||
| 50 | - let btn = UIButton() | ||
| 51 | - btn.frame = CGRect(x: KSreenWidth - 20 - 30, y: KStatusBarHeight+20, width: 30, height: 30) | ||
| 52 | - btn.setImage(#imageLiteral(resourceName: "close_button"), for: .normal) | ||
| 53 | - btn.addTarget(self, action: #selector(closeAction), for: .touchUpInside) | ||
| 54 | - return btn | ||
| 55 | - }() | ||
| 56 | - init(cell: CNDownSlideSingleCourseCell,slideModel:CNLiveDownSlideModel) { | ||
| 57 | - self.pageNum = 1 | ||
| 58 | - self.cell = cell | ||
| 59 | - super.init(nibName: nil, bundle: nil) | ||
| 60 | - self.slideModel = slideModel | ||
| 61 | - self.setupTranstion() | ||
| 62 | - setNeedsStatusBarAppearanceUpdate() | ||
| 63 | - | ||
| 64 | - } | ||
| 65 | - | ||
| 66 | - private func setupTranstion() { | ||
| 67 | - modalPresentationStyle = .custom | ||
| 68 | - transitioningDelegate = self | ||
| 69 | - } | ||
| 70 | - | ||
| 71 | - required init?(coder aDecoder: NSCoder) { | ||
| 72 | - fatalError("init(coder:) has not been implemented") | ||
| 73 | - } | ||
| 74 | - override func viewDidLoad() { | ||
| 75 | - super.viewDidLoad() | ||
| 76 | - setupUI() | ||
| 77 | - getImageFromCell() | ||
| 78 | - self.getBlockContents(page: 1) | ||
| 79 | - } | ||
| 80 | - | ||
| 81 | - private func setupUI() { | ||
| 82 | - self.view.layer.masksToBounds = true | ||
| 83 | -// view.addSubview(scrollView) | ||
| 84 | -// scrollView.slideModel = _slideModel | ||
| 85 | - self.view.addSubview(self.tableView) | ||
| 86 | - self.tableView.frame = CGRect(x: 0, y: 0, width: KSreenWidth, height: KSreenHeight) | ||
| 87 | - view.addSubview(closeBtn) | ||
| 88 | - view.addGestureRecognizer(dismissPanGesture) | ||
| 89 | - | ||
| 90 | - if #available(iOS 11.0, *) { | ||
| 91 | - scrollView.contentInsetAdjustmentBehavior = .never | ||
| 92 | - } else { | ||
| 93 | - automaticallyAdjustsScrollViewInsets = false | ||
| 94 | - } | ||
| 95 | - } | ||
| 96 | - | ||
| 97 | - private func getImageFromCell() { | ||
| 98 | - scrollView.imageView.image = cell.bgImageView.image | ||
| 99 | - } | ||
| 100 | - @objc private func closeAction() { | ||
| 101 | - dismiss(animated: true, completion: nil) | ||
| 102 | - let nav = self.navigationController as! CNHomePageBaseNavigationController | ||
| 103 | - nav.dismissClosure?() | ||
| 104 | - } | ||
| 105 | - @objc private func handleDismissPan(gesture: UIPanGestureRecognizer) { | ||
| 106 | - if !draggingDownToDismiss { | ||
| 107 | - return | ||
| 108 | - } | ||
| 109 | - | ||
| 110 | - let startingPoint: CGPoint | ||
| 111 | - | ||
| 112 | - if let p = interactiveStartingPoint { | ||
| 113 | - startingPoint = p | ||
| 114 | - } else { | ||
| 115 | - startingPoint = gesture.location(in: nil) | ||
| 116 | - interactiveStartingPoint = startingPoint | ||
| 117 | - } | ||
| 118 | - | ||
| 119 | - let currentLocation = gesture.location(in: nil) | ||
| 120 | - | ||
| 121 | - var progress = (currentLocation.y - startingPoint.y) / 100 | ||
| 122 | - | ||
| 123 | - //prevent viewController bigger when scrolling up | ||
| 124 | - if currentLocation.y <= startingPoint.y { | ||
| 125 | - progress = 0 | ||
| 126 | - } | ||
| 127 | - | ||
| 128 | - if progress >= 1.0 { | ||
| 129 | - dismiss(animated: true, completion: nil) | ||
| 130 | - let nav = self.navigationController as! CNHomePageBaseNavigationController | ||
| 131 | - nav.dismissClosure?() | ||
| 132 | -// dismissClosure?() | ||
| 133 | - stopDismissPanGesture(gesture) | ||
| 134 | - return | ||
| 135 | - } | ||
| 136 | - | ||
| 137 | - let targetShrinkScale: CGFloat = 0.86 | ||
| 138 | - let currentScale: CGFloat = 1 - (1 - targetShrinkScale) * progress | ||
| 139 | - | ||
| 140 | - switch gesture.state { | ||
| 141 | - case .began,.changed: | ||
| 142 | - scrollView.isScrollEnabled = false | ||
| 143 | - gesture.view?.transform = CGAffineTransform(scaleX: currentScale, y: currentScale) | ||
| 144 | - gesture.view?.layer.cornerRadius = GlobalConstants.toDayCardCornerRadius * (progress) | ||
| 145 | - scrollView.showsVerticalScrollIndicator = false | ||
| 146 | - case .cancelled,.ended: | ||
| 147 | - scrollView.isScrollEnabled = true | ||
| 148 | - stopDismissPanGesture(gesture) | ||
| 149 | - default: | ||
| 150 | - break | ||
| 151 | - } | ||
| 152 | - } | ||
| 153 | - | ||
| 154 | - //当下拉Offset超过100或取消下拉手势时,执行此方法 | ||
| 155 | - private func stopDismissPanGesture(_ gesture: UIPanGestureRecognizer) { | ||
| 156 | - draggingDownToDismiss = false | ||
| 157 | - interactiveStartingPoint = nil | ||
| 158 | - scrollView.showsVerticalScrollIndicator = true | ||
| 159 | - | ||
| 160 | - UIView.animate(withDuration: 0.2) { | ||
| 161 | - gesture.view?.transform = CGAffineTransform.identity | ||
| 162 | - } | ||
| 163 | - } | ||
| 164 | - | ||
| 165 | - | ||
| 166 | - | ||
| 167 | - | ||
| 168 | - let kCNLiveAlbumImageCellIdentifier = "kCNLiveAlbumImageCellIdentifier" | ||
| 169 | - let kCNLiveAlbumCellIdentifier = "kCNLiveAlbumCellIdentifier" | ||
| 170 | - | ||
| 171 | - var pageNum: NSInteger | ||
| 172 | - var network_type: CNLiveMineResponseType! | ||
| 173 | - // MARK: - 懒加载 | ||
| 174 | - ///数据源 | ||
| 175 | - lazy var dataArray: NSMutableArray = { | ||
| 176 | - var dataArray = NSMutableArray() | ||
| 177 | - return dataArray | ||
| 178 | - }() | ||
| 179 | - lazy var tableView : UITableView = { | ||
| 180 | - let tableView = UITableView(frame: .zero, style: .plain) | ||
| 181 | - tableView.dataSource = self | ||
| 182 | - tableView.delegate = self | ||
| 183 | - tableView.emptyDataSetSource = self | ||
| 184 | - tableView.emptyDataSetDelegate = self | ||
| 185 | - tableView.separatorStyle = .none | ||
| 186 | - tableView.tableFooterView = UIView.init() | ||
| 187 | - tableView.register(CNLiveAlbumCell.self, forCellReuseIdentifier: kCNLiveAlbumCellIdentifier) | ||
| 188 | - tableView.register(CNLiveAlbumImageCell.self, forCellReuseIdentifier: kCNLiveAlbumImageCellIdentifier) | ||
| 189 | - return tableView | ||
| 190 | - }() | ||
| 191 | - | ||
| 192 | - | ||
| 193 | - func numberOfSections(in tableView: UITableView) -> Int { | ||
| 194 | - 2 | ||
| 195 | - } | ||
| 196 | - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | ||
| 197 | - if section == 0{ | ||
| 198 | - return 1 | ||
| 199 | - }else{ | ||
| 200 | - return self.dataArray.count | ||
| 201 | - } | ||
| 202 | - } | ||
| 203 | - | ||
| 204 | - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ||
| 205 | - | ||
| 206 | - if indexPath.section == 0{ | ||
| 207 | - guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumImageCellIdentifier) as? CNLiveAlbumImageCell | ||
| 208 | - else { | ||
| 209 | - let cell = CNLiveAlbumImageCell() | ||
| 210 | - return cell | ||
| 211 | - } | ||
| 212 | - cell.iconImgView.image = self.cell.bgImageView.image | ||
| 213 | - return cell | ||
| 214 | - }else{ | ||
| 215 | - let albumModel = self.dataArray[indexPath.row] as! CNLiveAlbumModel | ||
| 216 | - | ||
| 217 | - guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumCellIdentifier) as? CNLiveAlbumCell | ||
| 218 | - else { | ||
| 219 | - let cell = CNLiveAlbumCell() | ||
| 220 | - return cell | ||
| 221 | - } | ||
| 222 | - cell.albumModel = albumModel | ||
| 223 | - return cell | ||
| 224 | - } | ||
| 225 | - } | ||
| 226 | - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | ||
| 227 | - if indexPath.section == 0{ | ||
| 228 | - return KSreenWidth | ||
| 229 | - }else{ | ||
| 230 | - return 75 | ||
| 231 | - } | ||
| 232 | - } | ||
| 233 | - | ||
| 234 | - // MARK: - 获取全部专辑列表 | ||
| 235 | - func getBlockContents(page:NSInteger){ | ||
| 236 | - showLoading(message: "") | ||
| 237 | - CNLiveHomePageViewModel.getBlockContents(blockId: self.slideModel!.blockId ?? "", page: page) {[weak self] result, status in | ||
| 238 | - hiddenLoading() | ||
| 239 | - if status == .success{ | ||
| 240 | - if self!.pageNum > 1 { | ||
| 241 | - self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel]) | ||
| 242 | - } | ||
| 243 | - if self!.pageNum == 1 { | ||
| 244 | - self!.dataArray.removeAllObjects() | ||
| 245 | - self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel]) | ||
| 246 | - if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil { | ||
| 247 | - self!.addRefreshView() | ||
| 248 | - self!.pageNum = self!.pageNum + 1 | ||
| 249 | - self!.getBlockContents(page: self!.pageNum) | ||
| 250 | - } | ||
| 251 | - } | ||
| 252 | - | ||
| 253 | - self!.tableView.mj_header?.endRefreshing() | ||
| 254 | - self!.tableView.mj_footer?.endRefreshing() | ||
| 255 | - self!.tableView.reloadData() | ||
| 256 | - if (result as! Array<Any>).count == 0 { | ||
| 257 | - self!.tableView.mj_footer?.endRefreshingWithNoMoreData() | ||
| 258 | - self!.tableView.reloadData() | ||
| 259 | - } | ||
| 260 | - | ||
| 261 | - }else if (status == .noNetwork) { | ||
| 262 | - self!.network_type = .noNetwork | ||
| 263 | - self!.tableView.reloadEmptyDataSet() | ||
| 264 | - } else { | ||
| 265 | - self!.network_type = .failed | ||
| 266 | - self!.tableView.reloadEmptyDataSet() | ||
| 267 | - } | ||
| 268 | - } | ||
| 269 | - } | ||
| 270 | - func addRefreshView() { | ||
| 271 | - tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in | ||
| 272 | - self!.pageNum = 1 | ||
| 273 | - self!.getBlockContents(page: 1) | ||
| 274 | - }) | ||
| 275 | - | ||
| 276 | - tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in | ||
| 277 | - self!.pageNum = self!.pageNum + 1 | ||
| 278 | - self!.getBlockContents(page: self!.pageNum) | ||
| 279 | - }) | ||
| 280 | - } | ||
| 281 | -} | ||
| 282 | - | ||
| 283 | -extension CNHomepageDetailViewController: UIViewControllerTransitioningDelegate { | ||
| 284 | - | ||
| 285 | - func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { | ||
| 286 | - return CNHomePageAnimationTransition(animationType: .present) | ||
| 287 | - } | ||
| 288 | - | ||
| 289 | - func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { | ||
| 290 | - return CNHomePageAnimationTransition(animationType: .dismiss) | ||
| 291 | - } | ||
| 292 | - | ||
| 293 | - func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { | ||
| 294 | - return CNUpSlideCardPresentationController(presentedViewController: presented, presenting: presenting) | ||
| 295 | - } | ||
| 296 | -} | ||
| 297 | - | ||
| 298 | -extension CNHomepageDetailViewController: UIScrollViewDelegate { | ||
| 299 | - func scrollViewDidScroll(_ scrollView: UIScrollView) { | ||
| 300 | - | ||
| 301 | - if scrollView.contentOffset.y < 0 { | ||
| 302 | - scrollView.contentOffset = .zero | ||
| 303 | - draggingDownToDismiss = true | ||
| 304 | - } | ||
| 305 | - } | ||
| 306 | -} | ||
| 307 | - | ||
| 308 | -extension CNHomepageDetailViewController: UIGestureRecognizerDelegate { | ||
| 309 | - func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { | ||
| 310 | - return true | ||
| 311 | - } | ||
| 312 | -} | ||
| 313 | - | ||
| 314 | -extension CNHomepageDetailViewController { | ||
| 315 | - | ||
| 316 | - func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? { | ||
| 317 | - if network_type == .failed || network_type == .unkonw { | ||
| 318 | - return UIImage(named: "mine_list_source_unusual_failed") | ||
| 319 | - } | ||
| 320 | - if dataArray.count == 0 { | ||
| 321 | - return UIImage(named: "mine_list_source_unusual_empty") | ||
| 322 | - } | ||
| 323 | - if network_type == .noNetwork { | ||
| 324 | - return UIImage(named: "mine_list_source_unusual_noNet") | ||
| 325 | - } | ||
| 326 | - return UIImage(named: "mine_list_source_unusual_empty") | ||
| 327 | - } | ||
| 328 | - | ||
| 329 | - func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { | ||
| 330 | - var defult_string = "" | ||
| 331 | - if network_type == .failed || network_type == .unkonw { | ||
| 332 | - defult_string = "接口请求错误,刷新试试~" | ||
| 333 | - } | ||
| 334 | - if network_type == .noNetwork { | ||
| 335 | - defult_string = "网络开小差了,刷新试试~" | ||
| 336 | - } | ||
| 337 | - if dataArray.count == 0 { | ||
| 338 | - defult_string = "暂时没有数据~" | ||
| 339 | - } | ||
| 340 | - return NSAttributedString(string: defult_string, attributes: [.font: Font_17,.foregroundColor: HexColor("#666666")!]) | ||
| 341 | - } | ||
| 342 | - | ||
| 343 | - func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString? { | ||
| 344 | - if network_type == .failed || network_type == .noNetwork { | ||
| 345 | - let attributes = [NSAttributedString.Key.font:Font_16_Fit, | ||
| 346 | - NSAttributedString.Key.foregroundColor: HexColor("#609BFF")] | ||
| 347 | - return NSAttributedString(string: "刷一刷", attributes: attributes as [NSAttributedString.Key : Any]) | ||
| 348 | - } | ||
| 349 | - return nil | ||
| 350 | - } | ||
| 351 | - | ||
| 352 | - func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) { | ||
| 353 | - if network_type == .failed || network_type == .noNetwork { | ||
| 354 | - getBlockContents(page: 1) | ||
| 355 | - } | ||
| 356 | - } | ||
| 357 | -} | 12 | +//class CNHomepageDetailViewController: CNLiveBaseViewController ,UITableViewDataSource, UITableViewDelegate,EmptyDataSetSource, EmptyDataSetDelegate{ |
| 13 | +// | ||
| 14 | +// //slideModel | ||
| 15 | +// var _slideModel : CNLiveDownSlideModel? | ||
| 16 | +// var slideModel : CNLiveDownSlideModel? { | ||
| 17 | +// get{ | ||
| 18 | +// _slideModel | ||
| 19 | +// } | ||
| 20 | +// set{ | ||
| 21 | +// _slideModel = newValue! | ||
| 22 | +// } | ||
| 23 | +// } | ||
| 24 | +// | ||
| 25 | +// var dismissClosure: (()->())? | ||
| 26 | +// //the point when start to interactive | ||
| 27 | +// var interactiveStartingPoint: CGPoint? = nil | ||
| 28 | +// var draggingDownToDismiss = false | ||
| 29 | +// let cell: CNDownSlideSingleCourseCell! | ||
| 30 | +// | ||
| 31 | +// private lazy var dismissPanGesture: UIPanGestureRecognizer = { | ||
| 32 | +// let ges = UIPanGestureRecognizer() | ||
| 33 | +// ges.maximumNumberOfTouches = 1 | ||
| 34 | +// ges.addTarget(self, action: #selector(handleDismissPan(gesture:))) | ||
| 35 | +// ges.delegate = self | ||
| 36 | +// return ges | ||
| 37 | +// }() | ||
| 38 | +// | ||
| 39 | +// lazy var scrollView: CNUpSlideDetailScrollView = { | ||
| 40 | +// let frame = self.view.bounds | ||
| 41 | +// let view = CNUpSlideDetailScrollView(frame: frame) | ||
| 42 | +// view.callBack = {(contentMdl:CNLiveDownSlideContentsModel)->Void in | ||
| 43 | +// CNLiveDownSlideTool.detailPushWebVCWithContentsMdl(contentMdl: contentMdl, viewController: self) | ||
| 44 | +// } | ||
| 45 | +// view.delegate = self | ||
| 46 | +// return view | ||
| 47 | +// }() | ||
| 48 | +// | ||
| 49 | +// lazy var closeBtn: UIButton = { | ||
| 50 | +// let btn = UIButton() | ||
| 51 | +// btn.frame = CGRect(x: KSreenWidth - 20 - 30, y: KStatusBarHeight+20, width: 30, height: 30) | ||
| 52 | +// btn.setImage(#imageLiteral(resourceName: "close_button"), for: .normal) | ||
| 53 | +// btn.addTarget(self, action: #selector(closeAction), for: .touchUpInside) | ||
| 54 | +// return btn | ||
| 55 | +// }() | ||
| 56 | +// init(cell: CNDownSlideSingleCourseCell,slideModel:CNLiveDownSlideModel) { | ||
| 57 | +// self.pageNum = 1 | ||
| 58 | +// self.cell = cell | ||
| 59 | +// super.init(nibName: nil, bundle: nil) | ||
| 60 | +// self.slideModel = slideModel | ||
| 61 | +// self.setupTranstion() | ||
| 62 | +// setNeedsStatusBarAppearanceUpdate() | ||
| 63 | +// | ||
| 64 | +// } | ||
| 65 | +// | ||
| 66 | +// private func setupTranstion() { | ||
| 67 | +// modalPresentationStyle = .custom | ||
| 68 | +// transitioningDelegate = self | ||
| 69 | +// } | ||
| 70 | +// | ||
| 71 | +// required init?(coder aDecoder: NSCoder) { | ||
| 72 | +// fatalError("init(coder:) has not been implemented") | ||
| 73 | +// } | ||
| 74 | +// override func viewDidLoad() { | ||
| 75 | +// super.viewDidLoad() | ||
| 76 | +// setupUI() | ||
| 77 | +// getImageFromCell() | ||
| 78 | +// self.getBlockContents(page: 1) | ||
| 79 | +// } | ||
| 80 | +// | ||
| 81 | +// private func setupUI() { | ||
| 82 | +// self.view.layer.masksToBounds = true | ||
| 83 | +//// view.addSubview(scrollView) | ||
| 84 | +//// scrollView.slideModel = _slideModel | ||
| 85 | +// self.view.addSubview(self.tableView) | ||
| 86 | +// self.tableView.frame = CGRect(x: 0, y: 0, width: KSreenWidth, height: KSreenHeight) | ||
| 87 | +// view.addSubview(closeBtn) | ||
| 88 | +// view.addGestureRecognizer(dismissPanGesture) | ||
| 89 | +// | ||
| 90 | +// if #available(iOS 11.0, *) { | ||
| 91 | +// scrollView.contentInsetAdjustmentBehavior = .never | ||
| 92 | +// } else { | ||
| 93 | +// automaticallyAdjustsScrollViewInsets = false | ||
| 94 | +// } | ||
| 95 | +// } | ||
| 96 | +// | ||
| 97 | +// private func getImageFromCell() { | ||
| 98 | +// scrollView.imageView.image = cell.bgImageView.image | ||
| 99 | +// } | ||
| 100 | +// @objc private func closeAction() { | ||
| 101 | +// dismiss(animated: true, completion: nil) | ||
| 102 | +// let nav = self.navigationController as! CNHomePageBaseNavigationController | ||
| 103 | +// nav.dismissClosure?() | ||
| 104 | +// } | ||
| 105 | +// @objc private func handleDismissPan(gesture: UIPanGestureRecognizer) { | ||
| 106 | +// if !draggingDownToDismiss { | ||
| 107 | +// return | ||
| 108 | +// } | ||
| 109 | +// | ||
| 110 | +// let startingPoint: CGPoint | ||
| 111 | +// | ||
| 112 | +// if let p = interactiveStartingPoint { | ||
| 113 | +// startingPoint = p | ||
| 114 | +// } else { | ||
| 115 | +// startingPoint = gesture.location(in: nil) | ||
| 116 | +// interactiveStartingPoint = startingPoint | ||
| 117 | +// } | ||
| 118 | +// | ||
| 119 | +// let currentLocation = gesture.location(in: nil) | ||
| 120 | +// | ||
| 121 | +// var progress = (currentLocation.y - startingPoint.y) / 100 | ||
| 122 | +// | ||
| 123 | +// //prevent viewController bigger when scrolling up | ||
| 124 | +// if currentLocation.y <= startingPoint.y { | ||
| 125 | +// progress = 0 | ||
| 126 | +// } | ||
| 127 | +// | ||
| 128 | +// if progress >= 1.0 { | ||
| 129 | +// dismiss(animated: true, completion: nil) | ||
| 130 | +// let nav = self.navigationController as! CNHomePageBaseNavigationController | ||
| 131 | +// nav.dismissClosure?() | ||
| 132 | +//// dismissClosure?() | ||
| 133 | +// stopDismissPanGesture(gesture) | ||
| 134 | +// return | ||
| 135 | +// } | ||
| 136 | +// | ||
| 137 | +// let targetShrinkScale: CGFloat = 0.86 | ||
| 138 | +// let currentScale: CGFloat = 1 - (1 - targetShrinkScale) * progress | ||
| 139 | +// | ||
| 140 | +// switch gesture.state { | ||
| 141 | +// case .began,.changed: | ||
| 142 | +// scrollView.isScrollEnabled = false | ||
| 143 | +// gesture.view?.transform = CGAffineTransform(scaleX: currentScale, y: currentScale) | ||
| 144 | +// gesture.view?.layer.cornerRadius = GlobalConstants.toDayCardCornerRadius * (progress) | ||
| 145 | +// scrollView.showsVerticalScrollIndicator = false | ||
| 146 | +// case .cancelled,.ended: | ||
| 147 | +// scrollView.isScrollEnabled = true | ||
| 148 | +// stopDismissPanGesture(gesture) | ||
| 149 | +// default: | ||
| 150 | +// break | ||
| 151 | +// } | ||
| 152 | +// } | ||
| 153 | +// | ||
| 154 | +// //当下拉Offset超过100或取消下拉手势时,执行此方法 | ||
| 155 | +// private func stopDismissPanGesture(_ gesture: UIPanGestureRecognizer) { | ||
| 156 | +// draggingDownToDismiss = false | ||
| 157 | +// interactiveStartingPoint = nil | ||
| 158 | +// scrollView.showsVerticalScrollIndicator = true | ||
| 159 | +// | ||
| 160 | +// UIView.animate(withDuration: 0.2) { | ||
| 161 | +// gesture.view?.transform = CGAffineTransform.identity | ||
| 162 | +// } | ||
| 163 | +// } | ||
| 164 | +// | ||
| 165 | +// | ||
| 166 | +// | ||
| 167 | +// | ||
| 168 | +// let kCNLiveAlbumImageCellIdentifier = "kCNLiveAlbumImageCellIdentifier" | ||
| 169 | +// let kCNLiveAlbumCellIdentifier = "kCNLiveAlbumCellIdentifier" | ||
| 170 | +// | ||
| 171 | +// var pageNum: NSInteger | ||
| 172 | +// var network_type: CNLiveMineResponseType! | ||
| 173 | +// // MARK: - 懒加载 | ||
| 174 | +// ///数据源 | ||
| 175 | +// lazy var dataArray: NSMutableArray = { | ||
| 176 | +// var dataArray = NSMutableArray() | ||
| 177 | +// return dataArray | ||
| 178 | +// }() | ||
| 179 | +// lazy var tableView : UITableView = { | ||
| 180 | +// let tableView = UITableView(frame: .zero, style: .plain) | ||
| 181 | +// tableView.dataSource = self | ||
| 182 | +// tableView.delegate = self | ||
| 183 | +// tableView.emptyDataSetSource = self | ||
| 184 | +// tableView.emptyDataSetDelegate = self | ||
| 185 | +// tableView.separatorStyle = .none | ||
| 186 | +// tableView.tableFooterView = UIView.init() | ||
| 187 | +// tableView.register(CNLiveAlbumCell.self, forCellReuseIdentifier: kCNLiveAlbumCellIdentifier) | ||
| 188 | +// tableView.register(CNLiveAlbumImageCell.self, forCellReuseIdentifier: kCNLiveAlbumImageCellIdentifier) | ||
| 189 | +// return tableView | ||
| 190 | +// }() | ||
| 191 | +// | ||
| 192 | +// | ||
| 193 | +// func numberOfSections(in tableView: UITableView) -> Int { | ||
| 194 | +// 2 | ||
| 195 | +// } | ||
| 196 | +// func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | ||
| 197 | +// if section == 0{ | ||
| 198 | +// return 1 | ||
| 199 | +// }else{ | ||
| 200 | +// return self.dataArray.count | ||
| 201 | +// } | ||
| 202 | +// } | ||
| 203 | +// | ||
| 204 | +// func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ||
| 205 | +// | ||
| 206 | +// if indexPath.section == 0{ | ||
| 207 | +// guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumImageCellIdentifier) as? CNLiveAlbumImageCell | ||
| 208 | +// else { | ||
| 209 | +// let cell = CNLiveAlbumImageCell() | ||
| 210 | +// return cell | ||
| 211 | +// } | ||
| 212 | +// cell.iconImgView.image = self.cell.bgImageView.image | ||
| 213 | +// return cell | ||
| 214 | +// }else{ | ||
| 215 | +// let albumModel = self.dataArray[indexPath.row] as! CNLiveAlbumModel | ||
| 216 | +// | ||
| 217 | +// guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumCellIdentifier) as? CNLiveAlbumCell | ||
| 218 | +// else { | ||
| 219 | +// let cell = CNLiveAlbumCell() | ||
| 220 | +// return cell | ||
| 221 | +// } | ||
| 222 | +// cell.albumModel = albumModel | ||
| 223 | +// return cell | ||
| 224 | +// } | ||
| 225 | +// } | ||
| 226 | +// func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | ||
| 227 | +// if indexPath.section == 0{ | ||
| 228 | +// return KSreenWidth | ||
| 229 | +// }else{ | ||
| 230 | +// return 75 | ||
| 231 | +// } | ||
| 232 | +// } | ||
| 233 | +// | ||
| 234 | +// // MARK: - 获取全部专辑列表 | ||
| 235 | +// func getBlockContents(page:NSInteger){ | ||
| 236 | +// showLoading(message: "") | ||
| 237 | +// CNLiveHomePageViewModel.getBlockContents(blockId: self.slideModel!.blockId ?? "", page: page) {[weak self] result, status in | ||
| 238 | +// hiddenLoading() | ||
| 239 | +// if status == .success{ | ||
| 240 | +// if self!.pageNum > 1 { | ||
| 241 | +// self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel]) | ||
| 242 | +// } | ||
| 243 | +// if self!.pageNum == 1 { | ||
| 244 | +// self!.dataArray.removeAllObjects() | ||
| 245 | +// self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel]) | ||
| 246 | +// if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil { | ||
| 247 | +// self!.addRefreshView() | ||
| 248 | +// self!.pageNum = self!.pageNum + 1 | ||
| 249 | +// self!.getBlockContents(page: self!.pageNum) | ||
| 250 | +// } | ||
| 251 | +// } | ||
| 252 | +// | ||
| 253 | +// self!.tableView.mj_header?.endRefreshing() | ||
| 254 | +// self!.tableView.mj_footer?.endRefreshing() | ||
| 255 | +// self!.tableView.reloadData() | ||
| 256 | +// if (result as! Array<Any>).count == 0 { | ||
| 257 | +// self!.tableView.mj_footer?.endRefreshingWithNoMoreData() | ||
| 258 | +// self!.tableView.reloadData() | ||
| 259 | +// } | ||
| 260 | +// | ||
| 261 | +// }else if (status == .noNetwork) { | ||
| 262 | +// self!.network_type = .noNetwork | ||
| 263 | +// self!.tableView.reloadEmptyDataSet() | ||
| 264 | +// } else { | ||
| 265 | +// self!.network_type = .failed | ||
| 266 | +// self!.tableView.reloadEmptyDataSet() | ||
| 267 | +// } | ||
| 268 | +// } | ||
| 269 | +// } | ||
| 270 | +// func addRefreshView() { | ||
| 271 | +// tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in | ||
| 272 | +// self!.pageNum = 1 | ||
| 273 | +// self!.getBlockContents(page: 1) | ||
| 274 | +// }) | ||
| 275 | +// | ||
| 276 | +// tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in | ||
| 277 | +// self!.pageNum = self!.pageNum + 1 | ||
| 278 | +// self!.getBlockContents(page: self!.pageNum) | ||
| 279 | +// }) | ||
| 280 | +// } | ||
| 281 | +//} | ||
| 282 | +// | ||
| 283 | +//extension CNHomepageDetailViewController: UIViewControllerTransitioningDelegate { | ||
| 284 | +// | ||
| 285 | +// func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { | ||
| 286 | +// return CNHomePageAnimationTransition(animationType: .present) | ||
| 287 | +// } | ||
| 288 | +// | ||
| 289 | +// func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { | ||
| 290 | +// return CNHomePageAnimationTransition(animationType: .dismiss) | ||
| 291 | +// } | ||
| 292 | +// | ||
| 293 | +// func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { | ||
| 294 | +// return CNUpSlideCardPresentationController(presentedViewController: presented, presenting: presenting) | ||
| 295 | +// } | ||
| 296 | +//} | ||
| 297 | +// | ||
| 298 | +//extension CNHomepageDetailViewController: UIScrollViewDelegate { | ||
| 299 | +// func scrollViewDidScroll(_ scrollView: UIScrollView) { | ||
| 300 | +// | ||
| 301 | +// if scrollView.contentOffset.y < 0 { | ||
| 302 | +// scrollView.contentOffset = .zero | ||
| 303 | +// draggingDownToDismiss = true | ||
| 304 | +// } | ||
| 305 | +// } | ||
| 306 | +//} | ||
| 307 | +// | ||
| 308 | +//extension CNHomepageDetailViewController: UIGestureRecognizerDelegate { | ||
| 309 | +// func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { | ||
| 310 | +// return true | ||
| 311 | +// } | ||
| 312 | +//} | ||
| 313 | +// | ||
| 314 | +//extension CNHomepageDetailViewController { | ||
| 315 | +// | ||
| 316 | +// func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? { | ||
| 317 | +// if network_type == .failed || network_type == .unkonw { | ||
| 318 | +// return UIImage(named: "mine_list_source_unusual_failed") | ||
| 319 | +// } | ||
| 320 | +// if dataArray.count == 0 { | ||
| 321 | +// return UIImage(named: "mine_list_source_unusual_empty") | ||
| 322 | +// } | ||
| 323 | +// if network_type == .noNetwork { | ||
| 324 | +// return UIImage(named: "mine_list_source_unusual_noNet") | ||
| 325 | +// } | ||
| 326 | +// return UIImage(named: "mine_list_source_unusual_empty") | ||
| 327 | +// } | ||
| 328 | +// | ||
| 329 | +// func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { | ||
| 330 | +// var defult_string = "" | ||
| 331 | +// if network_type == .failed || network_type == .unkonw { | ||
| 332 | +// defult_string = "接口请求错误,刷新试试~" | ||
| 333 | +// } | ||
| 334 | +// if network_type == .noNetwork { | ||
| 335 | +// defult_string = "网络开小差了,刷新试试~" | ||
| 336 | +// } | ||
| 337 | +// if dataArray.count == 0 { | ||
| 338 | +// defult_string = "暂时没有数据~" | ||
| 339 | +// } | ||
| 340 | +// return NSAttributedString(string: defult_string, attributes: [.font: Font_17,.foregroundColor: HexColor("#666666")!]) | ||
| 341 | +// } | ||
| 342 | +// | ||
| 343 | +// func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString? { | ||
| 344 | +// if network_type == .failed || network_type == .noNetwork { | ||
| 345 | +// let attributes = [NSAttributedString.Key.font:Font_16_Fit, | ||
| 346 | +// NSAttributedString.Key.foregroundColor: HexColor("#609BFF")] | ||
| 347 | +// return NSAttributedString(string: "刷一刷", attributes: attributes as [NSAttributedString.Key : Any]) | ||
| 348 | +// } | ||
| 349 | +// return nil | ||
| 350 | +// } | ||
| 351 | +// | ||
| 352 | +// func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) { | ||
| 353 | +// if network_type == .failed || network_type == .noNetwork { | ||
| 354 | +// getBlockContents(page: 1) | ||
| 355 | +// } | ||
| 356 | +// } | ||
| 357 | +//} |