螺旋状に上からクルクルLayerがおりてくるiPhoneアプリのサンプルコードを描いてみます。
動かすとこんな感じです
サンプルコード
#import “ViewController.h”
@interface ViewController ()
@property float lasttime;
@property (nonatomic, strong) NSMutableArray *plates;
@end
@implementation ViewController
– (void)viewDidAppear:(BOOL)animated
{
// CATransform3D perspectiveTransform = CATransform3DIdentity;
// perspectiveTransform.m34 = 1.0 / -500;
self.plates = [NSMutableArray array];
for (int i=0; i<60; i++) {
CALayer *l = [CALayer layer];
l.frame = CGRectMake(50, 50, 20, 10);
l.backgroundColor = [UIColor colorWithHue:0.1 * (i%10) saturation:0.7 brightness:1.0 alpha:1.0].CGColor;
// l.transform = perspectiveTransform;
[self.view.layer addSublayer:l];
[self.plates addObject:l];
}
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(tick:) userInfo:nil repeats:YES];
}
– (void)tick:(NSTimer*)sender
{
self.lasttime += sender.timeInterval;
for (int i=0; i<self.plates.count; i++) {
CALayer *l = self.plates[i];
NSArray *position = [self spiral:self.lasttime * 10 + i * 2.0];
[l setValue:position[0] forKeyPath:@”position.x”];
[l setValue:position[1] forKeyPath:@”position.y”];
[l setValue:position[2] forKeyPath:@”zPosition”];
}
}
– (NSArray*)spiral:(float)t
{
float r = 160;
float angle = M_PI / 10.0 * t;
float x = r * cos(angle) + CGRectGetMidX(self.view.bounds);
float z = r * sin(angle) + CGRectGetMidX(self.view.bounds);
float y = t + 50;
return [NSArray arrayWithObjects:@(x), @(y), @(z), nil];
}
@end