Ios 掩蔽动画CALayer以在CareReplicatorLayer中使用,以创建万花筒效果

Ios 掩蔽动画CALayer以在CareReplicatorLayer中使用,以创建万花筒效果,ios,animation,calayer,careplicatorlayer,Ios,Animation,Calayer,Careplicatorlayer,我正在尝试在iOS中创建一个万花筒(我知道有一个CIKaleidoscope过滤器,但它并没有给我想要的那种效果,所以我希望自己开发)。我用CALayer获得了一幅静态图像的效果,用三角形CAShapeLayer遮盖它,然后用CAReplicatorLayer复制它。我现在尝试在CALayer中为原始图像设置动画,以使其移动一些。我正在创建CALayer并使用以下代码制作动画: UIImage *pattern = [UIImage imageNamed:@"pattern.jpg"]; CAL

我正在尝试在iOS中创建一个万花筒(我知道有一个
CIKaleidoscope
过滤器,但它并没有给我想要的那种效果,所以我希望自己开发)。我用
CALayer
获得了一幅静态图像的效果,用三角形
CAShapeLayer
遮盖它,然后用
CAReplicatorLayer
复制它。我现在尝试在
CALayer
中为原始图像设置动画,以使其移动一些。我正在创建
CALayer
并使用以下代码制作动画:

UIImage *pattern = [UIImage imageNamed:@"pattern.jpg"];
CALayer *aLayer = [CALayer layer];
aLayer.bounds = CGRectMake(0, 0, pattern.size.width, pattern.size.height);
aLayer.position = CGPointMake(self.view.bounds.size.width/2.0f,
                              self.view.bounds.size.height/2.0f);
aLayer.contents = (id)pattern.CGImage;

CABasicAnimation* panningAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
panningAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
panningAnimation.toValue   = [NSValue valueWithCGPoint:CGPointMake(400, 400)];
panningAnimation.duration = 5.0;

[aLayer addAnimation:panningAnimation forKey:@"position"];

[self.view.layer addSublayer:aLayer];
然后创建一个三角形用于遮罩:

CGMutablePathRef path = CGPathCreateMutable ();
CGPathMoveToPoint (path, NULL, 0, 0);
CGPathAddLineToPoint (path, NULL, 57.735, 0);
CGPathAddLineToPoint (path, NULL, 0, 100);
CGPathAddLineToPoint (path, NULL, 0, 0);
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
[shapeLayer setPath: path];
我无法遮罩动画
CALayer
,因为遮罩会随着动画移动,并且我无法获得图案在三角形中移动的效果

将遮罩添加到视图的图层会产生我想要的效果,即图案在三角形中通过遮罩移动:

[self.view.layer setMask:shapeLayer];
但我无法使用
CAReplicatorLayer
轻松复制这一点。是否有一种方法可以遮罩
CALayer
,但使遮罩相对于视图的帧而不是动画层的帧保持在位?或者是否有任何方法可以捕获视图的动画图像,以便在
CAReplicatorLayer
中使用它?

您所说的“我无法使用
CAReplicatorLayer
轻松复制此内容”是什么意思?您是否有错误或绘图不正确的地方?