| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- //
- // LibraryScrollView.m
- //
- //
- // Created by Alexi on 3/12/14.
- // Copyright (c) 2014 Harman. All rights reserved.
- //
- #if kSupportLibraryPage
- #import "LibraryScrollView.h"
- #import "UIViewController+Layout.h"
- #import "UIView+Layout.h"
- @implementation LibraryScrollView
- - (instancetype)init
- {
- if (self = [super init]) {
- _scrollView.scrollEnabled = YES;
- self.backgroundColor = kClearColor;
- _scrollView.backgroundColor = kClearColor;
- _scrollView.clipsToBounds = NO;
- }
- return self;
- }
- - (void)relayoutFrameOfSubViews
- {
- [super relayoutFrameOfSubViews];
-
- NSInteger pageIndex = _pageIndex;
-
- // [self scrollTo:pageIndex];
- _scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width * _pages.count, _scrollView.frame.size.height);
-
- for (NSInteger page = 0 ; page < _pages.count; page++)
- {
- UIViewController *nav = [_pages objectAtIndex:page];
- if (nav.view.superview)
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * page;
- nav.view.frame = rect;
- [nav layoutSubviewsFrame];
- }
- }
- [self scrollTo:pageIndex];
- }
- - (void)scrollTo:(NSInteger)pageIndex
- {
- if (pageIndex < 0 || pageIndex >= _pages.count)
- {
- return;
- }
- _pageControlUsed = YES;
-
- [UIView animateWithDuration:0.3 animations:^{
- CGFloat pageWidth = _scrollView.frame.size.width;
- CGPoint p = _scrollView.contentOffset;
- p.x = pageIndex * pageWidth;
- _scrollView.contentOffset = p;
-
- if (_pageIndex == pageIndex)
- {
- UIViewController *nav = [_pages objectAtIndex:pageIndex];
- if (nav.view.superview)
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * pageIndex;
- nav.view.frame = rect;
- [nav layoutSubviewsFrame];
- }
- }
- else
- {
- UIViewController *nav = [_pages objectAtIndex:pageIndex];
- if (nav.view.superview == nil)
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * pageIndex;
- nav.view.frame = rect;
- nav.childSize = rect.size;
- [nav layoutSubviewsFrame];
- if (_ownController)
- {
- [_ownController addChild:nav container:_scrollView];
- }
- else
- {
- [_scrollView addSubview:nav.view];
- }
- }
- else
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * pageIndex;
- nav.view.frame = rect;
- [nav layoutSubviewsFrame];
- }
- }
- } completion:^(BOOL finished) {
- _pageIndex = pageIndex;
- _pageControlUsed = NO;
-
- }];
-
-
- }
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView
- {
- if (_pageControlUsed)
- {
- return;
- }
-
- CGFloat pageWidth = _scrollView.frame.size.width;
- CGPoint offset = _scrollView.contentOffset;
- NSInteger pi = floor(((offset.x - pageWidth/2)/pageWidth)+1);
-
-
- if (_pageIndex == pi)
- {
- return;
- }
- else
- {
- // [self loadPage];
- UIViewController *nav = [_pages objectAtIndex:pi];
-
-
- if (nav.view.superview == nil)
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * pi;
- nav.view.frame = rect;
- nav.childSize = rect.size;
- [nav layoutSubviewsFrame];
- if (_ownController)
- {
- [_ownController addChild:nav container:_scrollView];
- }
- else
- {
- [_scrollView addSubview:nav.view];
- }
-
- }
- else
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * pi;
- nav.view.frame = rect;
- [nav layoutSubviewsFrame];
- }
- _pageIndex = pi;
-
- if (_pageIndex >= 0 && _pageIndex < _pages.count)
- {
- if (_pageScrollDelegate && [_pageScrollDelegate respondsToSelector:@selector(onPageScrollView:scrollToPage:)])
- {
- [_pageScrollDelegate onPageScrollView:self scrollToPage:_pageIndex];
- }
- }
- }
-
- }
- - (void)loadPage
- {
- for (NSInteger page = 0 ; page < _pages.count; page++)
- {
- UIViewController *nav = [_pages objectAtIndex:page];
-
-
- if (nav.view.superview == nil)
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * page;
- nav.view.frame = rect;
- nav.childSize = rect.size;
- [nav layoutSubviewsFrame];
- if (_ownController)
- {
- [_ownController addChild:nav container:_scrollView];
- }
- else
- {
- [_scrollView addSubview:nav.view];
- }
-
- }
- else
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * page;
- nav.view.frame = rect;
- [nav layoutSubviewsFrame];
- }
- }
- }
- - (void)roratePages
- {
- for (NSInteger page = 0; page < _pages.count; page++)
- {
- UIViewController *nav = [_pages objectAtIndex:page];
- if (nav.view.superview != nil)
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * page;
- nav.view.frame = rect;
- [nav layoutSubviewsFrame];
- }
- }
-
- }
- - (void)loadPage:(NSInteger)page feedBack:(BOOL)need
- {
- if (page < 0)
- {
- return;
- }
-
- if (page >= _pages.count)
- {
- return;
- }
-
- if (_pages.count == 0) {
- return;
- }
-
- UIViewController *nav = [_pages objectAtIndex:page];
-
-
- if (nav.view.superview == nil)
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * page;
- nav.view.frame = rect;
- nav.childSize = rect.size;
- [nav layoutSubviewsFrame];
- if (_ownController)
- {
- [_ownController addChild:nav container:_scrollView];
- }
- else
- {
- [_scrollView addSubview:nav.view];
- }
- }
- else
- {
- CGRect rect = _scrollView.bounds;
- rect.origin.x = rect.size.width * page;
- nav.view.frame = rect;
- [nav layoutSubviewsFrame];
- }
-
- if (need)
- {
- if (_pageIndex >= 0 && _pageIndex < _pages.count)
- {
- if (_pageScrollDelegate && [_pageScrollDelegate respondsToSelector:@selector(onPageScrollView:scrollToPage:)])
- {
- [_pageScrollDelegate onPageScrollView:self scrollToPage:_pageIndex];
- }
- }
- }
-
- }
- @end
- #endif
|