当前位置: 首页 > news >正文

iOS —— 网易云仿写

与网易云相比,我只完成了首页以及“我的”页面的仿写。

首页

首页实现效果如上图。

上方导航栏

self.leftbtn = [[UIBarButtonItem alloc] initWithImage: [UIImage imageNamed: @"caidan"] style: UIBarButtonItemStylePlain target: self action: @selector(pressMenu)];self.rightbtn = [[UIBarButtonItem alloc] initWithImage: [UIImage imageNamed: @"tinggeshiqu"] style: UIBarButtonItemStylePlain target: nil action: nil];self.navigationItem.leftBarButtonItem = self.leftbtn;self.navigationItem.rightBarButtonItem = self.rightbtn;self.navigationItem.leftBarButtonItem.tintColor = [UIColor blackColor];self.navigationItem.rightBarButtonItem.tintColor = [UIColor blackColor];self.searchbar = [[UISearchBar alloc] init];self.searchbar.placeholder = @"安和桥 宋冬野";self.searchbar.showsSearchResultsButton = YES;self.navigationItem.titleView = self.searchbar;

导航栏的左右按钮和搜索栏代码如上

主页内容

如上图Lookin,我把主页分成了三个部分:poster , recommend , guessyoulike

分别对应显示效果中的无线轮播海报 , 私人漫游 , 根据你喜欢的歌曲推荐。

海报

