2

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];

を使用してこれを簡単に複製することはできませんCAReplicatorLayerCALayerアニメーションレイヤーのフレームではなく、ビューのフレームに対してマスクを固定する方法はありますか? または、ビューのアニメーション画像をキャプチャして、ビューで使用できる方法はありCAReplicatorLayerますか?

4

0 に答える 0