First you will need to define the material when developing the 3D object.
then programmatically assign a texture to each material.
let material1 = SCNMaterial() material1.diffuse.contents = UIImage(named: "1")?.xFlipped material1.locksAmbientWithDiffuse = true let material2 = SCNMaterial() material2.diffuse.contents = UIImage(named: "2")?.xFlipped material2.locksAmbientWithDiffuse = true ... let material12 = SCNMaterial() material12.diffuse.contents = UIImage(named: "12")?.xFlipped material12.locksAmbientWithDiffuse = true scene.rootNode.childNodeWithName("Dice", recursively: false)?.geometry?.materials = [material1, material2, material3, material4, material5, material6, material7, material8, material9, material10, material11, material12]
Where "Dice" is the name of the object that you specified in the Property inspector.
extension UIImage { var xFlipped: UIImage { let tempImageView = UIImageView(frame: CGRectMake(0, 0, self.size.width, self.size.height)) tempImageView.image = self let viewTempImage = UIView(frame: tempImageView.frame) viewTempImage.addSubview(tempImageView) tempImageView.transform = CGAffineTransformMakeScale(-1, 1) let img = viewTempImage.screenshot return img } } extension UIView { var screenshot: UIImage{ UIGraphicsBeginImageContext(self.bounds.size); let context = UIGraphicsGetCurrentContext(); self.layer.renderInContext(context!) let screenShot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return screenShot } }
Note: In my case, the images when I add the texture were flipped horizontally. So I turned the handle over as shown above.
source share