博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift - 用CATransform3DMakeRotation实现翻页效果
阅读量:5034 次
发布时间:2019-06-12

本文共 2669 字,大约阅读时间需要 8 分钟。

Swift - 用CATransform3DMakeRotation实现翻页效果

 

效果

 

源码

////  PageFlipEffectController.swift//  Swift-Animations////  Created by YouXianMing on 16/8/22.//  Copyright © 2016年 YouXianMing. All rights reserved.//import UIKitclass PageFlipEffectController: NormalTitleViewController {        private var math  : Math! = Math(pointA: CGPointMake(0, 0), pointB: CGPointMake(Width(), 180))    private var layer : CALayer!        override func setup() {                super.setup()                let image = UIImage(named: "pic_1")        let size  = Math.ResetFromSize((image?.size)!, withFixedWidth: Width() / 2.0)                layer                        = CALayer()        layer.anchorPoint            = CGPointMake(1.0, 0.5)        layer.frame                  = CGRectMake(0, 0, Width() / 2, size.height)        layer.allowsEdgeAntialiasing = true        layer.position               = CGPointMake(Width() / 2, contentView!.middleY)        layer.contents               = image?.CGImage        layer.borderColor            = UIColor.blackColor().CGColor        layer.borderWidth            = 3.0        layer.masksToBounds          = true        layer.transform              = CATransform3DMakeRotation(Math.RadianFromDegree(0), 0, 1, 1)        contentView?.layer.addSublayer(layer)                let panGesture = UIPanGestureRecognizer(target: self, action: #selector(PageFlipEffectController.handlePan))        view.addGestureRecognizer(panGesture)    }        @objc private func handlePan(sender : UIPanGestureRecognizer) {                let curPoint = sender.locationInView(view)        let x        = curPoint.x                // 初始化3D变换,获取默认值        var perspectiveTransform = CATransform3DIdentity                // 透视        perspectiveTransform.m34 = -1.0 / 2000.0                // 空间旋转        perspectiveTransform = CATransform3DRotate(perspectiveTransform, Math.RadianFromDegree(x * math.k), 0, 1, 0)        CATransaction.setDisableActions(true)        layer.transform = perspectiveTransform                layer.contents = UIImage(named: x >= Width() / 2.0 ? "pic_2" : "pic_1")?.CGImage                if sender.state == .Ended {                        // 初始化3D变换,获取默认值            var perspectiveTransform = CATransform3DIdentity                        // 透视            perspectiveTransform.m34 = -1.0 / 2000.0                        // 空间旋转            perspectiveTransform = CATransform3DRotate(perspectiveTransform, Math.RadianFromDegree(x >= Width() / 2.0 ? 180 : 0), 0, 1, 0)                        CATransaction.setDisableActions(false)            layer.transform = perspectiveTransform        }    }}

 

转载于:https://www.cnblogs.com/YouXianMing/p/5795505.html

你可能感兴趣的文章
显示当前数据库中存在的表
查看>>
BZOJ-1833(数位DP)
查看>>
单选RadioButton与复选CheckBox按钮
查看>>
导入android-support-v4.jar的方法
查看>>
open random
查看>>
nodejs中req.body对请求参数的解析问题
查看>>
javascript 快速排序方法
查看>>
项目告一段落
查看>>
第八章 子程序
查看>>
LINUX kswapd和pdflush进程的含义
查看>>
【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中
查看>>
node操作mongdb的常用函数示例
查看>>
数学中余弦定理在搜索中的分类应用——新闻的分类
查看>>
操作系统 chapter2 操作系统运行环境
查看>>
DecimalFormat用法
查看>>
PMP - 项目管理思维导图
查看>>
实验五
查看>>
Docker 入门篇
查看>>
关于用wkwebview加载沙盒documents下html文件 模拟器可以,真机不行的解决方案
查看>>
RxJava系列5(组合操作符)
查看>>