时间:2021-05-20
废话不多说直接上代码:
这个功能应该是挺常见的, 一个tableView到另一个tableView, 类似segment的一个东西, 我把它封装起来了:
这个很容易看懂的, 是不是, 就不在这里多解释.
上面这张呢, 则是把导航栏隐藏, 自定义一个小UIView截取网络图片作为导航栏, 又自定义一个大View作为tableView头视图.并且我还运用了观察者注册消息通知, 代码有点长, 不过我写注释了哦, 可以看懂的.
//// BookMarksViewController.m// HotTopic//// Created by dllo on 16/9/7.// Copyright © 2016年 高雅馨. All rights reserved.//#import "BookMarksViewController.h"#import "HTMacro.h"#import "UIView+Extension.h"#import "BookTableViewCell.h"#import "EssayViewController.h"#import "SubscriberViewController.h"#import "UMSocial.h"#import "DCNavTabBarController.h"#import "UIImageView+WebCache.h"#import "AFNetworking.h"#import "HotTopicsModel.h"#import "TopicModel.h"#import "NodeModel.h"#import "UserModel.h"#import "Source.h"#import "DisposeViewController.h"#import "HeadImageView.h"static CGFloat const headViewHeight = 280;@interface BookMarksViewController ()<UITableViewDelegate,UITableViewDataSource>@property (nonatomic, strong) BookTableViewCell * mainTableView;@property (nonatomic, strong) HeadImageView * headImageView;//头部图片@property (nonatomic, strong) UIImageView * avatarImage;@property (nonatomic, strong) UILabel * countentLabel;@property (nonatomic, strong) UIImageView *img;@property (nonatomic, strong) HotTopicsModel *hotTopic;@property (nonatomic, strong) UILabel *titleLabel;@property (nonatomic, assign) BOOL canScroll;@property (nonatomic, assign) BOOL isTopIsCanNotMoveTabView;@property (nonatomic, assign) BOOL isTopIsCanNotMoveTabViewPre;@property (nonatomic, strong) UIView *barView;@property (nonatomic, strong) UILabel *titleText;@end@implementation BookMarksViewController@synthesize mainTableView;- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES];}- (void)viewDidLoad { [super viewDidLoad];// 这个api功能就是在NavigationController堆栈内的UIViewController可以支持右滑手势,也就是不用点击右上角的返回按钮,轻轻在屏幕左边一滑,屏幕就会返回,随着ios设备屏幕的增大,这个小功能让手指短,拇指大和手残人士看到了福音。 self.navigationController.interactivePopGestureRecognizer.delegate = (id)self; [self.navigationController setNavigationBarHidden:YES]; self.automaticallyAdjustsScrollViewInsets = NO; [self.view addSubview:self.mainTableView]; // 设置tableView头视图 self.mainTableView.tableHeaderView = self.headImageView; // 将导航栏隐藏使其变为透明 [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; // 将导航栏那条黑线隐藏 [self.navigationController.navigationBar setShadowImage:[UIImage new]]; /** 观察者注册消息通知 */ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(leaveTop:) name:@"leaveTop" object:nil]; [self creatView];}// 把导航栏写成自定义View- (void)creatView { _barView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 64)]; UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; backButton.frame = CGRectMake(10, 30, 30, 30); [backButton setImage:[UIImage imageNamed:@"backBar"] forState:UIControlStateNormal]; [backButton addTarget:self action:@selector(clickBackBtn:) forControlEvents:UIControlEventTouchUpInside]; UIButton *shareBtn = [UIButton buttonWithType:UIButtonTypeCustom]; shareBtn.frame = CGRectMake(SCREEN_WIDTH - 50, 30, 30, 30); [shareBtn setImage:[UIImage imageNamed:@"shareBar"] forState:UIControlStateNormal]; [shareBtn addTarget:self action:@selector(clickShareBtn:) forControlEvents:UIControlEventTouchUpInside]; _titleText = [[UILabel alloc] initWithFrame:CGRectMake(50, 30, SCREEN_WIDTH - 100, 30)]; _titleText.text = @"收藏夹"; _titleText.textAlignment = 1; _titleText.textColor = [UIColor whiteColor]; // 毛玻璃效果 UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]; UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; effectview.backgroundColor = [UIColor colorWithWhite:0.508 alpha:1.000]; effectview.alpha = 0.65; effectview.frame = CGRectMake(0, 0, SCREEN_WIDTH, 64); [_barView addSubview:effectview]; [_barView addSubview:backButton]; [_barView addSubview:shareBtn]; [_barView addSubview:_titleText]; [self.view addSubview:_barView];}/** * notificationObserver 观察者 : self * notificationSelector 处理消息的方法名: getUserProfileSuccess * notificationName 消息通知的名字: Notification_GetUserProfileSuccess * notificationSender 消息发送者 : 表示接收哪个发送者的通知,如果第四个参数为nil,接收所有发送者的通知 */- (void)leaveTop:(NSNotification *)notification{ NSDictionary *userInfo = notification.userInfo; NSString *canScroll = userInfo[@"canScroll"]; if ([canScroll isEqualToString:@"1"]) { _canScroll = YES; }}/** 将自定义View的背景图设置tableView头视图的背景图*/- (UIImage *)clipImageInOffsetY:(CGFloat)y{ if (_headImageView.image == nil) { return [UIImage new]; } CGRect rect = CGRectMake(0, y, SCREEN_WIDTH, 64); CGImageRef imageRef = CGImageCreateWithImageInRect([_headImageView.image CGImage], rect); self.blurView.frame = CGRectMake(0, 0, SCREEN_WIDTH, 64); self.blurView.alpha = 0.7; [self.navigationController.navigationBar addSubview:_blurView]; UIImage *thumbScale = [UIImage imageWithCGImage:imageRef]; return thumbScale;}// 用scrollView的偏移量来判断- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat yOffset = scrollView.contentOffset.y; if (yOffset >= _headImageView.height - 64) { yOffset = _headImageView.height - 64; } UIImage *image = [self clipImageInOffsetY:yOffset]; _barView.backgroundColor = [UIColor colorWithPatternImage:image]; //获取滚动视图y值的偏移量 self.navigationController.navigationBar.alpha = (headViewHeight+yOffset)/(headViewHeight-64); CGFloat tabOffsetY = [mainTableView rectForSection:0].origin.y - 64.0f; CGFloat offsetY = scrollView.contentOffset.y; _isTopIsCanNotMoveTabViewPre = _isTopIsCanNotMoveTabView; if (offsetY >= tabOffsetY) { //不能滑动 scrollView.contentOffset = CGPointMake(0, tabOffsetY); _isTopIsCanNotMoveTabView = YES; _titleText.text = self.urlTitle; }else{ //可以滑动 _isTopIsCanNotMoveTabView = NO; _titleText.text = @"收藏夹"; } if (_isTopIsCanNotMoveTabView != _isTopIsCanNotMoveTabViewPre) { if (!_isTopIsCanNotMoveTabViewPre && _isTopIsCanNotMoveTabView) { [[NSNotificationCenter defaultCenter] postNotificationName:@"goTop" object:nil userInfo:@{@"canScroll":@"1"}]; _canScroll = NO; } if(_isTopIsCanNotMoveTabViewPre && !_isTopIsCanNotMoveTabView){ if (!_canScroll) { scrollView.contentOffset = CGPointMake(0, tabOffsetY); } } }}// 头视图- (UIImageView *)headImageView{ if (_headImageView == nil) { _headImageView = [[HeadImageView alloc]initWithFrame:CGRectMake(0, 0,SCREEN_WIDTH,headViewHeight)]; _headImageView.userInteractionEnabled = YES; [_headImageView sd_setImageWithURL:[NSURL URLWithString:self.urlHeadImg] placeholderImage:[UIImage imageNamed:@"touxiang"]completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { }]; UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]; UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur]; effectview.backgroundColor = [UIColor colorWithWhite:0.508 alpha:1.000]; effectview.alpha = 0.7; effectview.frame = CGRectMake(0, 0, SCREEN_WIDTH, headViewHeight); [_headImageView addSubview:effectview]; self.navigationController.hidesBarsOnSwipe = NO; _avatarImage = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20 + 64, SCREEN_WIDTH / 3.3, SCREEN_WIDTH / 3.3)]; [_headImageView addSubview:_avatarImage]; _avatarImage.userInteractionEnabled = YES; _avatarImage.layer.masksToBounds = YES; [ _avatarImage sd_setImageWithURL:[NSURL URLWithString:self.urlHeadImg] placeholderImage:[UIImage imageNamed:@"detailViewDefaultMidImage"]]; _countentLabel = [[UILabel alloc] initWithFrame:CGRectMake(_avatarImage.frame.size.width + 40, 20 + 64, SCREEN_WIDTH - (SCREEN_WIDTH / 3 + 20 + 10), _avatarImage.frame.size.height / 4)]; _countentLabel.font = [UIFont systemFontOfSize:15]; _countentLabel.textColor = [UIColor whiteColor]; _countentLabel.lineBreakMode = NSLineBreakByWordWrapping; _countentLabel.numberOfLines = 0; _countentLabel.text = self.urlTitle; [_headImageView addSubview:_countentLabel]; _img = [[UIImageView alloc] initWithFrame:CGRectMake(_countentLabel.frame.origin.x, _countentLabel.frame.size.height + _avatarImage.frame.origin.y + 10, 30, 30)]; _img.layer.cornerRadius = 15; _img.layer.masksToBounds = YES; _img.backgroundColor = [UIColor yellowColor]; [_headImageView addSubview:_img]; _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(_img.frame.size.width + _img.frame.origin.x + 5, _img.frame.origin.y, SCREEN_WIDTH / 1.9 , 30)]; _titleLabel.textColor = [UIColor whiteColor]; _titleLabel.lineBreakMode = NSLineBreakByWordWrapping; _titleLabel.numberOfLines = 0; _titleLabel.font = [UIFont systemFontOfSize:12]; [_headImageView addSubview:_titleLabel]; UILabel *contextLabel = [[UILabel alloc] initWithFrame:CGRectMake(_img.frame.origin.x , _img.frame.origin.y + _img.frame.size.height + 6, SCREEN_WIDTH / 2 , SCREEN_WIDTH / 8)]; contextLabel.textColor = [UIColor whiteColor]; contextLabel.text = self.urlContect; contextLabel.lineBreakMode = NSLineBreakByWordWrapping; contextLabel.numberOfLines = 0; contextLabel.font = [UIFont systemFontOfSize:12]; [_headImageView addSubview:contextLabel]; UIButton *takeBtn = [UIButton buttonWithType:UIButtonTypeSystem]; takeBtn.frame = CGRectMake(_img.frame.origin.x - 20 , contextLabel.frame.size.height + contextLabel.frame.origin.y + 10, SCREEN_WIDTH / 4, _avatarImage.frame.size.height / 3.2); [takeBtn setTitle:@"+ 订阅" forState:UIControlStateNormal]; [takeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; takeBtn.backgroundColor = [UIColor colorWithRed:1.00 green:0.36 blue:0.25 alpha:1.00]; takeBtn.titleLabel.font = [UIFont systemFontOfSize:14]; takeBtn.layer.cornerRadius = 10; [_headImageView addSubview:takeBtn]; UIButton *contributeBtn = [UIButton buttonWithType:UIButtonTypeSystem]; contributeBtn.frame = CGRectMake(takeBtn.frame.origin.x + takeBtn.frame.size.width + 5, contextLabel.frame.size.height + contextLabel.frame.origin.y + 10, SCREEN_WIDTH / 8, _avatarImage.frame.size.height / 3.2); [contributeBtn setTitle:@"投稿" forState:UIControlStateNormal]; [contributeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; contributeBtn.layer.borderWidth = 1.0; contributeBtn.titleLabel.font = [UIFont systemFontOfSize:14]; contributeBtn.layer.borderColor = [UIColor whiteColor].CGColor; contributeBtn.layer.cornerRadius = 5; [_headImageView addSubview:contributeBtn]; UIButton *manageLabel = [[UIButton alloc] initWithFrame:CGRectMake(contributeBtn.frame.size.width + contributeBtn.frame.origin.x, contributeBtn.frame.origin.y + 5, SCREEN_WIDTH / 5 , 30)]; [manageLabel setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [manageLabel setTitle:@"0未处理☞" forState:UIControlStateNormal]; manageLabel.titleLabel.textAlignment = 0; manageLabel.titleLabel.font = [UIFont systemFontOfSize:12]; [manageLabel addTarget:self action:@selector(clickManageBtn:) forControlEvents:UIControlEventTouchUpInside]; [_headImageView addSubview:manageLabel]; } return _headImageView;}// 大tableView-(UITableView *)mainTableView{ if (mainTableView == nil) { mainTableView= [[BookTableViewCell alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH,SCREEN_HEIGHT)]; mainTableView.delegate = self; mainTableView.dataSource=self; mainTableView.bounces = NO; mainTableView.separatorStyle = UITableViewCellSeparatorStyleNone; mainTableView.showsVerticalScrollIndicator = NO; mainTableView.backgroundColor = [UIColor clearColor]; mainTableView.rowHeight = SCREEN_HEIGHT; } return mainTableView;}#pragma marl -tableDelegate- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 1;}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return SCREEN_HEIGHT;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; cell.selectionStyle = UITableViewCellSelectionStyleNone; //添加pageView [cell.contentView addSubview:self.setPageViewControllers]; return cell;}// 调用两个小VC-(UIView *)setPageViewControllers{ EssayViewController *essay = [[EssayViewController alloc] init]; essay.urlStr = self.urlStr; essay.title = [NSString stringWithFormat:@"文章\n%@", self.articleCount]; SubscriberViewController *subscribe = [[SubscriberViewController alloc] init]; subscribe.urlStr = self.urlStr; subscribe.title = [NSString stringWithFormat:@"订阅者\n%@", self.subscriberCount]; NSArray *subViewControllers=@[essay, subscribe]; DCNavTabBarController *tabBarVC = [[DCNavTabBarController alloc]initWithSubViewControllers:subViewControllers]; tabBarVC.view.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); [self.view addSubview:tabBarVC.view]; [self addChildViewController:tabBarVC]; return tabBarVC.view;}@end写到这里, 就完成了, 下面让我们来看一下成果吧!
是不是特别棒呢, 喜欢的话就来试试看吧!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言TableView是iOS应用程序中非常通用的组件,几乎每一个界面都有一个TableView,而我们许多的代码都和TableView有关系,比如数据展示、更
iPhone手机的电池一直是一个热门话题!此前苹果被发现悄悄地限制降低电池寿命的iOS设备的运行性能,后来苹果又通过发布iOS11的软件更新回应用户对设备运行状
用户界面设计是一个热门话题,我们生活在数字的世界里,高质量的用户体验的价值比以往任何时候都高。现在不仅重要,而且随着移动,数字和物联网的巨大发展,用户界面的
  1、参与热门话题、热门事件或是利用高流量人物做话题,吸引用户关注度。也可以利用近期热播的影视剧,制作相关小主题视频,或是互动性强、争议性
网易云音乐app中想要参与音乐热门话题,并查看自己参与的话题,该怎么参与并查看,请看下文详细介绍。软件名称:网易云音乐forandroidV8.0.50安卓手机