Skip to content

Instantly share code, notes, and snippets.

@syxc
Last active December 14, 2015 04:39
Show Gist options
  • Select an option

  • Save syxc/5030154 to your computer and use it in GitHub Desktop.

Select an option

Save syxc/5030154 to your computer and use it in GitHub Desktop.
//
// ImageSwitcher.h
//
// Created by syxc on 02/25/13.
// Copyright (c) 2013 Straw. All rights reserved.
//
@interface ImageSwitcher : UIView <UIScrollViewDelegate> {
CGRect viewSize;
UIScrollView *scrollView;
UIPageControl *pageControl;
NSArray *imageArray;
NSUInteger pageCount;
int switchSpeed; // 滚动速率
int currentAD;
}
- (id)initWithFrameRect:(CGRect)rect ImageArray:(NSArray *)array Speed:(int *)speed;
@end
//
// ImageSwitcher.m
//
// Created by syxc on 02/25/13.
// Copyright (c) 2013 Straw. All rights reserved.
//
#import "ImageSwitcher.h"
@implementation ImageSwitcher
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (id)initWithFrameRect:(CGRect)rect ImageArray:(NSArray *)array Speed:(int *)speed {
if ((self = [super initWithFrame:rect])) {
viewSize = rect;
imageArray = array;
switchSpeed = speed;
[self setFrame:viewSize];
[self setupImageSwitch];
[NSTimer scheduledTimerWithTimeInterval:switchSpeed target:self selector:@selector(scrollingTimer) userInfo:nil repeats:YES];
}
return self;
}
#pragma mark private Method
- (void)setupImageSwitch {
NSLog(@"-- setupImageSwitch");
currentAD = 0;
pageCount = [imageArray count];
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, viewSize.size.width, viewSize.size.height)];
scrollView.pagingEnabled = YES;
scrollView.contentSize = CGSizeMake(viewSize.size.width * pageCount, viewSize.size.height);
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.scrollsToTop = NO;
scrollView.delegate = self;
for (int i = 0; i < pageCount; i++) {
UIImage *img = [imageArray objectAtIndex:i];
UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
[imgView setFrame:CGRectMake(viewSize.size.width * i, 0, viewSize.size.width, viewSize.size.height)];
imgView.contentMode = UIViewContentModeScaleToFill;
imgView.tag = i;
UITapGestureRecognizer *Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imagePressed:)];
[Tap setNumberOfTapsRequired:1];
[Tap setNumberOfTouchesRequired:1];
imgView.userInteractionEnabled = YES;
[imgView addGestureRecognizer:Tap];
[scrollView addSubview:imgView];
}
[self addSubview:scrollView];
float pageControlWidth = pageCount * 10.0f + 50.f;
float pagecontrolHeight = 20.0f;
pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake((viewSize.size.width - pageControlWidth) / 2, viewSize.size.height - pagecontrolHeight, pageControlWidth, pagecontrolHeight)];
pageControl.currentPage = 1;
pageControl.numberOfPages = pageCount;
pageControl.autoresizingMask = UIViewAutoresizingNone;
[pageControl setBackgroundColor:[UIColor darkGrayColor]];
[pageControl setAlpha:0.8];
[pageControl setUserInteractionEnabled:NO];
[self addSubview:pageControl];
}
- (void)imagePressed:(UITapGestureRecognizer *)sender {
NSLog(@"imagePressed: %d", sender.view.tag);
}
- (void)scrollingTimer {
currentAD++;
if (currentAD >= pageCount) {
currentAD = 0;
[scrollView setContentOffset:CGPointMake(0, 0) animated:NO];
}
[scrollView setContentOffset:CGPointMake(currentAD * self.frame.size.width, 0) animated:YES];
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)sender {
// TODO: page圆点自动与手动滑动的同步处理
CGFloat pageWidth = scrollView.frame.size.width;
const int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
pageControl.currentPage = page;
}
@end
@syxc
Copy link
Author

syxc commented Feb 25, 2013

使用:

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImage *img1 = [UIImage imageNamed:@"1.png"];
    UIImage *img2 = [UIImage imageNamed:@"2.png"];
    UIImage *img3 = [UIImage imageNamed:@"3.png"];
    UIImage *img4 = [UIImage imageNamed:@"4.png"];
    UIImage *img5 = [UIImage imageNamed:@"5.png"];
    NSMutableArray *imgArray = [NSMutableArray arrayWithObjects:img1, img2, img3, img4, img5, nil];

    imgSwitch = [[ImageSwitcher alloc] initWithFrameRect:CGRectMake(10, 10, 300, 200) ImageArray:imgArray Speed:3];
    [self.view addSubview:imgSwitch];
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment