Last active
December 14, 2015 04:39
-
-
Save syxc/5030154 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // 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 |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
使用:
- (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]; }