欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

仿网易抽屉效果

发布时间:2025/7/14 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 仿网易抽屉效果 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
/*** 源代码的链接* 链接: http://pan.baidu.com/s/1c2hqDzy 密码: jscx*/#import <UIKit/UIKit.h>@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;@end #import "AppDelegate.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.return YES; }@end #import <UIKit/UIKit.h>@interface ViewController : UIViewController@end #import "ViewController.h" #import "LFCustomButton.h" #import "LFLeftView.h" #import "LFItems.h" #import "LFSmileViewController.h" #import "LFCheerViewController.h" #import "LFHappyViewController.h"const float leftViewTopGap = 120; const float viewAnimateDuration = 0.3; @interface ViewController ()<LFLeftViewDelegate>@property (nonatomic , strong) UIImageView *bgView;//背景图片 @property (nonatomic , strong) LFLeftView *leftView;//左边的菜单栏 @property (nonatomic , strong) UIButton *coverBtn;//防止内容被操作的按钮 @property (nonatomic , strong) UINavigationController *currentVC;//当前控制器@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// controllers = [NSMutableArray array];// 设置背景图片self.bgView = [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];self.bgView.backgroundColor = [UIColor blackColor];self.bgView.opaque = 0.3;// 设置可操作(如果在此不设置可操作,它的子视图是不可以操作的)self.bgView.userInteractionEnabled = YES;[self.view addSubview:self.bgView];LFItems *item = [[LFItems alloc] init];//图片名item.images = @[@"De",@"Dx",@"monkey"];//标题的名称item.titles = @[@"开心",@"快乐",@"幸福"];CGPoint point= CGPointMake(0, leftViewTopGap);self.leftView = [[LFLeftView alloc] initWithItem:item originPoint:point];self.leftView.delegate = self;[self.bgView addSubview:self.leftView];LFSmileViewController *smileVC = [[LFSmileViewController alloc] init];[self initVC:smileVC title:@"开心"];LFCheerViewController *cheerVC = [[LFCheerViewController alloc] init];[self initVC:cheerVC title:@"快乐"];LFHappyViewController *happyVC = [[LFHappyViewController alloc] init];[self initVC:happyVC title:@"幸福"];// 默认第一个控制器为当前控制器self.currentVC = self.childViewControllers[0];[self.bgView addSubview:self.currentVC.view]; }/*** 初始化导航控制器** @param vc 控制器* @param title 导航栏的标题*/ - (void)initVC:(UIViewController *)vc title:(NSString *)title{UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:vc];UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithTitle:@"左菜单栏" style:UIBarButtonItemStylePlain target:self action:@selector(showLeftMenuBar)];vc.title = title;vc.navigationItem.leftBarButtonItem = leftItem;[self addChildViewController:navi];[navi.view removeFromSuperview]; }/*** 导航栏左边按钮的监听事件*/ - (void)showLeftMenuBar{NSLog(@"显示左菜单栏");[self animation]; }/*** 缩小平移动画*/ - (void)animation{[UIView animateWithDuration:viewAnimateDuration animations:^{//计算缩放的比例float widthScale = 1 - self.leftView.frame.size.width/(UISCREEN_WIDTH*1.0);float heightScale = 1 - (leftViewTopGap * 2)/(UISCREEN_HEIGHT *1.0);//缩放CGAffineTransform scaleTransForm = CGAffineTransformMakeScale(widthScale, heightScale);//计算平移的距离CGFloat distanceX = UISCREEN_WIDTH * (1-widthScale)*0.5;//平移(因为moveTransForm是基于scaleTransForm执行动画,所以要除以原来的比例(widthScale))CGAffineTransform moveTransForm = CGAffineTransformTranslate(scaleTransForm, distanceX/widthScale, 0);self.currentVC.view.transform = moveTransForm;} completion:^(BOOL finished) {self.coverBtn = [UIButton buttonWithType:UIButtonTypeCustom];self.coverBtn.frame = self.currentVC.view.bounds;self.coverBtn.backgroundColor = [UIColor clearColor];[self.coverBtn addTarget:self action:@selector(coverbtnAction:) forControlEvents:UIControlEventTouchUpInside];[self.currentVC.view addSubview:self.coverBtn];}];}/*** coverBtn按钮的监听事件*/ - (void)coverbtnAction:(UIButton *)sender{[self recoverAnimation]; }/*** 恢复原来尺寸的动画*/ - (void)recoverAnimation{[UIView animateWithDuration:viewAnimateDuration animations:^{self.currentVC.view.transform =CGAffineTransformIdentity;} completion:^(BOOL finished) {[self.coverBtn removeFromSuperview];}]; }#pragma mark -- LFLeftViewDelegate -- - (void)exchangeControllerFromIndex:(int)index toIndex:(int)nextIndex{//移除旧控制器 [self.currentVC.view removeFromSuperview];[self recoverAnimation];//显示新的控制器UINavigationController *willShowVC = self.childViewControllers[nextIndex];self.currentVC = willShowVC;[self.bgView addSubview:willShowVC.view];}@end #import <UIKit/UIKit.h>@interface LFSmileViewController : UIViewController@end #import "LFSmileViewController.h"@interface LFSmileViewController ()@end@implementation LFSmileViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor redColor]; }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];}@end #import <UIKit/UIKit.h>@interface LFCheerViewController : UIViewController@end #import "LFCheerViewController.h"@interface LFCheerViewController ()@end@implementation LFCheerViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor orangeColor]; }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. }@end #import <UIKit/UIKit.h>@interface LFHappyViewController : UIViewController@end #import "LFHappyViewController.h"@interface LFHappyViewController ()@end@implementation LFHappyViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor yellowColor]; }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. }@end #import <Foundation/Foundation.h>@interface LFItems : NSObject/*** images存放图片名*/ @property (nonatomic , strong) NSArray *images;/*** titles 名称*/ @property (nonatomic, strong) NSArray *titles;@end #import "LFItems.h"@implementation LFItems/*** 初始化时,给images和titles申请内存*/ - (instancetype)init {self = [super init];if (self) {self.images = [[NSArray alloc] init];self.titles = [[NSArray alloc] init];}return self; }@end #import <UIKit/UIKit.h>@interface LFCustomButton : UIButton@end #import "LFCustomButton.h"const float LFCustomButtonScale = 0.5;@implementation LFCustomButton/*** 重写按钮title的尺寸*/ - (CGRect)titleRectForContentRect:(CGRect)contentRect {return CGRectMake(contentRect.size.width * LFCustomButtonScale, 0, contentRect.size.width *(1 - LFCustomButtonScale), contentRect.size.height); }/*** 重写按钮Image的尺寸*/ - (CGRect)imageRectForContentRect:(CGRect)contentRect {CGRect titleFrame = CGRectMake(0, 0, contentRect.size.width * LFCustomButtonScale, contentRect.size.height);return titleFrame; }@end #import <UIKit/UIKit.h>@class LFItems; @protocol LFLeftViewDelegate;@interface LFLeftView : UIView@property (nonatomic , weak) id<LFLeftViewDelegate> delegate;/*** 初始化的方法** @param item 数据(title和image)* @param point 在父视图的初始位置** @return 返回LFLeftView的对象*/ - (LFLeftView *)initWithItem:(LFItems *)item originPoint:(CGPoint)point;@end@protocol LFLeftViewDelegate <NSObject>- (void)exchangeControllerFromIndex:(int)index toIndex:(int)nextIndex;@end #import "LFLeftView.h" #import "LFItems.h" #import "LFCustomButton.h" #import "UIImage+CreatImageWithColor.h" #define LFCustomButtonWidth UISCREEN_WIDTH/2.0 #define LFCustomButtonHeight 60@interface LFLeftView()@property (nonatomic, strong) LFItems *item;@property (nonatomic, strong) NSMutableArray *buttons;@property (nonatomic, strong) UIButton *currentBtn;//当前选中的按钮@end@implementation LFLeftView- (LFLeftView *)initWithItem:(LFItems *)item originPoint:(CGPoint)point {self = [super init];if (self) {if (item == nil) {return nil;}self.buttons = [NSMutableArray array];self.userInteractionEnabled = YES;self.item = item;self.frame = CGRectMake(point.x, point.y, LFCustomButtonWidth, LFCustomButtonHeight * self.item.titles.count);[self creatButtons];}return self; }/*** 创建按钮*/ - (void)creatButtons{//创建button的个数int count = (int)self.item.titles.count;// 通过循环创建按钮for (int i = 0; i < count; i++) {LFCustomButton *button = [LFCustomButton buttonWithType:UIButtonTypeCustom];//设置选中时的背景图片[button setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithRed:253/255.0 green:0 blue:0 alpha:0.2]] forState:UIControlStateSelected];//默认第一个按钮为当前选中按钮if (i == 0) {self.currentBtn = button;self.currentBtn.selected = YES;}button.backgroundColor = [UIColor grayColor];[button setTitle:self.item.titles[i] forState:0];if (self.item.images[i] != nil) {[button setImage:[UIImage imageNamed:self.item.images[i]] forState:0];}button.tag = i;[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];[self addSubview:button];[self.buttons addObject:button];} }/*** 按钮的监听事件*/ - (void)buttonAction:(UIButton *)sender{NSLog(@"从第%ld个按钮跳到第%ld个按钮",(long)self.currentBtn.tag,(long)sender.tag);if ([_delegate respondsToSelector:@selector(exchangeControllerFromIndex: toIndex:)]) {[_delegate exchangeControllerFromIndex:(int)self.currentBtn.tag toIndex:(int)sender.tag];}//取消当前按钮选中状态self.currentBtn.selected = NO;//设置当前按钮为选中的按钮self.currentBtn = sender;// 设置当前按钮为选中状态self.currentBtn.selected = YES; }- (void)layoutSubviews{[super layoutSubviews];// 设置所有子视图的尺寸for (int i = 0; i < self.buttons.count; i++) {UIButton *button = self.buttons[i];button.frame = CGRectMake(0, i*LFCustomButtonHeight, LFCustomButtonWidth, LFCustomButtonHeight);} }@end #import <UIKit/UIKit.h>@interface UIImage (CreatImageWithColor)/*** 通过颜色生成该纯颜色的图片** @param color 生成图片的颜色** @return 返回图片*/ + (UIImage *)imageWithColor:(UIColor *)color;/*** 通过颜色生成该纯颜色的图片** @param color 生成图片的颜色* @param width 生成图片的宽* @param height 生成图片的高** @return 返回图片*/ + (UIImage *)imageWithColor:(UIColor *)color imageWidth:(CGFloat)width imageWithHeight:(CGFloat)height;@end #import "UIImage+CreatImageWithColor.h"@implementation UIImage (CreatImageWithColor)+ (UIImage *)imageWithColor:(UIColor *)color{return [UIImage imageWithColor:color imageWidth:100 imageWithHeight:100]; }+ (UIImage *)imageWithColor:(UIColor *)color imageWidth:(CGFloat)width imageWithHeight:(CGFloat)height{//开启基于位图的图形上下文UIGraphicsBeginImageContextWithOptions(CGSizeMake(width,height), NO, 0.0);// 设置画笔的颜色[color set];// 画矩形,并填充UIRectFill(CGRectMake(0, 0, width, height));//获取图片UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();//关闭上下文 UIGraphicsEndImageContext();return resultImage; }@end #ifndef PrefixHeader_pch #define PrefixHeader_pch// Include any system framework and library headers here that should be included in all compilation units. // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.#define UISCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define UISCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height#endif /* PrefixHeader_pch */

 

转载于:https://www.cnblogs.com/lantu1989/p/5462623.html

总结

以上是生活随笔为你收集整理的仿网易抽屉效果的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。