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
ますか?