`
zxs19861202
  • 浏览: 916016 次
  • 性别: Icon_minigender_1
  • 来自: 湖北—》上海
社区版块
存档分类
最新评论

IOS 利用UIScrollview实现滑动筛选

    博客分类:
  • ios
阅读更多

在ios中经常会用到滑动筛选的功能,如下:




利用UIScrollview控件可以实现上述功能,思路大致是:创建一个UIView,宽度为屏幕宽度320,高度为以上图的背景图高度,在UIView上添加一个 UIScrollView宽度为一个类型的宽度,设置UIscrollView自动停止滚动,设置两边被遮盖的区域可见,將类型添加到UIScrollview中,并设置他们的位置,这样效果是有了,但是这个时候只能在UISCrollview上滑动,即上图中间一块区域,要实现两边都可以滑动,需要重写UIView 的hitTest,將UIView两边的滑动事件交给UIScrollview即可。当然这样也可以实现类似Safari浏览器的多试图切换的效果。下面直接上示例代码:


 

 

TopscrollView.h的代码如下:

 

#import <UIKit/UIKit.h>

 

@protocol TopScrollViewDelegate;

 

@interface TopScrollView : UIView<UIScrollViewDelegate>{

 

    UIScrollView *scrollview;

 

    id <TopScrollViewDelegate> _delegate;

}

 

@property(retain,nonatomic)UIScrollView *scrollview;

 

@property(retain,nonatomic)id <TopScrollViewDelegate> delegate;

 

@end

 

@protocol TopScrollViewDelegate <NSObject>

 

@required

 

//UIScrollView 滑动结束事件代理

- (void)TopScrollView:(TopScrollView *)foodTopView pageIndex:(NSInteger)pageIndex;

 

@end

 

 

TopscrollView.m 代码

 

#import "TopScrollView.h"

 

const CGFloat topScrollObjHeight = 38.0;

const CGFloat topScrollObjWidth = 101.0;

const NSUInteger topNumImages = 6;

 

 

@implementation TopScrollView

 

@synthesize scrollview;

@synthesize delegate=_delegate;

 

 

//设置UIScrollview子试图的frame和可滚动区域

- (void)layoutTopScrollImages

{

UIImageView *view = nil;

NSArray *subviews = [scrollview subviews];

 

CGFloat curXLoc = 0;

for (view in subviews)

{

if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)

{

CGRect frame = view.frame;

frame.origin = CGPointMake(curXLoc, 0);

view.frame = frame;

curXLoc += (topScrollObjWidth);

}

 

 

}

    [scrollview setContentSize:CGSizeMake((topNumImages * topScrollObjWidth), [scrollview bounds].size.height)];

 

 

}

 

 

 

- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

 

        scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(110, 0, 101, 39)];

        [scrollview setCanCancelContentTouches:NO];

        scrollview.indicatorStyle = UIScrollViewIndicatorStyleWhite;

        scrollview.clipsToBounds = NO; //是否溢出

        scrollview.scrollEnabled = YES;

        scrollview.pagingEnabled = YES;     //是否自动停止

        scrollview.showsHorizontalScrollIndicator=NO//是否显示水平滚动条

        scrollview.delegate=self;

 

        NSMutableArray *title=[[NSMutableArray alloc]initWithObjects:@"开胃菜",@"主餐类",@"主食",@"火锅",@"甜点",@"茶饮", nil];

 

        NSUInteger i;

 

        for (i = 1; i <= topNumImages; i++)

        {

            NSString *imageName = [NSString stringWithFormat:@"food_top_sigle_bg.png"];

            UIImage *image = [UIImage imageNamed:imageName];

            UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

 

            CGRect rect = imageView.frame;

            rect.size.height = topScrollObjHeight;

            rect.size.width = topScrollObjWidth;

            imageView.frame = rect;

            imageView.tag = i;

 

            UILabel *lable=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 101, 39)];

            lable.text=[title objectAtIndex:(i-1)];

            lable.textColor=[UIColor colorWithRed:131/255.0 green:147/255.0 blue:89/255.0 alpha:1];

            lable.font=[UIFont fontWithName:@"Helvetica" size:17];

            lable.backgroundColor=[UIColor clearColor];

            lable.textAlignment=UITextAlignmentCenter;

            [imageView addSubview:lable];

 

            [scrollview addSubview:imageView];

            [imageView release];

        }

 

        [self addSubview:scrollview];

        [scrollview release];

        [title release];

 

        [self layoutTopScrollImages];

 

 

    }

    return self;

}

 

//这里將整个UIView区域的事件都交给UIScrillView

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    if (CGRectContainsPoint(CGRectMake(0,0,320,39), point)) {

 

        return scrollview;

    }

    return [super hitTest:point withEvent:event];

}

 

- (void)dealloc

{

    [scrollview release];

    [super dealloc];

}

 

//滑动结束,即类型切换时更新内容

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

 

    int index=self.scrollview.contentOffset.x/topScrollObjWidth+1;

 

    if ([_delegate respondsToSelector:@selector(FoodTopScrollView:pageIndex:)]) {

 

[_delegate FoodTopScrollView:self pageIndex:index];

}

}

 

@end

  • 大小: 32.8 KB
  • 大小: 162.6 KB
分享到:
评论
1 楼 f5528710 2016-05-19  
        

相关推荐

    iOS 仿京东淘宝商品详情tableView上滑和headerView之间的滑动效果

    总的来说,实现"iOS 仿京东淘宝商品详情tableView上滑和headerView之间的滑动效果"需要对UITableView的滚动机制有深入理解,同时熟练掌握手势识别、视图动画以及UI组件的自定义。通过以上步骤,开发者可以创建出具有...

    ios-仿苹果地图搜索滑动视图.zip

    在iOS开发中,创建一个仿苹果地图搜索滑动视图是一项常见的需求,它涉及到用户界面设计、滚动视图(UIScrollView)的使用以及自定义视图(UIView)的绘制。这个"ios-仿苹果地图搜索滑动视图.zip"文件很可能包含了一...

    IOS商品列表

    在iOS应用开发中,"IOS商品列表"是一个常见的功能需求,尤其在电商或者购物类应用中,用户需要能够浏览各种商品并进行筛选。这个功能的核心是实现一个高效的、易用的商品展示界面,通常以列表的形式呈现。在这个场景...

    XMTopScrollView头部可滑动分段显示控件

    通过继承或嵌套UIScrollView,XMTopScrollView能够实现水平滑动的分段效果。每个分段通常是一个UIView的子类,包含了相应的标题和内容。当用户滑动时,控件会自动高亮当前选中的分段,提供清晰的视觉反馈。 ...

    上下左右滑动表合格

    在iOS开发中,实现这样的功能可能需要利用UITableView或UICollectionView结合UIScrollView的Delegate和DataSource协议。开发者需要处理好cell的重用机制,以提高性能。同时,为了实现左右滑动,可能需要自定义cell...

    ios-多种按钮样式.zip

    本资源“ios-多种按钮样式.zip”提供了两种独特样式的按钮视图,分别是“带图标筛选按钮视图”和“多按钮选择滚动视图”。这些视图的实现基于开源项目SYButtonView,作者是potato512,可以在GitHub上找到...

    ios-简单自定义字母列表.zip

    在iOS开发中,自定义字母列表是一个常见的需求,特别是在实现类似通讯录的界面时,用户可以通过点击或滑动字母来快速定位到特定的部分。本文将详细介绍如何基于ScrollView创建一个简单的字母筛选视图,并探讨相关的...

    ios-SHScrollecView.zip

    在iOS开发中,`SHScrollView`可能是一个自定义的滚动视图控件,它扩展了标准的`UIScrollView`,以实现特定的分段选择功能。`UIScrollView`是苹果提供的一个核心视图,用于展示可滚动内容,如图片、文本或者其他的...

    ios-SFCalendarProject.zip

    4. **手势识别**:为了实现日历的滑动切换,项目可能使用了`UIScrollView`的手势识别功能,如`UIPanGestureRecognizer`,以便响应用户的滑动操作。 5. **数据存储与同步**:如果日历需要显示特定的事件或标记,那么...

    swift-模仿网易的标签选择实现懒加载

    在iOS应用开发中,我们经常需要创建一个类似网易新闻的标签选择器,它允许用户通过点击不同的标签来筛选内容。这种功能在新闻、电商或社交应用中非常常见。本文将详细介绍如何使用Swift来实现这一功能,并结合懒加载...

    使用Scroll View显示一个文件夹的缩略图,类似图片浏览器

    在iOS中,ScrollView是UIScrollView类,而在Android中,它是ScrollView或HorizontalScrollView(适用于横向滚动)类。 1. **布局设计** 在设计界面时,我们需要将ScrollView作为最外层容器,然后在其内部添加一个...

    手机滚动展示一年的价格日历

    滑动滚动效果应该平滑流畅,可以利用iOS的`UIScrollView`或Android的`HorizontalScrollView`实现。点击日期单元格应能展开详情,这需要监听触摸事件,并处理相应的动画和视图切换。此外,为了提高用户体验,可以考虑...

    ImagesGallery

    另外,为了提供良好的用户体验,滑动浏览图片时,可以使用UICollectionView的无限滚动功能,配合UIScrollView的contentOffset属性和reloadData方法,实现平滑的滚动效果。 对于性能优化,Swift提供了GCD(Grand ...

Global site tag (gtag.js) - Google Analytics