- (void)pageChanged:(UIPageControl *)sender {NSInteger page = sender.currentPage;CGFloat width = WIDTH;// 计算真实页码对应的滚动位置(+1是因为第一张是副本)[self.scrollView setContentOffset:CGPointMake((page + 1) * width, 0) animated:YES];
}//自动翻页
- (void)autoScroll {CGFloat screenWidth = self.scrollView.bounds.size.width;CGFloat currentOffset = self.scrollView.contentOffset.x;NSInteger nextPage = (NSInteger)(currentOffset / screenWidth) + 1;NSInteger realPageCount = self.page.numberOfPages;if (nextPage >= realPageCount + 2) {[self.scrollView setContentOffset:CGPointMake(screenWidth, 0) animated:NO];self.page.currentPage = 0;return;}[self.scrollView setContentOffset:CGPointMake(nextPage * screenWidth, 0) animated:YES];self.page.currentPage = (nextPage - 1) % realPageCount;
}- (void)scrollViewDidScroll:(UIScrollView *)scrollView {if (scrollView != self.scrollView) return;CGFloat screenWidth = scrollView.bounds.size.width;CGFloat offsetX = scrollView.contentOffset.x;NSInteger realPageCount = self.page.numberOfPages;NSInteger totalPages = realPageCount + 2;// 左边界处理:滚动到最左边的副本页if (offsetX <= 0) {// 跳到最后一张真实图片位置(索引 totalPages - 2)scrollView.contentOffset = CGPointMake(screenWidth * (totalPages - 2), 0);self.page.currentPage = realPageCount - 1; // 最后一张真实图片}// 右边界处理:滚动到最右边的副本页else if (offsetX >= screenWidth * (totalPages - 1)) {// 跳到第二张真实图片位置(索引1)scrollView.contentOffset = CGPointMake(screenWidth, 0);self.page.currentPage = 0; // 第一张真实图片}// 正常范围else {// 计算当前真实页码(减去第一张副本)NSInteger currentPage = (NSInteger)(offsetX / screenWidth) - 1;if (currentPage < 0) currentPage = realPageCount - 1;if (currentPage >= realPageCount) currentPage = 0;self.page.currentPage = currentPage;}
}- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {// 用户开始拖动时停止自动滚动[self.timer invalidate];self.timer = nil;
}- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {// 用户结束拖动时重启自动滚动[self startAutoScrollTimer];
}- (void)startAutoScrollTimer {// 先停止现有定时器if (self.timer) {[self.timer invalidate];self.timer = nil;}// 创建新定时器self.timer = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(autoScroll) userInfo:nil repeats:YES];[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}

一些控制轮播的关键函数如上图,如代码可简化或有误烦请指出。


同时,我添加了一个点击海报放大功能,

- (void)bannerTapped:(UITapGestureRecognizer *)gesture {//取出被点击的图片UIImageView *imgView = (UIImageView *)gesture.view;UIImage *image = imgView.image;if (!image) return;//创建全屏背景层UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;UIView *backgroundView = [[UIView alloc] initWithFrame:keyWindow.bounds];backgroundView.backgroundColor = [UIColor whiteColor];backgroundView.alpha = 0.5;//创建全屏幕图片UIImageView *fullImageView = [[UIImageView alloc] initWithFrame:backgroundView.bounds];fullImageView.contentMode = UIViewContentModeScaleAspectFit;fullImageView.image = image;fullImageView.userInteractionEnabled = YES;UITapGestureRecognizer *tapClose = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissFullScreenImage:)];[fullImageView addGestureRecognizer:tapClose];[backgroundView addSubview:fullImageView];[keyWindow addSubview:backgroundView];[UIView animateWithDuration:0.3 animations:^{backgroundView.alpha = 1.0;}];
}

与此同时,我也添加了一个点击后取消

- (void)dismissFullScreenImage:(UITapGestureRecognizer *)tap {UIView *backgroundView = tap.view.superview;[UIView animateWithDuration:0.3 animations:^{backgroundView.alpha = 0;} completion:^(BOOL finished) {[backgroundView removeFromSuperview];}];
}

推荐内容

我建立一个数组用于储存内容,代码难度较低 

#pragma mark - 推荐内容部分
- (void)setupRecommandCell {self.scrollView02 = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, 211)];self.scrollView02.scrollEnabled = YES;self.scrollView02.pagingEnabled = YES;self.scrollView02.alwaysBounceHorizontal = YES;self.scrollView02.alwaysBounceVertical = NO;self.scrollView02.contentSize = CGSizeMake(WIDTH * 2.1, 211);self.scrollView02.showsHorizontalScrollIndicator = NO;[self.contentView addSubview:self.scrollView02];NSArray* arrayLabel02 = @[@"私人漫游", @"欧美日推", @"民谣日推", @"快乐旅行", @"电音日推", @"每日推荐"];NSArray* arrayLabel2 = @[@"1.2亿", @"23w", @"30w", @"460w", @"521w", @"6亿"];BOOL isNight = [NightModeManager sharedManager].isNightMode;for (int i = 0; i < 6; i++) {NSString* strName = [NSString stringWithFormat: @"guess%d", i + 1];UIImageView* iView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: strName]];iView.frame = CGRectMake(10 + 135 * i, 5, 125, 166);iView.layer.cornerRadius = 9;iView.layer.masksToBounds = YES;[self.scrollView02 addSubview: iView];self.label02 = [[UILabel alloc] initWithFrame: CGRectMake(10 + 135 * i, 160, 130, 50)];self.label02.font = [UIFont systemFontOfSize: 15];self.label02.text = arrayLabel02[i];self.label02.textColor = [UIColor darkGrayColor];self.label02.numberOfLines = 2;[self.scrollView02 addSubview: self.label02];self.label2 = [[UILabel alloc] initWithFrame: CGRectMake(5, 88, 100, 50)];self.label2.font = [UIFont systemFontOfSize: 15];self.label2.text = arrayLabel2[i];self.label2.textColor = [UIColor whiteColor];[iView addSubview: self.label2];}
}

猜你喜欢

因为猜你喜欢部分有三个横向栏目,我分别建立tableView0301 0302 0303

以其中0301为例: 

