//
|
// LSPageScrollView.m
|
// LSPageControl
|
//
|
// Created by sen on 15/8/28.
|
// Copyright (c) 2015年 sen. All rights reserved.
|
//
|
|
#import "LSPageScrollView.h"
|
|
@interface LSPageScrollView()<UIScrollViewDelegate>{
|
UIScrollView* myscrollview;
|
UIView* pagecontrolview;
|
NSMutableArray* markimgs;
|
UIView* pagebgview;
|
UIImageView* moveMark;
|
NSInteger _num;
|
}
|
@property (nonatomic, weak) NSTimer *timer;
|
@end
|
|
@implementation LSPageScrollView
|
|
- (instancetype)initWithFrame:(CGRect)frame WithADArray:(NSArray *)DKarray itemSize:(CGSize)itemsize{
|
self = [super initWithFrame:frame];
|
if (self) {
|
_num = DKarray.count;
|
myscrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
|
myscrollview.backgroundColor = [UIColor lightGrayColor];
|
myscrollview.scrollsToTop = NO;
|
myscrollview.showsHorizontalScrollIndicator = NO;
|
myscrollview.delegate = self;
|
myscrollview.pagingEnabled = YES;
|
[self addSubview:myscrollview];
|
|
for (int i = 0; i<DKarray.count; i++) {
|
UIView* ADview = [[UIView alloc] initWithFrame:CGRectMake(i*itemsize.width, 0, itemsize.width, itemsize.height)];
|
[ADview addSubview:DKarray[i]];
|
[myscrollview addSubview:ADview];
|
}
|
myscrollview.contentSize = CGSizeMake(itemsize.width*_num, myscrollview.bounds.size.height);
|
//定时器
|
self.timer = [NSTimer scheduledTimerWithTimeInterval:8
|
target:self
|
selector:@selector(syncUIStatus)
|
userInfo:nil
|
repeats:YES];
|
|
markimgs = [NSMutableArray array];
|
|
pagecontrolview = [[UIView alloc] initWithFrame:CGRectMake(0, self.frame.size.height-20, self.frame.size.width, 20)];
|
[self addSubview:pagecontrolview];
|
|
pagebgview = [[UIView alloc] initWithFrame:CGRectZero];
|
[pagecontrolview addSubview:pagebgview];
|
|
[self loadPageControlSubViews];
|
}
|
return self;
|
}
|
|
- (void)loadPageControlSubViews{
|
for (int i = 0; i<_num; i++) {
|
UIImageView* imgv = [[UIImageView alloc] initWithFrame:CGRectZero];
|
imgv.backgroundColor = [UIColor lightGrayColor];
|
[pagebgview addSubview:imgv];
|
[markimgs addObject:imgv];
|
imgv.image = _defaultPageIndicatorImage;
|
if (_defaultPageIndicatorImage) {
|
imgv.backgroundColor = [UIColor clearColor];
|
}
|
}
|
//cur
|
moveMark = [[UIImageView alloc] initWithFrame:CGRectZero];
|
moveMark.backgroundColor = kGlobalYellowColor;
|
moveMark.image = _currentPageIndicatorImage;
|
|
if (_currentPageIndicatorImage) {
|
moveMark.backgroundColor = [UIColor clearColor];
|
}
|
[pagebgview addSubview:moveMark];
|
|
[self reloadPageViewSize];
|
}
|
|
- (void)reloadPageViewSize{
|
CGSize pageSize_def = CGSizeMake(12, 12);
|
CGSize pageSize_cur = CGSizeMake(12, 12);
|
|
if (_defaultPageIndicatorImage) {
|
pageSize_def = _defaultPageIndicatorImage.size;
|
}
|
if (_currentPageIndicatorImage) {
|
pageSize_cur = _currentPageIndicatorImage.size;
|
}
|
|
CGFloat bg_w = pageSize_def.width*0.5*_num+PAGECONTROL_jx*(_num-1);
|
CGFloat bg_h = pageSize_def.height*0.5;
|
|
pagebgview.frame = CGRectMake(CGRectGetMidX(pagecontrolview.frame)-bg_w*0.5, CGRectGetMidY(pagecontrolview.bounds)-bg_h*0.5, bg_w, bg_h);
|
|
//def
|
for (int i = 0; i<markimgs.count; i++) {
|
UIImageView* imgv = (UIImageView*)markimgs[i];
|
imgv.frame = CGRectMake(i*(pageSize_def.width*0.5+PAGECONTROL_jx), 0, pageSize_def.width*0.5, pageSize_def.height*0.5);
|
}
|
|
//cur
|
moveMark.frame = CGRectMake(0, 0, pageSize_cur.width*0.5, pageSize_cur.height*0.5);
|
}
|
|
#pragma mark 定时器执行方法
|
- (void)syncUIStatus{
|
CGFloat currentPage = myscrollview.contentOffset.x / myscrollview.bounds.size.width;
|
NSUInteger page = (NSUInteger)(currentPage + 1);
|
if (page==_num) {
|
[UIView animateWithDuration:0.5 animations:^{
|
myscrollview.contentOffset = CGPointMake(myscrollview.frame.origin.x, 0);
|
}];
|
return;
|
}
|
[UIView animateWithDuration:0.5 animations:^{
|
myscrollview.contentOffset = CGPointMake(myscrollview.contentOffset.x+self.frame.size.width, 0);
|
}];
|
}
|
|
|
#pragma mark - SET
|
- (void)setPages:(NSInteger)pages{
|
//未实现
|
_num = pages;
|
[markimgs removeAllObjects];
|
for (UIView* obj in pagebgview.subviews) {
|
[obj removeFromSuperview];
|
}
|
[self loadPageControlSubViews];
|
}
|
|
- (void)setShowstyle:(LSPageShowStyle)showstyle{
|
//未实现
|
_showstyle = showstyle;
|
}
|
|
- (void)setPagingEnabled:(BOOL)pagingEnabled{
|
_pagingEnabled = pagingEnabled;
|
myscrollview.pagingEnabled = _pagingEnabled;
|
}
|
- (void)setHiddenPageControl:(BOOL)hiddenPageControl{
|
_hiddenPageControl = hiddenPageControl;
|
pagecontrolview.hidden = _hiddenPageControl;
|
}
|
- (void)setDefaultPageIndicatorImage:(UIImage *)defaultPageIndicatorImage{
|
_defaultPageIndicatorImage = defaultPageIndicatorImage;
|
for (UIImageView* imgv in markimgs) {
|
imgv.image = defaultPageIndicatorImage;
|
imgv.backgroundColor = [UIColor clearColor];
|
}
|
[self reloadPageViewSize];
|
}
|
- (void)setCurrentPageIndicatorImage:(UIImage *)currentPageIndicatorImage{
|
_currentPageIndicatorImage = currentPageIndicatorImage;
|
moveMark.image = currentPageIndicatorImage;
|
moveMark.backgroundColor = [UIColor clearColor];
|
[self reloadPageViewSize];
|
}
|
|
#pragma mark - UIScrollViewDelegate
|
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
|
CGFloat scroll_content_w = myscrollview.contentSize.width-myscrollview.bounds.size.width;
|
CGFloat scroll_curr_x = scrollView.contentOffset.x;
|
|
CGFloat move_content_w = moveMark.superview.bounds.size.width-moveMark.bounds.size.width;
|
//求当前滑块的x坐标
|
CGFloat move_curr_x = move_content_w*scroll_curr_x/scroll_content_w;
|
moveMark.frame = CGRectMake(move_curr_x, 0, moveMark.frame.size.width, moveMark.frame.size.height);
|
}
|
|
@end
|