`

对于做scrollview的下拉菜单做法

 
阅读更多

在网上搜了好多对于做下拉菜单的代码,大部分都是做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;

        }

        

 

    }];

 

 

 

   

 

  • 大小: 105.5 KB
分享到:
评论

相关推荐

    Unity(UGUI)做一个三级下拉菜单列表(树形下拉菜单)。

    最新项目需求要求做一个三级下拉菜单列表(树形下拉菜单)。但UGUI并没有原生的插件,只能自己实现。思路每个级的ItemPanel(一个单级菜单条)样式是一样的,于是需要一个panel来装所有的itemPanel,在整个菜单 顶部...

    自定义ScrollView,实现QQ空间阻尼下拉刷新和渐变菜单栏效果

    Android UI设计之&lt;十三&gt;自定义ScrollView,实现QQ空间阻尼下拉刷新和渐变菜单栏效果,详http://blog.csdn.net/llew2011/article/details/52626148

    仿美团下拉菜单pop

    "仿美团下拉菜单pop"是一种常见的交互设计元素,它在很多应用程序中被广泛采用,如电商、餐饮类应用,用于实现高效的一级和二级选项选择。这个项目"ExpandPopTabView-master"很可能是一个开源的Android库或代码示例...

    Super ScrollView for UGUI 2.2.2一款unity3d非常强大的滑动制作插件

    Super ScrollView for UGUI提供基于UGUI ScrollRect的可轻松定制的ScrollView。它是一组C#脚本,可帮助您创建所需的ScrollView。这是非常强大的和高度优化的性能。 文件 Android演示应用程序 演示: - 聊天...

    Android ScrollView子控件滑动顶部悬浮

    这种设计常见于新闻应用、社交媒体或者电商应用的导航栏,当用户下拉浏览内容时,顶部的菜单或标题会悬浮在屏幕上,提供持续的导航指示。 要实现这个功能,我们首先需要理解ScrollView的工作原理。ScrollView是...

    android下拉刷新菜单DEMO

    这个DEMO是关于如何在Android平台上实现下拉刷新效果的一个实例,对于初学者和经验丰富的开发者来说,都是一个很好的学习资源。 首先,下拉刷新功能的核心在于`SwipeRefreshLayout`组件,这是Android SDK提供的一个...

    swift-TableView的tableHeaderView的下拉动画效果包含放大与圆弧动画

    要实现这个动画效果,我们需要做以下几个步骤: 1. **自定义tableHeaderView**: 创建一个继承自UIView的类,并在这个类中添加需要的视图元素。例如,我们可以添加一个UIImageView来展示图片,再添加UILabel来显示...

    下拉菜单组件

    作者Jiang-Fallen,源码JFRefreshMenu,下拉菜单组件,可左右滑动选择内容,也可点击选择,两种操作方式。一款下拉的方式作为选择项的组件,提供两种用户交互方式 通过ScrollView分类添加,针对ScrollView及其...

    仿新浪微博下拉刷新android实例

    "PullToRefresh",即下拉刷新,通过监听用户对ListView或ScrollView等滚动视图的操作,当检测到用户上滑并达到一定距离时,显示一个刷新指示器,然后执行数据加载或刷新操作。核心原理包括以下步骤: 1. 监听触摸...

    挤压式下划菜单(修改)

    在Android应用开发中,用户界面的设计是至关重要的,其中下拉菜单是一种常见的交互元素,用于展示更多的选项或者功能。本文将深入探讨“挤压式下划菜单(修改)”这一技术,它为用户提供了一种新颖、直观的方式来...

    UGUI Super ScrollView 2.4.3.unitypackage

    UGUI是Unity引擎内置的一套完整的2D图形用户界面框架,它提供了丰富的UI控件,如文本、图像、按钮、滑动条、下拉菜单等,用于创建复杂的交互式界面。UGUI基于Canvas和 RectTransform 系统,使得UI元素可以轻松地在3D...

    actionbar下拉刷新demo eclipse

    在Android开发中,"下拉刷新"通常用于列表视图(ListView)或者滚动视图(ScrollView)中,当用户下拉列表时,可以显示更新内容的动画。这种效果可以增强用户体验,使数据实时更新变得直观且易于操作。实现这一功能...

    iOS 仿网易可滑动菜单

    - 当用户在`ScrollView`上滑动并停下来时,需要触发相应菜单项的选择事件。这可以通过`scrollViewDidEndDecelerating:`或`scrollViewDidEndScrollingAnimation:`方法实现,检测当前停在哪个子视图,然后更新主内容...

    高仿淘宝首页菜单滑动效果

    高仿淘宝首页菜单滑动效果,不分页。 重要逻辑:通过菜单的偏移量计算PageControl的偏移量 pageControl的偏移量为pageControl的总宽度减去滑块的总宽度, 同理scrollView的偏移量为scrollView的内容宽度减去...

    无限下拉加载

    在本例中,提到的是一个名为"datagrid-scrollview.js"的JavaScript文件,它可能是一个实现无限下拉加载功能的库或组件。 1. **无限滚动原理**: 无限下拉加载的基本原理是监听用户的滚动事件,当用户滚动到页面...

    android上拉加载下拉加载控件

    1. **SwipeRefreshLayout**:此库是Google提供的下拉刷新组件,包含了一个可以包裹其他ViewGroup的容器,如ScrollView或ListView。当用户下拉时,它会显示一个旋转的进度条,表示数据正在刷新。 2. **ListView** 或...

    安卓灵动菜单展开效果

    这种特效通常用于侧滑菜单或者下拉菜单,能够以动态的方式展示多个选项,增强用户界面的视觉吸引力和操作趣味性。下面将详细解释这种效果的实现原理、关键技术和相关知识点。 1. **Android UI框架**: 安卓UI框架...

    iOS实现顶部标签式导航栏及下拉分类菜单

    3. 在选择分类时,更新顶部标签导航栏和内容视图的状态,同时记录当前选中的分类,以便在下拉菜单中高亮显示。 总结起来,iOS实现顶部标签式导航栏和下拉分类菜单的关键在于理解UIScrollView的滚动逻辑和联动机制,...

    android通知栏下拉

    `PopupWindow`是一个可以显示在任意视图之上的浮动窗口,通常用于创建弹出式菜单、提示信息或者像通知栏下拉这样的交互元素。它的优点在于灵活性和可定制性,开发者可以根据需求自由设计窗口的样式和行为。 要创建...

    左边按钮右边菜单

    - "右边菜单"可能指的是Floating Action Button (FAB)或者一个Action Bar中的下拉菜单,这些元素提供额外的功能或操作。 3. **Fragment**: - Fragment是Android中用于构建可重用的UI组件,它们可以在Activity的...

Global site tag (gtag.js) - Google Analytics