UIScrollView视差模糊效果
效果
源码
https://github.com/YouXianMing/Animations
//
// ScrollBlurImageViewController.m
// Animations
//
// Created by YouXianMing on 15/11/25.
// Copyright 2015年 YouXianMing. All rights reserved.
//
#import "ScrollBlurImageViewController.h"
#import "MoreInfoView.h"
#import "UIView+SetRect.h"
#import "Math.h"
#import "UIImage+ImageEffects.h"
static int viewTag = 0x11;
@interface ScrollBlurImageViewController () <UIScrollViewDelegate>
@property (nonatomic, strong) NSArray *picturesArray;
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) Math *onceLinearEquation;
@end
@implementation ScrollBlurImageViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)setup {
[super setup];
MATHPoint pointA = MATHPointMake(0, -50);
MATHPoint pointB = MATHPointMake(self.view.width, self.view.width - 50);;
self.onceLinearEquation = [Math mathOnceLinearEquationWithPointA:pointA PointB:pointB];
// Init pictures data.
self.picturesArray = @[[UIImage imageNamed:@"beauty"],
[[UIImage imageNamed:@"beauty"] blurImage],
[[UIImage imageNamed:@"beauty"] grayScale]];
// Init scrollView.
CGFloat height = self.view.height;
CGFloat width = self.view.width;
_scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
_scrollView.delegate = self;
_scrollView.pagingEnabled = YES;
_scrollView.backgroundColor = [UIColor blackColor];
_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.bounces = NO;
_scrollView.contentSize = CGSizeMake(self.picturesArray.count * width, height);
[self.view addSubview:_scrollView];
// Init moreInfoViews.
for (int i = 0; i < self.picturesArray.count; i++) {
MoreInfoView *show = [[MoreInfoView alloc] initWithFrame:CGRectMake(i * width, 0, width, height)];
show.imageView.image = self.picturesArray[i];
show.layer.borderWidth = 0.25f;
show.layer.borderColor = [[UIColor grayColor] colorWithAlphaComponent:0.25f].CGColor;
show.tag = viewTag + i;
[_scrollView addSubview:show];
}
[self bringTitleViewToFront];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat X = scrollView.contentOffset.x;
for (int i = 0; i < self.picturesArray.count; i++) {
MoreInfoView *show = [scrollView viewWithTag:viewTag + i];
show.imageView.x = _onceLinearEquation.k * (X - i * self.view.width) + _onceLinearEquation.b;
}
}
@end
细节
时间: 2024-11-24 07:53:26