• 简单理解iOS中CGAffineTransform和CATransform3D


    简单理解iOS中CGAffineTransform和CATransform3D

     CGAffineTransform:2d平面的变换

     CATransform3D:3D空间中的变换

    关于仿射变换的理解可以参考https://www.cnblogs.com/shine-lee/p/10950963.html

    class TestViewController: UIViewController{
        
        var disposeBag = DisposeBag()
        var animateCube : UIView!
        var tansform = CATransform3DIdentity
        
        override func viewDidLoad() {
            super.viewDidLoad()
            self.view.backgroundColor = UIColor.white
    
            initView()
            
        }
        func initView(){
            let frame  = CGRect(x: 0, y: 0,  200, height: 200)
            animateCube = UIView(frame: frame)
            animateCube.center = view.center
            view.addSubview(animateCube)
            
            let test = UIView(frame: frame)
            test.backgroundColor = UIColor.blue.withAlphaComponent(0.25)//最外边平面
            test.layer.transform = CATransform3DTranslate(test.layer.transform, 0, 0, 100)
            
            let test1 = UIView(frame: frame)
            test1.backgroundColor = UIColor.black.withAlphaComponent(0.5)
            test1.layer.transform = CATransform3DTranslate(test1.layer.transform, 0, 0, -100)//沿Z轴平移-100,最里边的平面
            
            let test2 = UIView(frame: frame)
            test2.backgroundColor = UIColor.yellow.withAlphaComponent(0.5)//左边平面
            test2.layer.transform = CATransform3DTranslate(test2.layer.transform, -100, 0, 0)//3d平移(沿X轴平移-100)
            test2.layer.transform = CATransform3DRotate(test2.layer.transform, CGFloat.pi/2, 0, 1, 0)//3d旋转(沿Y轴旋转90度)
            
            let test3 = UIView(frame: frame)
            test3.backgroundColor = UIColor.purple.withAlphaComponent(0.5)//右边平面
            test3.layer.transform = CATransform3DTranslate(test3.layer.transform, 100, 0, 0)//沿X轴平移100
            test3.layer.transform = CATransform3DRotate(test3.layer.transform, CGFloat.pi/2, 0, 1, 0)//沿着Y轴旋转90度
            
            let test4 = UIView(frame: frame)
            test4.backgroundColor = UIColor.orange.withAlphaComponent(0.5)//上边平面
            test4.layer.transform = CATransform3DTranslate(test4.layer.transform, 0, 100, 0)//沿y轴平移100
            test4.layer.transform = CATransform3DRotate(test4.layer.transform, CGFloat.pi/2, 1, 0, 0)//沿着X轴旋转90度
            
            let test5 = UIView(frame: frame)
            test5.backgroundColor = UIColor.green.withAlphaComponent(0.5)//下边平面
            test5.layer.transform = CATransform3DTranslate(test5.layer.transform, 0, -100, 0)//沿y轴平移-100
            test5.layer.transform = CATransform3DRotate(test5.layer.transform, CGFloat.pi/2, -1, 0, 0)//沿着X轴旋转90度
            
            animateCube.addSubview(test)
            animateCube.addSubview(test1)
            animateCube.addSubview(test2)
            animateCube.addSubview(test3)
            animateCube.addSubview(test4)
            animateCube.addSubview(test5)
            
            self.animateCube.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)//2d变换
            
            self.tansform.m34 = 1.0 / -500//透视效果,远小近大,深入屏幕里边小
            
            
            self.animateCube.layer.sublayerTransform = self.tansform;//
            
            //定时器旋转
            let timer = Observable<Int>.timer(1,period:1/60,scheduler: MainScheduler.instance)
            /// 添加订阅
            timer.subscribe { (event) in
                self.tansform = CATransform3DRotate(self.tansform, CGFloat.pi/360, -0.3, -1,0.7)
                self.animateCube.layer.sublayerTransform = self.tansform;//
            }.disposed(by: disposeBag)
            
        }
        
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
           
        }
    }

      参考链接:https://www.jianshu.com/p/3dd14cfbdc53

  • 相关阅读:
    作为计算机专业的过来人:想学好C 语言,你必须要知道这3个原因(强烈推荐)
    C语言从1972年诞生至今,能够恒久不衰,是怎么做到的?
    这4种胜过C语言的 C++ 强制转换方法,真的好用到爆...(建议收藏)
    一纸学历证书真的胜过多年工作经验吗?HR更看重程序员什么地方?
    《个人-GIT使用方法》
    java Comparable 和 Cloneable接口
    Java 文本I/O 处理
    java 异常处理
    java的一维数组
    java中String类型
  • 原文地址:https://www.cnblogs.com/duzhaoquan/p/12680554.html
Copyright © 2020-2023  润新知