假设做一个循环滚动UIScrollView

先上效果图:

首先初始化:

- (void)viewDidLoad
{
    //加入最后一张图 用于循环
    int length = 4;
    NSMutableArray *tempArray = [NSMutableArray array];
    for (int i = 0 ; i < length; i++)
    {

        NSString* str = [NSString stringWithFormat:@"title%d",i];
        [tempArray addObject:str];
    }

    NSMutableArray *itemArray = [NSMutableArray arrayWithCapacity:length+2];

    if (length > 1)
    {
        NSString *str1 = [tempArray objectAtIndex:length-1];  //title3
        SGFocusImageItem *item = [[SGFocusImageItem alloc] initWithTitle:str1 tag:-1];
        [itemArray addObject:item];
    }

    for (int i = 0; i < length; i++)
    {
        NSString *str2 = [tempArray objectAtIndex:i];
        SGFocusImageItem *item = [[SGFocusImageItem alloc] initWithTitle:str2 tag:i];
        [itemArray addObject:item];

    }

    //加入第一张图 用于循环
    if (length >1)
    {
        NSString *str3 = [tempArray objectAtIndex:0];
        SGFocusImageItem *item = [[SGFocusImageItem alloc] initWithTitle:str3 tag:length]; //title0
        [itemArray addObject:item];
    }
    ViewFrame *bannerView = [[ViewFrame alloc] initWithFrame:CGRectMake(0, 0, 320, 105) imageItems:itemArray isAuto:NO];

    [self.view addSubview:bannerView];

}
SGFocusImageItem仅仅有一个Title和tag:
@interface SGFocusImageItem : NSObject

@property (nonatomic, strong)  NSString     *title;
@property (nonatomic, assign)  NSInteger     tag;

- (id)initWithTitle:(NSString *)title tag:(NSInteger)tag;

@end

主要是ViewFrame:

#define ITEM_WIDTH 320.0
@interface ViewFrame : UIView<UIScrollViewDelegate>

@property(nonatomic,strong)NSMutableArray* imageItems;
@property(nonatomic,strong)UIScrollView* scrollView;

- (id)initWithFrame:(CGRect)frame imageItems:(NSArray *)items isAuto:(BOOL)isAuto;
@end
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    float targetX = _scrollView.contentOffset.x;
    NSLog(@"=====scrollViewdidscroll targetX=%f",targetX);

  <strong>  if ([_imageItems count] >= 3) {
        //假设超过最后一张图,则又一次设置setContentOffset
        if (targetX >= ITEM_WIDTH * ([_imageItems count]-1)) {
            targetX = ITEM_WIDTH;
            [_scrollView setContentOffset:CGPointMake(targetX, 0) animated:NO];
        }
        else if(targetX <= 0){
            targetX = ITEM_WIDTH * ([_imageItems count] - 2);
            [_scrollView setContentOffset:CGPointMake(targetX, 0) animated:NO];
        }
    }</strong>
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)setupViews{
    _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
    _scrollView.scrollsToTop = NO;

    CGSize size = CGSizeMake(320, 0);
    _scrollView.showsHorizontalScrollIndicator = NO;
    _scrollView.pagingEnabled = YES;
    _scrollView.delegate = self;
    _scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width * _imageItems.count,
                                         _scrollView.frame.size.height);
    [self addSubview:_scrollView];
    for (int i = 0; i < _imageItems.count; i++) {
        SGFocusImageItem* item = [_imageItems objectAtIndex:i];
        int x = i * _scrollView.frame.size.width;
        int width = _scrollView.frame.size.width;
        int height = _scrollView.frame.size.height;

        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(x, 0, width, height)];
        if (i == 0) {
            imageView.backgroundColor = [UIColor brownColor];
        } else if(i == 1) {
            imageView.backgroundColor = [UIColor orangeColor];
        } else if(i == 2) {
            imageView.backgroundColor = [UIColor blueColor];
        }else if(i == 3){
            imageView.backgroundColor = [UIColor redColor];
        }else if(i == 4){
            imageView.backgroundColor = [UIColor greenColor];
        }else if(i == 5) {
            imageView.backgroundColor = [UIColor lightGrayColor];
        }

        UITextField* field = [[UITextField alloc] initWithFrame:CGRectMake(x+160, 30, 50, 50)];
        field.text =  item.title;
        //   NSLog(@"====kkkkk title=%@",item.title);
        field.textAlignment = UITextAlignmentCenter;
        field.font = [UIFont systemFontOfSize:18];

        [_scrollView addSubview:imageView];
        [_scrollView addSubview:field];

    }

}