- (UITableViewCell *)createCellForTableView0301:(NSIndexPath *)indexPath {static NSString *cellIdentifier = @"CustomSongCell";UITableViewCell *cell = [self.tableView0301 dequeueReusableCellWithIdentifier:cellIdentifier];BOOL isNight = [NightModeManager sharedManager].isNightMode;if (!cell) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];// 专辑封面UIImageView *albumImageView = [[UIImageView alloc] initWithFrame:CGRectMake(15, 5, 55, 55)];albumImageView.tag = 100;albumImageView.layer.cornerRadius = 5;albumImageView.layer.masksToBounds = YES;albumImageView.contentMode = UIViewContentModeScaleAspectFill;[cell.contentView addSubview:albumImageView];// 歌曲名称UILabel *songLabel = [[UILabel alloc] initWithFrame:CGRectMake(80, 10, WIDTH - 150, 20)];songLabel.tag = 101;songLabel.textColor = isNight ? [UIColor whiteColor] : [UIColor blackColor];songLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];[cell.contentView addSubview:songLabel];// 歌手名称UILabel *artistLabel = [[UILabel alloc] initWithFrame:CGRectMake(80, 35, WIDTH - 150, 15)];artistLabel.tag = 102;artistLabel.font = [UIFont systemFontOfSize:12];artistLabel.textColor = [UIColor grayColor];[cell.contentView addSubview:artistLabel];// 播放按钮UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom];playButton.frame = CGRectMake(WIDTH - 45, 20, 30, 30);playButton.tag = 103;[playButton setImage:[UIImage imageNamed:@"bofang.png"] forState:UIControlStateNormal];playButton.tintColor = [UIColor systemPurpleColor];[playButton addTarget:self action:@selector(playButtonTapped:) forControlEvents:UIControlEventTouchUpInside];[cell.contentView addSubview:playButton];}// 配置单元格内容NSArray* array01 = @[@"董小姐", @"Hate Me", @"野孩子"];NSArray* array011 = @[@"宋冬野 - 安河桥北", @"two - Hate Me", @"杨千嬅"];NSArray* imageNames = @[@"011", @"012", @"013"];UIImageView *albumImageView = [cell.contentView viewWithTag:100];albumImageView.image = [UIImage imageNamed:imageNames[indexPath.row]];UILabel *songLabel = [cell.contentView viewWithTag:101];songLabel.text = array01[indexPath.row];UILabel *artistLabel = [cell.contentView viewWithTag:102];artistLabel.text = array011[indexPath.row];return cell;
}

在本栏目中,我又添加了一个播放点击事件:

- (void)playButtonTapped:(UIButton *)sender {// 获取所在的单元格UIView *contentView = sender.superview;UITableViewCell *cell = (UITableViewCell *)contentView.superview;// 获取歌曲信息UILabel *songLabel = [contentView viewWithTag:101];UILabel *artistLabel = [contentView viewWithTag:102];NSString *songName = songLabel.text;NSString *artistName = artistLabel.text;NSLog(@"用户点击播放:%@ - %@", songName, artistName);NSString *filePath = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"];if (filePath) {NSURL *fileURL = [NSURL fileURLWithPath:filePath];NSError *error = nil;self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];if (!error) {[self.audioPlayer prepareToPlay];[self.audioPlayer play];} else {NSLog(@"真该死", error.localizedDescription);}} else {NSLog(@"去他吗的");}
}

“我的”页面

 

我依旧把这个页面分成三个cell文件 UserInfoCell.  ToolbarCell.  SegmentTabCell

分别对应我的用户信息、工具栏:例如最近、本地、网盘等、和下方的音乐、博客、笔记分栏。

导航栏

导航栏设置与之前无异

主要内容

我的信息


