首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS UIView三维边界

问iOS UIView三维边界
EN

Stack Overflow用户
提问于 2015-10-28 00:16:21
回答 1查看 707关注 0票数 0

我一直在研究像UIView这样的硬币,它有三维旋转功能。

基于手势,我能够用CATransform3dRotate实现旋转效果。现在我需要实现阴影样的效果,当图像旋转。

请参阅所附图片。

有什么建议吗?建议?或者示例代码会很好

样品要求

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-28 10:39:06

您可能想看看SceneKit。我制作了一个快速演示,你可以下载一个3D硬币物体的这里,它通过一个滑动手势水平地左右旋转,有一个真实的光源和阴影。有关守则如下:

代码语言:javascript
复制
import UIKit
import SceneKit

class ViewController: UIViewController {

    @IBOutlet weak var sceneView: SCNView!

    let rotate90AboutZ = SCNAction.rotateByX(0.0, y: 0.0, z: CGFloat(M_PI_2), duration: 0.0)

    var currentAngle: Float = 0.0
    var coinNode = SCNNode()

    override func viewDidLoad() {
        super.viewDidLoad()
        sceneView.userInteractionEnabled = true
        sceneView.backgroundColor = UIColor.blackColor()
        sceneView.autoenablesDefaultLighting = true
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(true)
        coinSceneSetup()
    }

    func coinSceneSetup() {

        let coinScene = SCNScene()
        //coin is rendered as a cylinder with a very small height
        let coinGeometry = SCNCylinder(radius: 50, height: 2)
        coinNode = SCNNode(geometry: coinGeometry)
        coinNode.position = SCNVector3Make(0.0, 25.0, 25.0)
        coinScene.rootNode.addChildNode(coinNode)
        //rotate coin 90 degrees about the z axis so that it stands upright
        coinNode.runAction(rotate90AboutZ)

        let shinyCoinMaterial = SCNMaterial()
        shinyCoinMaterial.diffuse.contents = UIColor.lightGrayColor()
        shinyCoinMaterial.specular.contents = UIColor.whiteColor()
        shinyCoinMaterial.shininess = 1.0
        coinGeometry.firstMaterial = shinyCoinMaterial
        sceneView.scene = coinScene
        let panRecognizer = UIPanGestureRecognizer(target: self, action: "panGesture:")
        sceneView.addGestureRecognizer(panRecognizer)
    }

    //allows for coin to spin with a right or left finger swipe, while still keeping it rotated 90 degrees about z axis
    func panGesture(sender: UIPanGestureRecognizer) {
        let translation = sender.translationInView(sender.view!)
        var newAngle = (Float)(translation.x)*(Float)(M_PI)/180.0
        newAngle += currentAngle
        coinNode.runAction(SCNAction.rotateToX(CGFloat(newAngle), y: 0.0, z: CGFloat(M_PI_2), duration: 0.0))
        if(sender.state == UIGestureRecognizerState.Ended) {
            currentAngle = newAngle
        }
    }      
}

有几个很好的入门教程可用,例如这里、这里和这里。weheartswift.com在Swift中发布了一个三部分教程,我个人认为它特别有用。以下是1、2和3.的部分。

Jeff的引言到SceneKit在OS上,以及他伴随的源代码也是一个宝贵的资源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33380777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档