当前位置: 首页 > news >正文

翻页效果

翻页效果

 

效果

 

说明

修正以前源码的不妥之处。

 

源码

https://github.com/YouXianMing/Animations


//
//  PageFlipEffectController.m
//  Animations
//
//  Created by YouXianMing on 16/1/6.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import "PageFlipEffectController.h"
#import "Math.h"
#import "WxHxD.h"
#import "CALayer+SetRect.h"
#import "UIView+SetRect.h"

@interface PageFlipEffectController ()

@property (nonatomic, strong) CALayer *layer;
@property (nonatomic, strong) Math    *math;

@end

@implementation PageFlipEffectController

- (void)setup {

    [super setup];
    
    // layer
    _layer               = [CALayer layer];
    _layer.anchorPoint   = CGPointMake(1.f, 0.5f);
    _layer.frame         = CGRectMake(0, 0, Width / 2.f, 300);
    _layer.x             = 0;
    _layer.position      = CGPointMake(Width / 2.f, self.contentView.middleY);
    _layer.contents      = (__bridge id)([UIImage imageNamed:@"pic_1"].CGImage);
    _layer.borderColor   = [UIColor blackColor].CGColor;
    _layer.borderWidth   = 4.f;
    _layer.masksToBounds = YES;
    _layer.transform = CATransform3DMakeRotation([Math radianFromDegree:0], 0.0, 1.0, 0.0);
    [self.contentView.layer addSublayer:_layer];
    
    // 一元一次方程求解
    self.math = [Math mathOnceLinearEquationWithPointA:MATHPointMake(0, 0) PointB:MATHPointMake(Width, 180)];
    
    // 手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [self.view addGestureRecognizer:pan];
}

- (void)handlePan:(UIPanGestureRecognizer *)sender {
    
    CGPoint curPoint = [sender locationInView:self.view];
    CGFloat x        = curPoint.x;
    
    // 初始化3D变换,获取默认值
    CATransform3D perspectiveTransform = CATransform3DIdentity;
    
    // 透视
    perspectiveTransform.m34 = -1.0 / 2000.0;
    
    // 空间旋转
    perspectiveTransform = CATransform3DRotate(perspectiveTransform, [Math radianFromDegree: x * self.math.k], 0, 1, 0);
    
    [CATransaction setDisableActions:YES];
    _layer.transform = perspectiveTransform;
    
    if (x >= Width / 2.f) {
        
        [CATransaction setDisableActions:YES];
        _layer.contents = (__bridge id)([UIImage imageNamed:@"pic_2"].CGImage);
        
    } else {
        
        [CATransaction setDisableActions:YES];
        _layer.contents = (__bridge id)([UIImage imageNamed:@"pic_1"].CGImage);
    }
}

@end

细节

 


相关文章:

  • HDU 1162 prime+邻接矩阵
  • 特殊二维数组的查找
  • win8 开发之旅(19) --足球游戏揭秘6
  • linux下sed基本用法详解
  • [翻译] UPCardsCarousel
  • Java编程的逻辑 (1) - 数据和变量
  • ABP源码分析三十二:ABP.SignalR
  • office2003 安装步骤及注意事项
  • 我的屌丝giser成长记-研一篇(下)
  • 本周活动
  • MapReduce的过程(2)
  • Android 双卡双待识别
  • 房坑
  • 该不该用inline-block取代float? inline和float的区别?
  • hibernate--联合主键--XML
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Akka系列(七):Actor持久化之Akka persistence
  • Debian下无root权限使用Python访问Oracle
  • Hexo+码云+git快速搭建免费的静态Blog
  • JAVA_NIO系列——Channel和Buffer详解
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • nodejs调试方法
  • spring学习第二天
  • Web设计流程优化:网页效果图设计新思路
  • 从零开始学习部署
  • 关于for循环的简单归纳
  • 计算机常识 - 收藏集 - 掘金
  • 使用agvtool更改app version/build
  • 使用parted解决大于2T的磁盘分区
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 我看到的前端
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 函数计算新功能-----支持C#函数
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #HarmonyOS:基础语法
  • #NOIP 2014# day.1 T2 联合权值
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (9)目标检测_SSD的原理
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)二分查找 超详细
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Oracle)SQL优化技巧(一):分页查询
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (循环依赖问题)学习spring的第九天
  • (一)Java算法:二分查找
  • (转载)深入super,看Python如何解决钻石继承难题
  • .bat批处理(九):替换带有等号=的字符串的子串