首页 > 代码库 > 搜索菜单栏侧滑效果控件SearchView
搜索菜单栏侧滑效果控件SearchView
搜索菜单栏侧滑效果控件SearchView
本人视频教程系类 iOS中CALayer的使用
效果1:
效果2:
项目中用到的图片 bgImg@2x.png:
源码:
SearchView.h + SearchView.m
//// SearchView.h// SearchView//// Created by YouXianMing on 14/12/25.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <UIKit/UIKit.h>#define SearchView_ScreenWidth [[UIScreen mainScreen] bounds].size.width#define SearchView_ScreenHeight [[UIScreen mainScreen] bounds].size.height@protocol SearchViewDelegate <NSObject>@optional- (void)searchViewTapEventString:(NSString *)string;@end@interface SearchView : UIView@property (nonatomic, weak) id<SearchViewDelegate> delegate;@property (nonatomic, assign) CGRect startFrame;@property (nonatomic, assign) CGRect endFrame;@property (nonatomic, strong) NSArray *dataStringArray; // 数据源数组- (void)expendCellAnimated:(BOOL)animated;@end
//// SearchView.m// SearchView//// Created by YouXianMing on 14/12/25.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "SearchView.h"#import "SearchViewCell.h"static NSString *searchViewCell = @"searchViewCell";@interface SearchView ()<UITableViewDataSource, UITableViewDelegate>@property (nonatomic, strong) UITableView *tableView;@property (nonatomic, strong) NSArray *stringArray; // 数据源@end@implementation SearchView- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // 初始化TableView self.tableView = [[UITableView alloc] initWithFrame:self.bounds style:UITableViewStylePlain]; self.tableView.delegate = self; self.tableView.dataSource = self; self.tableView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.75]; self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; [self.tableView registerClass:[SearchViewCell class] forCellReuseIdentifier:searchViewCell]; [self addSubview:self.tableView]; } return self;}#pragma mark - 代理方法- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.stringArray.count + 1;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { SearchViewCell *cell = [tableView dequeueReusableCellWithIdentifier:searchViewCell]; if (indexPath.row == 0) { cell.textLabel.text = @"search..."; cell.textLabel.textColor = [UIColor colorWithRed:0.780 green:0.800 blue:0.812 alpha:1]; cell.textLabel.font = [UIFont italicSystemFontOfSize:16.f]; cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.backgroundColor = [UIColor clearColor]; cell.showLine = YES; return cell; } // 获取文本 cell.textLabel.text = self.stringArray[indexPath.row - 1]; cell.textLabel.textColor = [UIColor yellowColor]; cell.backgroundColor = [UIColor clearColor]; return cell;}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 50.f;}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == 0) { if (_delegate && [_delegate respondsToSelector:@selector(searchViewTapEventString:)]) { [_delegate searchViewTapEventString:@"搜索"]; } } else { if (_delegate && [_delegate respondsToSelector:@selector(searchViewTapEventString:)]) { [_delegate searchViewTapEventString:self.stringArray[indexPath.row - 1]]; } } UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; [cell setSelected:NO animated:YES];}- (void)expendCellAnimated:(BOOL)animated { // 如果为空,则直接返回 if (self.dataStringArray == nil) { return; } self.stringArray = [NSArray arrayWithArray:self.dataStringArray]; if (animated) { NSMutableArray *indexPathArray = [NSMutableArray array]; for (int i = 0; i < self.stringArray.count; i++) { NSIndexPath *path = [NSIndexPath indexPathForRow:i+1 inSection:0]; [indexPathArray addObject:path]; } [self.tableView insertRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationTop]; } else { [self.tableView reloadData]; }}#pragma mark - 重写setter,getter方法@synthesize startFrame = _startFrame;- (void)setStartFrame:(CGRect)startFrame { _startFrame = startFrame; self.frame = startFrame;}- (CGRect)startFrame { return _startFrame;}@end
SearchViewCell.h + SearchViewCell.m
//// SearchViewCell.h// SearchView//// Created by YouXianMing on 14/12/25.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <UIKit/UIKit.h>@interface SearchViewCell : UITableViewCell@property (nonatomic, assign) BOOL showLine;@end
//// SearchViewCell.m// SearchView//// Created by YouXianMing on 14/12/25.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "SearchViewCell.h"@interface SearchViewCell ()@property (nonatomic, strong) UIView *line;@end@implementation SearchViewCell- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { self.selectedBackgroundView = [self createSelectedBackgroundView]; // 线条view _line = [[UIView alloc] initWithFrame:CGRectMake(15, 49, 400, 1)]; _line.backgroundColor = [UIColor redColor]; _line.alpha = 0; [self addSubview:_line]; } return self;}- (UIView *)createSelectedBackgroundView { UIView *selectedView = [[UIView alloc] initWithFrame:CGRectMake(10, 0, 3, 50)]; selectedView.backgroundColor = [UIColor purpleColor]; return selectedView;}- (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated];}@synthesize showLine = _showLine;- (void)setShowLine:(BOOL)showLine { _showLine = showLine; if (showLine == YES) { _line.alpha = 1.f; } else { _line.alpha = 0.f; }}- (BOOL)showLine { return _showLine;}@end
控制器源码:
//// ViewController.m// SearchView//// Created by YouXianMing on 14/12/25.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "SearchView.h"/** 枚举值 */typedef enum : NSUInteger { UIVIEW_BackgroundView = 0x19871220, UIVIEW_SearchView,} EnumViewController;@interface ViewController ()<SearchViewDelegate>@property (nonatomic, strong) SearchView *searchView;@end#define ScreenWidth [[UIScreen mainScreen] bounds].size.width#define ScreenHeight [[UIScreen mainScreen] bounds].size.height@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // 设置背景图 self.view.layer.contents = (__bridge id)([UIImage imageNamed:@"bgImg"].CGImage); // 隐藏状态栏 [UIApplication sharedApplication].statusBarHidden = YES; // 按钮 UIButton *button = [[UIButton alloc] initWithFrame:self.view.bounds]; [self.view addSubview:button]; [button addTarget:self action:@selector(buttonEvent:) forControlEvents:UIControlEventTouchUpInside];}/** * 代理方法 * * @param string 被点击的字符串 */- (void)searchViewTapEventString:(NSString *)string { NSLog(@"%@", string);}/** * 创建出SearchView * * @param duration 动画执行时间 */- (void)createSearchViewWithAnimatedDuration:(CGFloat)duration { SearchView *searchView = [[SearchView alloc] initWithFrame:CGRectMake(ScreenWidth, 0, ScreenWidth, ScreenHeight)]; searchView.alpha = 0.f; searchView.delegate = self; searchView.tag = UIVIEW_SearchView; searchView.dataStringArray = @[@"YouXianMing", @"Soup", @"Y.X.M.", @"Play Game", @"WaKaLiMaXiDa.", @"E.T.", @"Q.L.", @"SLG"]; [self.view addSubview:searchView]; UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 3, ScreenHeight)]; lineView.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.5f]; [searchView addSubview:lineView]; [UIView animateWithDuration:duration delay:0.f usingSpringWithDamping:1.f initialSpringVelocity:1.f options:UIViewAnimationOptionLayoutSubviews animations:^{ searchView.alpha = 1.f; searchView.frame = CGRectMake(120, 0, ScreenWidth, ScreenHeight); } completion:^(BOOL finished) { [searchView expendCellAnimated:YES]; }];}/** * 移除SearchView * * @param duration 动画执行时间 */- (void)removeSearchViewWithAnimatedDuration:(CGFloat)duration { UIView *searchView = [self.view viewWithTag:UIVIEW_SearchView]; [UIView animateWithDuration:duration animations:^{ searchView.frame = CGRectMake(ScreenWidth, 0, ScreenWidth, ScreenHeight); searchView.alpha = 0.f; } completion:^(BOOL finished) { [searchView removeFromSuperview]; }];}/** * 创建出背景View * * @param duration 动画执行时间 */- (void)createBackgroundViewWithAnimatedDuration:(CGFloat)duration { UIView *backedgroundView = [[UIView alloc] initWithFrame:self.view.bounds]; backedgroundView.backgroundColor = [UIColor blackColor]; backedgroundView.tag = UIVIEW_BackgroundView; backedgroundView.alpha = 0.f; backedgroundView.userInteractionEnabled = NO; [self.view addSubview:backedgroundView]; [UIView animateWithDuration:duration animations:^{ backedgroundView.alpha = 0.35; }];}/** * 移除背景View * * @param duration 动画执行时间 */- (void)removeBackgroundViewWithAnimatedDuration:(CGFloat)duration { UIView *backedgroundView = [self.view viewWithTag:UIVIEW_BackgroundView]; [UIView animateWithDuration:duration animations:^{ backedgroundView.alpha = 0.f; } completion:^(BOOL finished) { [backedgroundView removeFromSuperview]; }];}/** * 按钮点击事件 * * @param button 按钮 */- (void)buttonEvent:(UIButton *)button { if (button.selected == NO) { button.selected = YES; [self createBackgroundViewWithAnimatedDuration:0.45]; [self createSearchViewWithAnimatedDuration:0.45]; } else { button.selected = NO; [self removeBackgroundViewWithAnimatedDuration:0.45]; [self removeSearchViewWithAnimatedDuration:0.45]; }}@end
以下是需要注意的一些小地方:
搜索菜单栏侧滑效果控件SearchView
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。