ScrollPageDemo

#import "ViewController.h"

#import "NewsViewController.h"



#define kScreenBounds ([[UIScreen mainScreen] bounds])

#define kScreenWidth (kScreenBounds.size.width)

#define kScreenHeight (kScreenBounds.size.height)



@interface ViewController () <UIScrollViewDelegate>


@property (weak, nonatomic) IBOutlet UIScrollView *titleScrollView;

@property (weak, nonatomic) IBOutlet UIScrollView *contentScrollView;


@property (nonatomic, assign) NSInteger currentPageIndex; //!< 当前页

@property (nonatomic, assign) NSInteger nextPageIndex;//!< 下一页


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    // 自动设置第一个ScrollViewcontentInset属性,这里不让它自动调整

    // self.contentScrollView.contentInset

    self.automaticallyAdjustsScrollViewInsets = NO;

    

    // 创建对应的ViewController

    for (int i=0; i<5; i++) {

        NewsViewController *newsVC = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];

        

        // ViewController添加到ScrollView

        [self addChildViewController:newsVC];

        [self.contentScrollView addSubview:newsVC.view];

        [newsVC didMoveToParentViewController:self];

    

        // 调整每个ViewControllerViewframe

        newsVC.view.frame = CGRectMake(i*kScreenWidth, 0, kScreenWidth, kScreenHeight-64-44);

        

        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(i*100, 0, 100, 44)];

        label.text = [NSString stringWithFormat:@"%d", i];

        label.textAlignment = NSTextAlignmentCenter;

        label.tag = i+100;

        label.textColor = [UIColor colorWithRed:230/255.0f green:230/255.0f blue:230/255.0f alpha:1.0f];

        [self.titleScrollView addSubview:label];

    }

    

    self.contentScrollView.contentSize = CGSizeMake(kScreenWidth*5, kScreenHeight-64-44);

    self.titleScrollView.contentSize = CGSizeMake(5*100, 44);

    

    self.contentScrollView.delegate = self;

    self.contentScrollView.pagingEnabled = YES;

}


// ScrollView滚动的时候

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    CGFloat currentIndexOffsetX = self.currentPageIndex*kScreenWidth;

    NSLog(@"currentIndexOffsetX = %f currentPageIndex = %ld",currentIndexOffsetX,self.currentPageIndex);

    if (scrollView.contentOffset.x > currentIndexOffsetX) {

        self.nextPageIndex = self.currentPageIndex+1;

    }

    else {

        self.nextPageIndex = self.currentPageIndex-1;

    }


    

    CGFloat dist = ABS(scrollView.contentOffset.x - currentIndexOffsetX);

    CGFloat p = dist / kScreenWidth; // 移动的比例

    

    

    UILabel *currentPageTitleLabel = (UILabel *)[self.titleScrollView viewWithTag:100+self.currentPageIndex];

    UILabel *nextPageTitleLabel = (UILabel *)[self.titleScrollView viewWithTag:100+self.nextPageIndex];

    

    // 1.3

    // 按比例变形

    currentPageTitleLabel.transform = CGAffineTransformMakeScale(1.3 - 0.3*p, 1.3 - 0.3*p);

    nextPageTitleLabel.transform = CGAffineTransformMakeScale(1.0+0.3*p, 1.0+0.3*p);

    

    // 颜色的变化

    CGFloat c = 230 * p;

    CGFloat c1 = 25 * p;

    UIColor *selectedColor = [UIColor colorWithRed:(230-c)/255.0f green:(230-c)/255.0f blue:(230+c1)/255.0f alpha:1.0f];

    UIColor *unselectedColor = [UIColor colorWithRed:c/255.0f green:c/255.0f blue:(255-c1)/255.0f alpha:1.0f];

    currentPageTitleLabel.textColor = unselectedColor;

    nextPageTitleLabel.textColor = selectedColor;

}


- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

    NSInteger selectedTitleIndex = scrollView.contentOffset.x / kScreenWidth;

    UILabel *selectedTitleLabel = (UILabel *)[self.titleScrollView viewWithTag:selectedTitleIndex+100];

    

    // 滚动ScrollView,让指定的区域可见,这里是让titleScrollView滚动到让titleLabel显示出来

    [self.titleScrollView scrollRectToVisible:selectedTitleLabel.frame animated:YES];

}


// 开始拖拽的时候

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    self.currentPageIndex = scrollView.contentOffset.x / kScreenWidth;

}



- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值