• 翻页效果


    新建一个PageView集成UIView:

    #import "pageView.h"
    #import <CoreGraphics/CoreGraphics.h>
    @interface pageView()
    @property(nonatomic,strong)CAGradientLayer * leftShadowLayer;
    @property(nonatomic,strong)CAGradientLayer * rightShadowLayer;
    @property(nonatomic,strong)UIImageView *leftImageView;
    @property(nonatomic,strong)UIImageView *rightImageView;
    @property(nonatomic) NSUInteger initialLocation;
    @property(nonatomic,strong)UIImageView * rightBackView;
    @end
    @implementation pageView
    -(void)awakeFromNib
    {
        [self config];
    }
    -(void)config{
        UIImage * image = [UIImage imageNamed:@"雨滴"];
        self.leftImageView = [[UIImageView alloc]init];
        self.rightImageView = [[UIImageView alloc]init];
        self.leftImageView.userInteractionEnabled = YES;
        self.rightImageView.userInteractionEnabled =  YES;
        self.leftImageView.frame = CGRectMake(0, 0, CGRectGetWidth(self.bounds)/2, CGRectGetHeight(self.bounds));
        self.rightImageView.layer.anchorPoint = CGPointMake(0,0.5);
        self.rightImageView.frame = CGRectMake(CGRectGetMidX(self.bounds), 0, CGRectGetWidth(self.bounds)/2, CGRectGetHeight(self.bounds));
        self.leftImageView.image = [self clipImageWithImage:image isLeftImage:YES];
        self.rightImageView.image = [self clipImageWithImage:image isLeftImage:NO];
        
        self.leftImageView.layer.mask = [self getCornerRidusMashWithIsLeft:YES Rect:self.leftImageView.bounds];
        self.rightImageView.layer.mask = [self getCornerRidusMashWithIsLeft:NO Rect:self.rightImageView.bounds];
        self.rightBackView = [[UIImageView alloc]init];
        self.rightBackView.frame = self.rightImageView.bounds;
        self.rightBackView.image = [self getBlurAndReversalImage:[self clipImageWithImage:image isLeftImage:NO]];
        self.rightBackView.alpha = 0;
        [self.rightImageView addSubview:self.rightBackView];
        
        self.leftShadowLayer = [CAGradientLayer layer];
        self.leftShadowLayer.opacity = 0;
        self.leftShadowLayer.colors = @[(id)[UIColor clearColor].CGColor,(id)[UIColor blackColor].CGColor];
        self.leftShadowLayer.frame = self.leftImageView.bounds;
        self.leftShadowLayer.startPoint = CGPointMake(1, 1);
        self.leftShadowLayer.startPoint = CGPointMake(0, 1);
        [self.leftImageView.layer addSublayer:self.leftShadowLayer];
        
        self.rightShadowLayer = [CAGradientLayer layer];
        self.rightShadowLayer.opacity = 0;
        self.rightShadowLayer.colors = @[(id)[UIColor clearColor].CGColor,(id)[UIColor blackColor].CGColor];
        self.rightShadowLayer.frame = self.rightImageView.bounds;
        self.rightShadowLayer.startPoint = CGPointMake(0, 1);
        self.rightShadowLayer.startPoint = CGPointMake(1, 1);
        [self.rightImageView.layer addSublayer:self.rightShadowLayer];
        [self addSubview:self.leftImageView];
        [self addSubview:self.rightImageView];
        self.rightImageView.layer.transform = [self getTransForm3DWithAngle:0];
        UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panHandle:)];
        [self.rightImageView addGestureRecognizer:pan];
    }
    -(CATransform3D)getTransForm3DWithAngle:(CGFloat)angle{
        CATransform3D  transform = CATransform3DIdentity;
        transform.m34 = 4.5/-2000;
        transform  = CATransform3DRotate(transform,angle, 0, 1, 0);
        return transform;
    }
    -(UIImage *)clipImageWithImage:(UIImage * )image isLeftImage:(BOOL)isLeft{
        CGRect imageRect = CGRectMake(0, 0, image.size.width/2, image.size.height);
        if (!isLeft) {
            imageRect.origin.x = image.size.width/2;
        }
        CGImageRef  imgRef = CGImageCreateWithImageInRect(image.CGImage, imageRect);
        UIImage * clipImage = [UIImage imageWithCGImage:imgRef];
        CGImageRelease(imgRef);
        return clipImage;
    }
    -(CAShapeLayer *)getCornerRidusMashWithIsLeft:(BOOL)isLeft Rect:(CGRect)rect{
        CAShapeLayer * layer = [CAShapeLayer layer];
        UIRectCorner corner = isLeft ? UIRectCornerTopLeft|UIRectCornerBottomLeft:UIRectCornerTopRight|UIRectCornerBottomRight;
        layer.path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corner cornerRadii:CGSizeMake(10, 10)].CGPath;
        return layer;
    }
    -(void)panHandle:(UIPanGestureRecognizer *)pan{
        
        CGPoint location = [pan locationInView:self];
        if (pan.state == UIGestureRecognizerStateBegan) {
            self.initialLocation = location.x;
        }
         NSLog(@"y:%@",[self.rightImageView.layer valueForKeyPath:@"transform.rotation.y"]);
        NSLog(@"x:%@",[self.rightImageView.layer valueForKeyPath:@"transform.rotation.x"]);
    
        
        if ([[self.rightImageView.layer valueForKeyPath:@"transform.rotation.y"] floatValue] > -M_PI_2&&([[self.rightImageView.layer valueForKeyPath:@"transform.rotation.x"] floatValue] != 0)) {
             NSLog(@"------------%@",[self.rightImageView.layer valueForKeyPath:@"transform.rotation.y"]);
            self.rightBackView.alpha = 1;
            self.rightShadowLayer.opacity = 0;
            CGFloat opacity = (location.x-self.initialLocation)/(CGRectGetWidth(self.bounds)-self.initialLocation);
            self.leftShadowLayer.opacity =fabs(opacity);
        }
        else if(([[self.rightImageView.layer valueForKeyPath:@"transform.rotation.y"] floatValue] > -M_PI_2)&&([[self.rightImageView.layer valueForKeyPath:@"transform.rotation.y"] floatValue]<0)&&([[self.rightImageView.layer valueForKeyPath:@"transform.rotation.x"] floatValue] == 0))
        {
            self.rightBackView.alpha = 0;
            CGFloat opacity = (location.x-self.initialLocation)/(CGRectGetWidth(self.bounds)-self.initialLocation);
            //self.rightShadowLayer.opacity = 0 ;
            self.rightShadowLayer.opacity =fabs(opacity)*0.5 ;
            self.leftShadowLayer.opacity =fabs(opacity)*0.5;
        }
        if ([self isLocation:location inView:self]) {
            CGFloat conversioFactor = M_PI/(CGRectGetWidth(self.bounds)-self.initialLocation);
            self.rightImageView.layer.transform = [self getTransForm3DWithAngle:(location.x-self.initialLocation)*conversioFactor];
        }
        else
        {
            pan.enabled=NO;
            pan.enabled=YES;
        }
        if (pan.state == UIGestureRecognizerStateEnded||pan.state == UIGestureRecognizerStateCancelled) {
            ;
        }
    }
    -(BOOL)isLocation:(CGPoint)location inView:(UIView *)view{
        if ((location.x>0 && location.x<CGRectGetWidth(view.frame))&&(location.y>0&&location.y<CGRectGetHeight(view.frame))) {
            return YES;
        }
        else
        {
            return NO;
        }
    }
    -(UIImage *)getBlurAndReversalImage:(UIImage *)image{
        CIContext * context = [CIContext contextWithOptions:nil];
        CIImage * inputImage = [CIImage imageWithCGImage:image.CGImage];
        CIFilter * filter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [filter setValue:inputImage forKey:kCIInputImageKey];
        [filter setValue:[NSNumber numberWithFloat:10.0f] forKey:@"inputRadius"];
        CIImage * result = [filter valueForKey:kCIOutputImageKey];
       result = [result imageByApplyingTransform:CGAffineTransformMakeTranslation(-1, 1)];
        CGImageRef ref = [context createCGImage:result fromRect:[inputImage extent]];
        UIImage * returnImage = [UIImage imageWithCGImage:ref];
        CGImageRelease(ref);
        return returnImage;
    }
    
    @end

    在Vc里面将这个PageView现实就可以了;滑动图片就可以看见翻页的效果了...

  • 相关阅读:
    看淘宝营销api 文档有感
    创业公司如何做好数据驱动的开发工作
    docker 常见错误总结
    从npm 角度理解 mvn 的 pom.xml
    best practices for designing web api
    我对自动化测试的一些认识
    Docker学习笔记
    Docker命令学习
    JVM学习笔记三:垃圾收集器与内存分配策略
    JVM学习笔记二:JVM参数
  • 原文地址:https://www.cnblogs.com/LzwBlog/p/5752006.html
Copyright © 2020-2023  润新知