标签: careplicatorlayer

CAReplicatorLayer背后的魔力是什么?

我发现有趣的CAReplicatorLayer:

  • 它可以非常有效地多次显示CALayer和不同的变换(如何?)
  • 似乎它以某种方式重复使用"后备存储"来复制图层,甚至对它应用一些颜色(如何?)

我想了解源代码或了解CAReplicatorLayer背后的魔力.我想有一个类似于CAReplicatorLayer的CALayer类,但有更多的控制权.我想对每个复制的实例单独控制转换.

所以以一种完全不同的方式问道:是否有可能获得CALayer的"后备商店"并显示它,但我想要多次我想要?

(通过"支持商店"我的意思是CALayer/UIView的渲染纹理.我不太了解CoreAnimation/QuartzCore引擎盖下发生了什么).


为什么我不看其他替代方案,例如将CALayer渲染为UIImage:

  • 性能
  • 在转换过程中,内容是动态的/经常变化的
  • 从另一个方面做到这一点真是令人敬畏!

core-animation calayer ios careplicatorlayer quartz-core

18
推荐指数
1
解决办法
1766
查看次数

使用CAReplicatorLayer

我一直在尝试使用CAReplicatorlayer,CATextLayer和非常基本的动画创建一个很酷的文本效果.我试图让字母看起来像是从屏幕顶部下垂,然后是凉爽的复制器,这些复制器将变得越来越不可见.我设法做到了这个效果,但并不完全.

到目前为止,这就是我所拥有的:

CATextLayer *messageLayer = [CATextLayer layer];

[messageLayer setForegroundColor:[[UIColor blackColor] CGColor]];
[messageLayer setContentsScale:[[UIScreen mainScreen] scale]];
[messageLayer setFrame:CGRectMake(0, 0, 40, 40)];
[messageLayer setString:@"A"];


CAReplicatorLayer *replicatorX = [CAReplicatorLayer layer];

//Set the replicator's attributes
replicatorX.frame = CGRectMake(0, 0, 40, 40);
replicatorX.anchorPoint = CGPointMake(0,0);
replicatorX.position = CGPointMake(0, 0);
replicatorX.instanceCount = 9;
replicatorX.instanceDelay = 0.15;
replicatorX.instanceAlphaOffset = -0.1;

replicatorX.zPosition = 200;
replicatorX.anchorPointZ = -160;

[replicatorX addSublayer:messageLayer];

[self.view.layer addSublayer:replicatorX];


messageLayer.position = CGPointMake(40, 400);
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
animation.fromValue = [NSNumber numberWithInt:0];;
animation.toValue = [NSNumber numberWithInt:400]; …
Run Code Online (Sandbox Code Playgroud)

iphone animation core-animation ios careplicatorlayer

9
推荐指数
1
解决办法
2749
查看次数

使用kCAMediaTimingFunctionEaseIn有问题吗?

我正在使用CALayer,CAReplicatorLayer并将CABasicAnimation条形图设置为动画.条形图由向上的"段"组成,我将其呈现为带有的小矩形CALayer.然后我将它们作为子层添加到CAReplicatorLayer循环中.最后,我为每个小矩形添加一个动画,将矩形放入图表中的位置.

这是动画的最终状态:

纠正动画的最终状态

这是动画中间的样子:

动画状态

以下是实现它的代码:

#define BLOCK_HEIGHT 6.0f
#define BLOCK_WIDTH 8.0f

@interface TCViewController ()

@property (nonatomic, strong) NSMutableArray * blockLayers;         // blocks that fall from the sky
@property (nonatomic, strong) NSMutableArray * replicatorLayers;    // replicator layers that will replicate the blocks into position

@end

@implementation TCViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor lightGrayColor];

    self.blockLayers = [NSMutableArray array];
    self.replicatorLayers = [NSMutableArray array];

    NSArray * dataBlocksData = @[@1,@2,@3,@1,@5,@2,@11,@14,@5,@12,@10,@3,@7,@6,@3,@4,@1];

    __block CGFloat currentXPosition …
Run Code Online (Sandbox Code Playgroud)

animation core-animation calayer ios careplicatorlayer

5
推荐指数
1
解决办法
361
查看次数