我正在尝试在 iOS 中创建一个万花筒(我知道有一个CIKaleidoscope
过滤器,但它没有给我我正在寻找的那种效果,所以我希望自己推出)。我已经设法使用 a 获得静止图像的效果,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
?