- (void)setupViews {// 头像_avatarImageView = [[UIImageView alloc] initWithFrame:CGRectMake( 155, -30, 90, 90)];_avatarImageView.layer.cornerRadius = 45;_avatarImageView.image = [UIImage imageNamed:@"avater"];_avatarImageView.layer.masksToBounds = YES;_avatarImageView.layer.borderColor = [UIColor whiteColor].CGColor;_avatarImageView.layer.borderWidth = 2.0;_avatarImageView.userInteractionEnabled = YES;UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(avatarTapped:)];[_avatarImageView addGestureRecognizer:tapGesture];[self.contentView addSubview:_avatarImageView];// VIP标签_vipLabel = [[UILabel alloc] initWithFrame:CGRectMake(240, 70, 60, 25)];_vipLabel.textColor = [UIColor colorWithRed:1.0 green:0.8 blue:0.2 alpha:1.0];_vipLabel.font = [UIFont boldSystemFontOfSize:12];_vipLabel.textAlignment = NSTextAlignmentCenter;_vipLabel.backgroundColor = [UIColor blackColor];_vipLabel.layer.cornerRadius = 12;_vipLabel.layer.masksToBounds = YES;[self.contentView addSubview:_vipLabel];// 用户名_usernameLabel = [[UILabel alloc] initWithFrame:CGRectMake(35, 70, self.contentView.bounds.size.width, 30)];_usernameLabel.textColor = [UIColor whiteColor];_usernameLabel.font = [UIFont boldSystemFontOfSize:20];_usernameLabel.textAlignment = NSTextAlignmentCenter;[self.contentView addSubview:_usernameLabel];// 个性签名_bioLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, self.contentView.bounds.size.width, 25)];_bioLabel.textColor = [UIColor colorWithWhite:1.0 alpha:0.7];_bioLabel.font = [UIFont systemFontOfSize:15];_bioLabel.textAlignment = NSTextAlignmentCenter;[self.contentView addSubview:_bioLabel];// 状态按钮_statusButton = [UIButton buttonWithType:UIButtonTypeCustom];_statusButton.frame = CGRectMake(150, -60, 100, 24);[_statusButton setTitle:@"+添加状态" forState:UIControlStateNormal];[_statusButton setTitleColor:[UIColor systemMintColor] forState:UIControlStateNormal];_statusButton.titleLabel.font = [UIFont systemFontOfSize:14];_statusButton.layer.borderColor = [UIColor colorWithRed:0.0 green:0.6 blue:1.0 alpha:1.0].CGColor;_statusButton.layer.borderWidth = 0;_statusButton.layer.cornerRadius = 12;[self.contentView addSubview:_statusButton];// 统计数据视图_statsView = [[UIView alloc] initWithFrame:CGRectMake(80, 130, self.contentView.bounds.size.width - 60, 50)];[self.contentView addSubview:_statsView];NSArray *statTitles = @[@"33\n关注", @"8\n粉丝", @"Lv.9\n等级", @"1641\n时长"];CGFloat statWidth = _statsView.bounds.size.width / statTitles.count;for (int i = 0; i < statTitles.count; i++) {UILabel *statLabel = [[UILabel alloc] initWithFrame:CGRectMake(i * statWidth, 0, statWidth, 50)];statLabel.text = statTitles[i];statLabel.numberOfLines = 2;statLabel.textColor = [UIColor whiteColor];statLabel.font = [UIFont systemFontOfSize:14];statLabel.textAlignment = NSTextAlignmentCenter;[_statsView addSubview:statLabel];}// 徽章视图_badgeView = [[UIView alloc] initWithFrame:CGRectMake(100, 190, 200, 30)];_badgeView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.15];_badgeView.layer.cornerRadius = 10;[self.contentView addSubview:_badgeView];UILabel *badgeDesc = [[UILabel alloc] initWithFrame:CGRectMake(14, 3, 300, 20)];badgeDesc.text = @"♂ | 日常摸鱼中 | 黑胶收藏者";badgeDesc.textColor = [UIColor colorWithWhite:1.0 alpha:0.7];badgeDesc.font = [UIFont systemFontOfSize:14];[_badgeView addSubview:badgeDesc];
}

同时,我增加了照片墙换头像功能。

代理传值:

UserInfoCell:

- (void)avatarTapped:(UITapGestureRecognizer *)gesture {NSLog(@"头像被点击");if ([self.delegate respondsToSelector:@selector(didTapAvatarInCell:)]) {[self.delegate didTapAvatarInCell:self];}
}- (void)setAvatarImageView:(UIImageView *)avatarImageView {_avatarImageView.image = avatarImageView;
}

myVC控制器:


- (void)didTapAvatarInCell:(UserInfoCell *)cell {NSLog(@"代理方法被调用");PhotoWallVC *photoVC = [[PhotoWallVC alloc] init];photoVC.delegate = self;[self presentViewController:photoVC animated:YES completion:nil];
}#pragma mark - PhotoWallDelegate- (void)didSelectAvatar:(UIImage *)selectedAvatar {NSLog(@"接收到选择的头像");self.currentAvatar = selectedAvatar;NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];UserInfoCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];[cell setAvatarImageView: _currentAvatar];
}

同时附上PhotoWallVC的代码:

