MyPageView是自定义的UIView。实现效果如下。
1.MyPageView.h
#import <UIKit/UIKit.h> @interface MyPageView : UIView<UIScrollViewDelegate> @property(strong,nonatomic) UIScrollView* scrollView; @property (strong, nonatomic) IBOutlet UIPageControl *pageControl; -(void)initPageViewWithViewController:(UIViewController*)controller imagePaths:(NSArray*)imagePathArr; @end
2.MyPageView.m
#import "MyPageView.h" @implementation MyPageView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code } return self; } -(void)initPageViewWithViewController:(UIViewController*)controller imagePaths:(NSArray*)imagePathArr{ NSInteger count = [imagePathArr count]; CGFloat height = self.frame.size.height; CGFloat width = self.frame.size.width; self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, width, height)]; self.scrollView.contentSize = CGSizeMake(width*count, height); self.scrollView.showsVerticalScrollIndicator = FALSE; self.scrollView.showsHorizontalScrollIndicator = FALSE; //important [self.scrollView setPagingEnabled:YES]; [self addSubview:self.scrollView]; CGFloat pageControlWidth = 10.0f * count; CGFloat pageControlHeight = 15.0f; self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake((width - pageControlWidth) / 2, height - pageControlHeight, pageControlWidth, pageControlHeight)]; [self.pageControl setCurrentPage:0]; [self.pageControl setNumberOfPages:count]; [self.pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged]; [self addSubview:self.pageControl]; NSInteger index = 0; for(NSString *imagePath in imagePathArr){ CGFloat xPos = index * width; UIImageView* imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xPos, 0, width, height)]; imageView.image = [UIImage imageNamed:imagePath]; [self.scrollView addSubview:imageView]; index++; } //implement UIScrollViewDelegate self.scrollView.delegate = self; } - (void) scrollViewDidScroll: (UIScrollView *) aScrollView { CGFloat width = self.frame.size.width; CGPoint offset = aScrollView.contentOffset; self.pageControl.currentPage = offset.x / width; } //在点击pageControl时调用 - (IBAction)changePage:(id)sender { CGFloat width = self.frame.size.width; [UIView animateWithDuration:0.3f animations:^{ int whichPage = self.pageControl.currentPage; self.scrollView.contentOffset = CGPointMake(width * whichPage, 0.0f); }]; } @end
3.调用方法
MyPageView* pageView = [[MyPageView alloc] initWithFrame:CGRectMake(0,44.0f,320.0f,140.0f)]; NSMutableArray* arr = [NSMutableArray array]; [arr addObject:@"m1.png"]; [arr addObject:@"m2.png"]; [pageView initPageViewWithViewController:self imagePaths:arr]; [self.view addSubview:pageView];