iOS 图片折叠效果

本文介绍了如何在iOS应用中创建图片折叠效果。通过布局两个UIImageView并覆盖一个大的可交互的UIImageView,利用手势来实现这一视觉效果。核心代码涉及到图片渐变和折叠动画的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:
这里写图片描述

结构布局:拖两个UIImageView到控制器,设置相同的frame和图片,再拖一个大的UIImageView盖在上面,注意把大的imageView.userInteractionEnabled = YES;能够添加手势。
注意层次结构:
这里写图片描述

核心代码:

//
//  ViewController.m
//  图片折叠
//
//  Created by llkj on 2017/8/31.
//  Copyright © 2017年 LayneCheung. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *topImageV;
@property (weak, nonatomic) IBOutlet UIImageView *buttomImageV;
@property (nonatomic, weak) CAGradientLayer *gradientL;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.让上不图片只显示上半部分
    self.topImageV.layer.contentsRect = CGRectMake(0, 0, 1, 0.5);
    //2.让下不图片只显示下半部分
    self.buttomImageV.layer.contentsRect = CGRectMake(0, 0.5, 1, 0.5);

    self.topImageV.layer.anchorPoint = CGPointMake(0.5, 1);
    self.buttomImageV.layer.anchorPoint = CGPointMake(0.5, 0);

    //设置渐变层
    CAGradientLayer *gradidentL = [CAGradientLayer layer];
    gradidentL.frame = self.buttomImageV.bounds;
    gradidentL.opacity = 0;
    gradidentL.colors = @[(id)[UIColor clearColor].CGColor, (id)[UIColor blackColor].CGColor];
    self.gradientL = gradidentL;
    [self.buttomImageV.layer addSublayer:gradidentL];
}

//这里也可以手动给大的ImageView添加一个UIPanGestureRecognizer手势
- (IBAction)pan:(UIPanGestureRecognizer *)pan {

    //获取移动的偏移量
    CGPoint transP = [pan translationInView:pan.view];
    //让上部图片开始旋转
    CGFloat angle = transP.y * M_PI / 200;

    //近大远小效果
    CATransform3D transform = CATransform3DIdentity;
    //眼睛离屏幕的距离(透视效果)
    transform.m34 = -1 / 300.0;

    self.gradientL.opacity = transP.y * 1 / 200.0;

    self.topImageV.layer.transform = CATransform3DRotate(transform, -angle, 1, 0, 0);


    if (pan.state == UIGestureRecognizerStateEnded) {
        self.gradientL.opacity = 0;
        //上部图片复位
        //usingSpringWithDamping:弹性系数
        [UIView animateWithDuration:0.5 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:0 options:UIViewAnimationOptionCurveLinear animations:^{
            self.topImageV.layer.transform = CATransform3DIdentity;
        } completion:^(BOOL finished) {

        }];
    }
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值