//  PhotoWallVC.m
//  网易云音乐
//
//  Created by 吴桐 on 2025/7/10.
//#import "PhotoWallVC.h"#define kPhotoSpacing 15
#define kPhotoWidth ((self.view.frame.size.width - kPhotoSpacing * 4) / 3)@interface PhotoWallVC ()@end@implementation PhotoWallVC- (void)viewDidLoad {[super viewDidLoad];self.title = @"选择头像";self.view.backgroundColor = [UIColor whiteColor];NSArray *photoNames = @[@"photo1.jpg", @"photo2.jpg", @"photo3.jpg",@"photo4.jpg", @"photo5.jpg", @"photo6.jpg",@"photo7.jpg", @"photo8.jpg", @"photo9.jpg"];for (int i = 0; i < 9; i++) {int row = i / 3;int col = i % 3;CGFloat x = kPhotoSpacing + col * (kPhotoWidth + kPhotoSpacing);CGFloat y = 100 + row * (kPhotoWidth + kPhotoSpacing);UIButton *photoBtn = [UIButton buttonWithType:UIButtonTypeCustom];photoBtn.frame = CGRectMake(x, y, kPhotoWidth, kPhotoWidth);photoBtn.tag = i;[photoBtn setImage:[UIImage imageNamed:photoNames[i]] forState:UIControlStateNormal];photoBtn.layer.cornerRadius = kPhotoWidth/2;photoBtn.layer.masksToBounds = YES;photoBtn.layer.borderColor = [UIColor whiteColor].CGColor;photoBtn.layer.borderWidth = 2;[photoBtn addTarget:self action:@selector(photoSelected:) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:photoBtn];}
}- (void)photoSelected:(UIButton *)sender {UIImage *selectedImage = sender.currentImage;if ([self.delegate respondsToSelector:@selector(didSelectAvatar:)]) {[self.delegate didSelectAvatar:selectedImage];}[self dismissViewControllerAnimated:YES completion:nil];
}
@end//  PhotoWallVC.h
//  网易云音乐
//
//  Created by 吴桐 on 2025/7/10.
//// PhotoWallVC.h
#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@protocol PhotoWallDelegate <NSObject>
- (void)didSelectAvatar:(UIImage *)selectedAvatar;
@end@interface PhotoWallVC : UIViewController
@property (nonatomic, weak) id<PhotoWallDelegate> delegate;
@endNS_ASSUME_NONNULL_END

工具栏:

我还是通过两个数组记录每个工具的文字和图片


- (void)setupUI {self.backgroundColor = [UIColor clearColor];self.selectionStyle = UITableViewCellSelectionStyleNone;self.contentView.backgroundColor = [UIColor clearColor];// 初始化数组_buttons = [NSMutableArray array];_backgroundViews = [NSMutableArray array];// 添加5个按钮及其背景for (int i = 0; i < 5; i++) {UIView *backgroundView = [[UIView alloc] init];backgroundView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.1];backgroundView.layer.cornerRadius = 10;[self.contentView addSubview:backgroundView];[_backgroundViews addObject:backgroundView];UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];button.tag = i;button.titleLabel.font = [UIFont systemFontOfSize:13];button.titleLabel.textAlignment = NSTextAlignmentCenter;button.titleLabel.adjustsFontSizeToFitWidth = YES;button.titleLabel.minimumScaleFactor = 0.8;[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];[self.contentView addSubview:button];[_buttons addObject:button];}
}- (void)layoutSubviews {[super layoutSubviews];CGFloat padding = 15.0;CGFloat buttonSpacing = 5.0; CGFloat contentWidth = CGRectGetWidth(self.contentView.bounds) - padding * 2;CGFloat contentHeight = 40.0;CGFloat buttonWidth = (contentWidth - (4 * buttonSpacing)) / _buttons.count;// 布局按钮和背景for (int i = 0; i < _buttons.count; i++) {CGFloat xPosition = padding + i * (buttonWidth + buttonSpacing);UIView *backgroundView = _backgroundViews[i];backgroundView.frame = CGRectMake(xPosition, -30, buttonWidth, contentHeight);UIButton *button = _buttons[i];button.frame = CGRectMake(xPosition, -30, buttonWidth, contentHeight);[self layoutButtonContent:button];}
}

最终实现效果如图:

歌单部分:

我加入了一个分栏实现音乐、播客、笔记之间的切换

_segmentedControl = [[UISegmentedControl alloc] init];_segmentedControl.selectedSegmentTintColor = [UIColor colorWithRed:0.98 green:0.30 blue:0.30 alpha:1.0];[_segmentedControl setBackgroundImage:[UIImage new] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];[_segmentedControl setBackgroundImage:[UIImage new] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];[_segmentedControl setDividerImage:[UIImage new] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];UIFont *selectedFont = [UIFont boldSystemFontOfSize:16];UIFont *normalFont = [UIFont systemFontOfSize:14];[_segmentedControl setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor],NSFontAttributeName: selectedFont} forState:UIControlStateSelected];[_segmentedControl setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor lightGrayColor],NSFontAttributeName: normalFont} forState:UIControlStateNormal];[_segmentedControl addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged];[self.contentView addSubview:_segmentedControl];

设置页面

我实现了一个抽屉视图,并设置了黑夜模式

recommendVC:

-(void) pressMenu {settingViewController *settingView = [[settingViewController alloc] init];settingView.modalPresentationStyle = UIModalPresentationOverFullScreen;settingView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;[self presentViewController:settingView animated:YES completion:nil];
}

