
カメラの絞りみたいな動きをさせるiPhoneアプリのサンプルコードを描いてみます。
#import “ViewController.h”
@import SceneKit;
@interface ViewController ()
@property (nonatomic, weak) SCNView *sceneView;
@property (nonatomic) BOOL open;
@end
@implementation ViewController
– (void)viewDidLoad {
[super viewDidLoad];
[self setupScene];
[self createApeture];
[self createCamera];
}
– (void)setupScene {
SCNView *sv = [[SCNView alloc] initWithFrame:self.view.bounds];
sv.backgroundColor = [UIColor yellowColor];
sv.scene = [SCNScene scene];
sv.allowsCameraControl = YES;
sv.autoenablesDefaultLighting = YES;
[self.view addSubview:sv];
self.sceneView = sv;
}
– (void)createApeture {
float w = M_PI / 6.0;
float r = 5.0;
for (int i=0; i<12; i++) {
SCNBox *box = [SCNBox boxWithWidth:8 height:3 length:0.1 chamferRadius:0];
box.firstMaterial.diffuse.contents = [UIColor darkGrayColor];
SCNNode *boxNode = [SCNNode nodeWithGeometry:box];
boxNode.name = @”box”;
boxNode.pivot = SCNMatrix4Translate(boxNode.transform, 2.4, 1.4, 0);
float x = r * cos(i * w);
float y = r * sin(i * w);
boxNode.position = SCNVector3Make(x, y, 0.03 * i);
boxNode.rotation = SCNVector4Make(0, 0, 1, i * w + M_PI * 0.5);
[self.sceneView.scene.rootNode addChildNode:boxNode];
}
SCNTube *tube = [SCNTube tubeWithInnerRadius:5.5 outerRadius:11 height:1];
tube.firstMaterial.diffuse.contents = [UIColor darkGrayColor];
SCNNode *tubeNode = [SCNNode nodeWithGeometry:tube];
tubeNode.transform = SCNMatrix4Rotate(tubeNode.transform, M_PI/2.0, 1, 0, 0);
[self.sceneView.scene.rootNode addChildNode:tubeNode];
}
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[[self.sceneView.scene.rootNode childNodesPassingTest:^BOOL(SCNNode *child, BOOL *stop) {
return [child.name isEqual:@”box”];
}] enumerateObjectsUsingBlock:^(SCNNode *obj, NSUInteger idx, BOOL *stop) {
[obj runAction:[SCNAction rotateByX:0 y:0 z:self.open ? 1.2 : –1.2 duration:1.0]];
}];
self.open = !self.open;
}
– (void)createCamera {
SCNNode *camera = [SCNNode node];
camera.camera = [SCNCamera camera];
camera.position = SCNVector3Make(0, 0, 50);
[self.sceneView.scene.rootNode addChildNode:camera];
}
@end