Core Animationなどをポリポリ研究

  1. CAReplicatorLayerはSubLayerを.instance***にしたがってinstanceCount個copyして表示するLayer。
instance**は全部アニメーション可能なので、CAAnimationと組み合わせるととんでもないことになる。

以下、普通に複数表示すだけのコード。
.instanceTransformに画像のwidth右に動かすTransformを渡しているので、contentLayerが横に5個(4個コピーされて)表示される。
CALayer* contentLayer = [CALayer layer];
UIImage* image = [UIImage imageNamed:@"CA.jpg"];    
CGRect rect;
rect.origin = CGPointZero;
rect.size = image.size;
contentLayer.frame = rect;
contentLayer.contents = (id)image.CGImage;

CAReplicatorLayer* replicatorLayer = [CAReplicatorLayer layer];
replicatorLayer.frame = rect;
replicatorLayer.instanceCount = 5;

[replicatorLayer addSublayer:contentLayer];
[self.view.layer addSublayer:replicatorLayer];

CATransform3D transform;
transform = CATransform3DMakeTranslation(rect.size.width, 
                                         0,
                                         0);
replicatorLayer.instanceTransform = transform;

    CAReplicatorLayerはSubLayerを.instance***にしたがってinstanceCount個copyして表示するLayer。

    instance**は全部アニメーション可能なので、CAAnimationと組み合わせるととんでもないことになる。

    以下、普通に複数表示すだけのコード。

    .instanceTransformに画像のwidth右に動かすTransformを渡しているので、contentLayerが横に5個(4個コピーされて)表示される。

    CALayer* contentLayer = [CALayer layer];
    UIImage* image = [UIImage imageNamed:@"CA.jpg"];    
    CGRect rect;
    rect.origin = CGPointZero;
    rect.size = image.size;
    contentLayer.frame = rect;
    contentLayer.contents = (id)image.CGImage;
    
    CAReplicatorLayer* replicatorLayer = [CAReplicatorLayer layer];
    replicatorLayer.frame = rect;
    replicatorLayer.instanceCount = 5;
    
    [replicatorLayer addSublayer:contentLayer];
    [self.view.layer addSublayer:replicatorLayer];
    
    CATransform3D transform;
    transform = CATransform3DMakeTranslation(rect.size.width, 
                                             0,
                                             0);
    replicatorLayer.instanceTransform = transform;
    

Theme = Manuscript Neue