- (id)initWithFrame:(CGRect)frame imageItems:(NSArray *)items isAuto:(BOOL)isAuto{
    self = [super initWithFrame:frame];
    if (self) {
        _imageItems = [NSMutableArray arrayWithArray:items];
        [self setupViews];

    }
    return self;
}

代码能够在http://download.csdn.net/detail/baidu_nod/7679089下载

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-10-11 07:27:17

假设做一个循环滚动UIScrollView的相关文章

如果做一个循环滚动的UIScrollView

先上效果图: 先初始化: - (void)viewDidLoad { //添加最后一张图 用于循环 int length = 4; NSMutableArray *tempArray = [NSMutableArray array]; for (int i = 0 ; i < length; i++) { NSString* str = [NSString stringWithFormat:@"title%d",i]; [tempArray addObject:str]; } N

android做一个循环执行的线程

final Handler handler=new Handler(); final Runnable runnable=new Runnable() { @Override public void run() { // TODO Auto-generated method stub //要做的事情 handler.postDelayed(this, 1000); // 1秒后执行 } }; handler.postDelayed(runnable, 1000);//1秒执行一次runnable

APP中常见上下循环滚动通知的简单实现,点击可进入详情

关注finddreams博客,一起分享一起进步!http://blog.csdn.net/finddreams/article/details/45025865 对于能上下滚动的消息,我们并不陌生,常常在一些电商类的APP上有看到,比如淘宝之类的.大概的效果是一个不断上下循环滚动的通知,点击这个通知即可进去消息的详情界面.运行效果如下: (PS:别只顾看美女了,通知消息在下面) 这样的效果图是很多App中常见的布局,上面一个循环滚动的广告条,紧接着下面又是一个不断上下滚动的通知.关于循环滚动的广

Jquery制作--循环滚动列表

自己模仿JQ插件的写法写了一个循环滚动列表插件,支持自定义上.下.左.右四个方向,支持平滑滚动或者间断滚动两种方式,都是通过参数设置.JQ里面有些重复的地方,暂时没想到更好的方法去精简.不过效果还是可以的,如下(效果图上传后都加速了,实际效果比这个要慢很多): html代码如下: <!doctype html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <

UIScrollView循环滚动图片

转载自  http://www.jianshu.com/p/aa73c273baf2 我们会经常用到循环滚动图片,包括定时滚动,点击触发事件.以前所知道的循环滚动图片的方法是这样的.比如:一共5张图片,位置为1,2,3,4,5. 创建7个imageView. 将最后一张图片放到第一张图片前面,将第一张图片放到最后一张后面,位置为5,1,2,3,4,5,1. 最后一张图片滚动到第一张图片时,先从第二个图片5滚动到第二个图片1,滚动完之后把位置设置为第一个图片1.从后向前滚动同样的原理. 在scro

使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果

利用UIScrollView的滚动效果来实现,先上图: 实现过程是:在viewController里先增加UIScrollView和UIPageControl: -(void) loadView { [super loadView]; UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320,480)]; UIPageControl* pageControl = [[UIPageCont

使用UIScrollView和UIPageControl做一个可以用手势来切换图片的效果

利用UIScrollView的滚动效果来实现,先上图: 实现过程是:在viewController里先加入UIScrollView和UIPageControl: -(void) loadView { [super loadView]; UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320,480)]; UIPageControl* pageControl = [[UIPageCont

android如何写一个循环文字滚动的TextView

效果图: 在layout中这样来声明: <com.kaixin001.view.ScrollText android:id="@+id/news_statustxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" android:paddingRight="1

使用UIScrollView 结合 UIImageView 实现图片循环滚动

场景: 在开发工作中,有时我们需要实现一组图片循环滚动的情况.当我们使用 UIScrollView 结合 UIImageView 来实现时,一般 UIImageView 会尽量考虑重用,下面例子是以(左中右)三个 UIImageView 的使用,其实也可以考虑使用 两个 UIImageView 实现的情况.这样避免 一组图片多少个就对应多少个 UIImageView 所导致占用过多内存的情况. 效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2