settingViewController:

[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(updateAppearance)name:@"NightModeChangedNotification"object:nil];

先通过这段代码接收通知

- (void)updateAppearance {BOOL isNightMode = [NightModeManager sharedManager].isNightMode;if (isNightMode) {self.tableView.backgroundColor = [UIColor blackColor];self.tabBarController.tabBar.backgroundColor = [UIColor darkGrayColor];self.tabBarController.tabBar.barTintColor = [UIColor darkGrayColor];self.tabBarController.tabBar.tintColor = [UIColor redColor]; // 设置选中颜色} else {UIColor *wechatBackgroundColor = [UIColor colorWithRed:247/255.0 green:247/255.0 blue:247/255.0 alpha:1.0];self.tableView.backgroundColor = wechatBackgroundColor;self.tabBarController.tabBar.barTintColor = [UIColor whiteColor];self.tabBarController.tabBar.backgroundColor = [UIColor whiteColor];self.tabBarController.tabBar.tintColor = [UIColor grayColor];}[self.tableView reloadData];
}//在当前页面上加一个半透明黑色的背景蒙层,并且能点击关闭设置面板
- (void)setupBackgroundDimmingView {self.backgroundDimmingView = [[UIView alloc] initWithFrame:self.view.bounds];self.backgroundDimmingView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];self.backgroundDimmingView.alpha = 0;[self.view addSubview:self.backgroundDimmingView];UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissSetting)];[self.backgroundDimmingView addGestureRecognizer:tapGesture];
}//通知中心取消
- (void)dealloc {[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)viewDidAppear:(BOOL)animated {[super viewDidAppear:animated];[UIView animateWithDuration:0.3 animations:^{self.tableView.frame = CGRectMake(0, 0, self.drawerWidth, [UIScreen mainScreen].bounds.size.height);self.backgroundDimmingView.alpha = 1;}];
}- (void)dismissSetting {[UIView animateWithDuration:0.3 animations:^{self.tableView.frame = CGRectMake(-self.drawerWidth, 0, self.drawerWidth, [UIScreen mainScreen].bounds.size.height);self.backgroundDimmingView.alpha = 0;} completion:^(BOOL finished) {[self dismissViewControllerAnimated:NO completion:nil];}];
}

然后实现白天黑夜模式切换。

http://www.dtcms.com/a/278635.html

相关文章:

  • 微信小程序——配置路径别名和省略后缀
  • iOS App 安全加固全流程:静态 + 动态混淆对抗逆向攻击实录
  • iOS如何查看电池容量?理解系统限制与开发者级能耗调试方法
  • 纯C++11实现!零依赖贝叶斯情感分析系统,掌握机器学习系统工程化的秘密!
  • Android Studio C++/JNI/Kotlin 示例 三
  • 基于51单片机的贪吃蛇游戏Protues仿真设计
  • 图算法在前端的复杂交互
  • 网络编程(套接字)
  • AI数据分析仪设计原理图:RapidIO信号接入 平板AI数据分析仪
  • RPC vs RESTful架构选择背后的技术博弈
  • 从数据洞察到设计创新:UI前端如何利用数字孪生提升产品交互体验?
  • 数字孪生技术引领UI前端设计新潮流:智能交互界面的个性化定制
  • 【Linux网络编程】应用层自定义协议与序列化
  • React强大且灵活hooks库——ahooks入门实践之DOM类hook(dom)详解
  • Reactor 模式详解
  • 订单初版—6.生单链路实现的重构文档
  • Vue3 学习教程,从入门到精通,Vue 3 表单控件绑定详解与案例(7)
  • 设计模式--适配器模式
  • PHP password_get_info() 函数
  • 第一章 uniapp实现兼容多端的树状族谱关系图,创建可缩放移动区域
  • 商城系统的架构与功能模块
  • flink 中配置hadoop 遇到问题解决
  • 用Python向PDF添加文本:精确插入文本到PDF文档
  • vue3+uniapp 使用vue-plugin-hiprint中实现打印效果
  • Triton Inference Server 架构与前后处理方案梳理
  • 打破空间边界!Nas-Cab用模块化设计重构个人存储逻辑
  • JAVA进阶--JVM
  • 设备发出、接收数据帧的工作机制
  • 无人机迫降模式模块运行方式概述!
  • 掉线监测-tezos rpc不能用,改为残疾网页监测