使用CATransform3D实现立体效果

1.实现选择45度

func viewTransform() {
       var transform = CATransform3DIdentity
       let angle = CGFloat(45)
       transform.m34 = -1 / 500
       blueView.layer.transform = CATransform3DRotate(transform, angle, 0, 1, 0)
}

2.实现手势旋转

class ViewController: UIViewController {
    @IBOutlet weak var blueView: UIView!
    var angle = CGPoint.init(x: 0, y: 0)
    override func viewDidLoad() {
        super.viewDidLoad()
        let subView = UIView.init(frame: blueView.bounds)
        subView.backgroundColor = UIColor.blue
        blueView.addSubview(subView)
        blueView.backgroundColor = UIColor.clear
        
        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(viewTransform))
        blueView.addGestureRecognizer(panGesture)
    }
    
    func viewTransform(sender: UIPanGestureRecognizer) {
        let point = sender.translation(in: blueView)
        let angleX = angle.x + (point.x / 30)
        let angleY = angle.y + (point.y / 30)
        
        var transform = CATransform3DIdentity
        transform.m34 = -1 / 500
        transform = CATransform3DRotate(transform, angleX, 0, 1, 0)
        transform = CATransform3DRotate(transform, angleY, 1, 0, 0)
        blueView.layer.sublayerTransform = transform
        
        if sender.state == .ended {
            angle.x = angleX
            angle.y = angleY
        }
    }
}

3.只做会滑动的骰子

骰子资源

import UIKit

class ViewController: UIViewController {
    let diceView = UIView()
    var angle = CGPoint.init(x: 0, y: 0)
    override func viewDidLoad() {
        super.viewDidLoad()
        addDice()
        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(viewTransform))
        diceView.addGestureRecognizer(panGesture)
    }
    
    func addDice() {
        let viewFrame = UIScreen.main.bounds
        var diceTransform = CATransform3DIdentity
        
        diceView.frame = CGRect(x: 0, y: viewFrame .maxY / 2 - 50, width: viewFrame.width, height: 100)
        
        // 1
        let dice1 = UIImageView.init(image: UIImage(named: "dice1.jpg"))
        dice1.frame = CGRect(x: viewFrame.maxX / 2 - 50, y: 0, width: 100, height: 100)
        diceTransform = CATransform3DTranslate(diceTransform, 0, 0, 50)
        dice1.layer.transform = diceTransform
        
        // 6
        let dice6 = UIImageView.init(image: UIImage(named: "dice6.jpg"))
        dice6.frame = CGRect(x: viewFrame.maxX / 2 - 50, y: 0, width: 100, height: 100)
        diceTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 0, -50)
        dice6.layer.transform = diceTransform
        
        // 2
        let dice2 = UIImageView.init(image: UIImage(named: "dice2.jpg"))
        dice2.frame = CGRect(x: viewFrame.maxX / 2 - 50,y: 0, width: 100,height: 100)
        diceTransform = CATransform3DRotate(CATransform3DIdentity, (CGFloat.pi / 2), 0, 1, 0)
        diceTransform = CATransform3DTranslate(diceTransform, 0, 0, 50)
        dice2.layer.transform = diceTransform
        
        // 5
        let dice5 = UIImageView.init(image: UIImage(named: "dice5.jpg"))
        dice5.frame = CGRect(x: viewFrame.maxX / 2 - 50,y: 0, width: 100,height: 100)
        diceTransform = CATransform3DRotate(CATransform3DIdentity, (-CGFloat.pi / 2), 0, 1, 0)
        diceTransform = CATransform3DTranslate(diceTransform, 0, 0, 50)
        dice5.layer.transform = diceTransform
        
        // 3
        let dice3 = UIImageView.init(image: UIImage(named: "dice3.jpg"))
        dice3.frame = CGRect(x: viewFrame.maxX / 2 - 50,y:0,width: 100, height:100)
        diceTransform = CATransform3DRotate(CATransform3DIdentity, (-CGFloat.pi / 2), 1, 0, 0)
        diceTransform = CATransform3DTranslate(diceTransform, 0, 0, 50)
        dice3.layer.transform = diceTransform
        
        // 4
        let dice4 = UIImageView.init(image: UIImage(named: "dice4.jpg"))
        dice4.frame = CGRect(x: viewFrame.maxX / 2 - 50,y:0,width: 100, height:100)
        diceTransform = CATransform3DRotate(CATransform3DIdentity, (CGFloat.pi / 2), 1, 0, 0)
        diceTransform = CATransform3DTranslate(diceTransform, 0, 0, 50)
        dice4.layer.transform = diceTransform
        
        diceView.addSubview(dice1)
        diceView.addSubview(dice2)
        diceView.addSubview(dice3)
        diceView.addSubview(dice4)
        diceView.addSubview(dice5)
        diceView.addSubview(dice6)
        
        view.addSubview(diceView)
    }
    
    func viewTransform(sender: UIPanGestureRecognizer) {
        let point = sender.translation(in: diceView)
        let angleX = angle.x + (point.x / 30)
        let angleY = angle.y + (point.y / 30)
        
        var transform = CATransform3DIdentity
        transform.m34 = -1 / 500
        transform = CATransform3DRotate(transform, angleX, 0, 1, 0)
        transform = CATransform3DRotate(transform, angleY, 1, 0, 0)
        diceView.layer.sublayerTransform = transform
        
        if sender.state == .ended {
            angle.x = angleX
            angle.y = angleY
        }
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,562评论 4 61
  • 学经汇报: 学经日期:2017年3月31日 星期五 晴 宝贝年龄:8岁 学经周期:第一周 学经人员:瑜琪妈 瑜瑜 ...
    瑜琪妈阅读 2,854评论 0 0
  • 我的第一张作业,感谢心蓝老师,能与那么多志同道合的朋友共同努力,拿起画笔描绘生活的色彩……
    芷儿308阅读 1,567评论 2 1
  • 近日,听闻几种教育观点,引起了我的思考。第一位是名六年级学生家长,他认为孩子要到县城上初中,县城教的好,能开发孩子...
    AA闫现召阅读 1,508评论 0 0

友情链接更多精彩内容