在网上搜了好多对于做下拉菜单的代码,大部分都是做tableview的下拉菜单或者是抄袭,对于大牛们所说的简单类似于tableview的说法,我觉得没那么简单。琢磨了好久,还是用这个方法做了一个scrollview下拉菜单的例子,另外添加点击转跳用的是按钮转跳没有用cell事件注意了。
首先要创建一个uiview文件,设置好需要做的scrollview样板这里就给小菜们手打一个样板
.h文件里
#import <UIKit/UIKit.h> @class AEArtStudioController;//因为是交叉使用函数所以用@class来引用 @interface PullDownVIew : UIView<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout> { AEArtStudioController *m_studio_control;//执行点击转跳的页面(文件名*函数名) } @property (strong, nonatomic)UICollectionView *collectionView; @property (nonatomic,strong) NSString *cellString; @property (nonatomic,retain) NSArray *scrollviewArray; -(id)initWithFrame:(CGRect)frame :(AEArtStudioController *)studio_control; @end
.m文件里
- (id)initWithFrame:(CGRect)frame :(AEArtStudioController *)studio_control { self = [super initWithFrame:frame]; if (self) { m_studio_control = studio_control;//执行转跳赋值 self.backgroundColor=[[UIColor blackColor] colorWithAlphaComponent:0.5]; [self collectionView_pull];//要执行的collectionview内容添加到本函数里 self.scrollviewArray = @[@"北京市", @"天津市",@"上海市",@"重庆市",@"黑龙江",@"吉林省",@"辽宁省",@"内蒙古",@"河北省",@"山东省",@"江苏省",@"浙江省",@"福建省",@"台湾省",@"广东省",@"江西省",@"湖南省",@"安徽省",@"湖北省",@"河南省",@"山西省",@"宁夏",@"陕西省",@"甘肃省",@"青海省",@"四川省",@"贵州省",@"云南省",@"广西",@"西藏",@"新疆"]; } return self; } //继续编写collectionView
-(void)collectionView_pull
{
//确定是水平滚动,还是垂直滚动
UICollectionViewFlowLayout *flowLayout=[[UICollectionViewFlowLayoutalloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
//
self.collectionView=[[UICollectionViewalloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 330) collectionViewLayout:flowLayout];
self.collectionView.dataSource=self;
self.collectionView.delegate=self;
[self.collectionViewsetBackgroundColor:[UIColorcolorWithRed:250.0green:250.0blue:250.0alpha:0.9]];
//注册Cell,必须要有
[self.collectionViewregisterClass:[UICollectionViewCellclass] forCellWithReuseIdentifier:@"UICollectionViewCell"];
[selfaddSubview:self.collectionView];
}
//定义展示的UICollectionViewCell的个数
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return (_scrollviewArray.count);
// return [self.ViewControllerArry count];
}
//定义展示的Section的个数
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return1;
}
//每个UICollectionView展示的内容
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
staticNSString * CellIdentifier = @"UICollectionViewCell";
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
cell.backgroundColor = [UIColorclearColor];
UIButton *labelBtn = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];
// 按钮位置
labelBtn.frame = CGRectMake(0, 0, 85, 30);
[labelBtn setTitle:@""forState:UIControlStateNormal];
// 字体位置
[labelBtn setTitleEdgeInsets:UIEdgeInsetsMake(5, 10, 5, 10)];
labelBtn.titleLabel.font = [UIFontsystemFontOfSize: 16.0];
[labelBtn setTitleColor:[UIColorgrayColor] forState:UIControlStateNormal];
labelBtn.backgroundColor = [UIColorwhiteColor];
// 设置Button圆角
[labelBtn.layersetMasksToBounds:YES];
[labelBtn.layersetCornerRadius:3.0]; //设置矩形四个圆角半径
[labelBtn addTarget:selfaction:@selector(jump_city) forControlEvents:UIControlEventTouchUpInside];
UILabel *label = [[UILabelalloc]initWithFrame:CGRectMake(17, 2, 60, 30)];
label.textColor = [UIColorblackColor];
label.text =[self.scrollviewArrayobjectAtIndex:[indexPath row]];
label.backgroundColor =[UIColorcolorWithRed:221.0green:219.0blue:218.0alpha:0.7];
[labelBtn addSubview:label ];
[cell.contentViewaddSubview:labelBtn];
return cell;
}
//定义每个Item 的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
returnCGSizeMake(73, 30);
// 上下间距
}
//定义每个UICollectionView 的 margin
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
returnUIEdgeInsetsMake(5, 20, 80,30);
// 上坐下有
}
-(void)jump_city//点击转跳翻页
{
AE_draw_info_right *infoLeft =[[AE_draw_info_rightalloc]init];
infoLeft.title =@"画室";
[m_studio_control.navigationControllerpushViewController:infoLeft animated:true];
}
@end
//点击事件的页面自己设置就可以了,大概思路就是在那个要展示的页面里的在新建的文件里的加入(.h文件里)
{PullDownVIew *m_pullDownView;}
- (void)viewDidLoad里创建一个按钮或label,然后在本函数viewDidLoad里设置一个下拉页面下拉位置
m_pullDownView = [[PullDownVIewalloc]initWithFrame:CGRectMake(0, -330, self.view.frame.size.width, 100) : self];
[self.view addSubview:m_pullDownView];
//注意是在(- (void)viewDidLoad里添加label)
//如果是按钮那就添加点击事件,如果是label那就添加手势动作。就不一一列举了,按钮最常见,那就举个label吧在-(void)viewDidLoad创建label。
UILabel *areaLabel = [[UILabelalloc] initWithFrame:CGRectMake(self.view.frame.size.width/2-40, 0, 80, 40)];
areaLabel.backgroundColor = [UIColorclearColor];
areaLabel.textColor = [UIColorwhiteColor];
areaLabel.textAlignment = NSTextAlignmentCenter;
areaLabel.font = [UIFontsystemFontOfSize:20.f];
areaLabel.text = @"AAA";
[titleView addSubview:imageViewtitle];
[titleView addSubview:areaLabel];
//给label添加一个点击事件手势
UITapGestureRecognizer *tapGes = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(tapSelectProvinceView)];
[titleView addGestureRecognizer:tapGes];
}
//点击事件
- (void)tapSelectProvinceView
{
NSLog(@"tapSelectProvinceView");
[UIViewanimateWithDuration:0.2animations:^{
if(m_pullDownView.frame.origin.y == -330)
{
CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
m_pullDownView.frame = frame;
}
elseif(m_pullDownView.frame.origin.y == 0) {
CGRect frame = CGRectMake(0, -330, self.view.frame.size.width, 100);
m_pullDownView.frame = frame;
}
}];
相关推荐
最新项目需求要求做一个三级下拉菜单列表(树形下拉菜单)。但UGUI并没有原生的插件,只能自己实现。思路每个级的ItemPanel(一个单级菜单条)样式是一样的,于是需要一个panel来装所有的itemPanel,在整个菜单 顶部...
Android UI设计之<十三>自定义ScrollView,实现QQ空间阻尼下拉刷新和渐变菜单栏效果,详http://blog.csdn.net/llew2011/article/details/52626148
"仿美团下拉菜单pop"是一种常见的交互设计元素,它在很多应用程序中被广泛采用,如电商、餐饮类应用,用于实现高效的一级和二级选项选择。这个项目"ExpandPopTabView-master"很可能是一个开源的Android库或代码示例...
Super ScrollView for UGUI提供基于UGUI ScrollRect的可轻松定制的ScrollView。它是一组C#脚本,可帮助您创建所需的ScrollView。这是非常强大的和高度优化的性能。 文件 Android演示应用程序 演示: - 聊天...
这种设计常见于新闻应用、社交媒体或者电商应用的导航栏,当用户下拉浏览内容时,顶部的菜单或标题会悬浮在屏幕上,提供持续的导航指示。 要实现这个功能,我们首先需要理解ScrollView的工作原理。ScrollView是...
这个DEMO是关于如何在Android平台上实现下拉刷新效果的一个实例,对于初学者和经验丰富的开发者来说,都是一个很好的学习资源。 首先,下拉刷新功能的核心在于`SwipeRefreshLayout`组件,这是Android SDK提供的一个...
要实现这个动画效果,我们需要做以下几个步骤: 1. **自定义tableHeaderView**: 创建一个继承自UIView的类,并在这个类中添加需要的视图元素。例如,我们可以添加一个UIImageView来展示图片,再添加UILabel来显示...
作者Jiang-Fallen,源码JFRefreshMenu,下拉菜单组件,可左右滑动选择内容,也可点击选择,两种操作方式。一款下拉的方式作为选择项的组件,提供两种用户交互方式 通过ScrollView分类添加,针对ScrollView及其...
"PullToRefresh",即下拉刷新,通过监听用户对ListView或ScrollView等滚动视图的操作,当检测到用户上滑并达到一定距离时,显示一个刷新指示器,然后执行数据加载或刷新操作。核心原理包括以下步骤: 1. 监听触摸...
在Android应用开发中,用户界面的设计是至关重要的,其中下拉菜单是一种常见的交互元素,用于展示更多的选项或者功能。本文将深入探讨“挤压式下划菜单(修改)”这一技术,它为用户提供了一种新颖、直观的方式来...
UGUI是Unity引擎内置的一套完整的2D图形用户界面框架,它提供了丰富的UI控件,如文本、图像、按钮、滑动条、下拉菜单等,用于创建复杂的交互式界面。UGUI基于Canvas和 RectTransform 系统,使得UI元素可以轻松地在3D...
在Android开发中,"下拉刷新"通常用于列表视图(ListView)或者滚动视图(ScrollView)中,当用户下拉列表时,可以显示更新内容的动画。这种效果可以增强用户体验,使数据实时更新变得直观且易于操作。实现这一功能...
- 当用户在`ScrollView`上滑动并停下来时,需要触发相应菜单项的选择事件。这可以通过`scrollViewDidEndDecelerating:`或`scrollViewDidEndScrollingAnimation:`方法实现,检测当前停在哪个子视图,然后更新主内容...
高仿淘宝首页菜单滑动效果,不分页。 重要逻辑:通过菜单的偏移量计算PageControl的偏移量 pageControl的偏移量为pageControl的总宽度减去滑块的总宽度, 同理scrollView的偏移量为scrollView的内容宽度减去...
在本例中,提到的是一个名为"datagrid-scrollview.js"的JavaScript文件,它可能是一个实现无限下拉加载功能的库或组件。 1. **无限滚动原理**: 无限下拉加载的基本原理是监听用户的滚动事件,当用户滚动到页面...
1. **SwipeRefreshLayout**:此库是Google提供的下拉刷新组件,包含了一个可以包裹其他ViewGroup的容器,如ScrollView或ListView。当用户下拉时,它会显示一个旋转的进度条,表示数据正在刷新。 2. **ListView** 或...
这种特效通常用于侧滑菜单或者下拉菜单,能够以动态的方式展示多个选项,增强用户界面的视觉吸引力和操作趣味性。下面将详细解释这种效果的实现原理、关键技术和相关知识点。 1. **Android UI框架**: 安卓UI框架...
3. 在选择分类时,更新顶部标签导航栏和内容视图的状态,同时记录当前选中的分类,以便在下拉菜单中高亮显示。 总结起来,iOS实现顶部标签式导航栏和下拉分类菜单的关键在于理解UIScrollView的滚动逻辑和联动机制,...
`PopupWindow`是一个可以显示在任意视图之上的浮动窗口,通常用于创建弹出式菜单、提示信息或者像通知栏下拉这样的交互元素。它的优点在于灵活性和可定制性,开发者可以根据需求自由设计窗口的样式和行为。 要创建...
- "右边菜单"可能指的是Floating Action Button (FAB)或者一个Action Bar中的下拉菜单,这些元素提供额外的功能或操作。 3. **Fragment**: - Fragment是Android中用于构建可重用的UI组件,它们可以在Activity的...