Core Graphics を使用して CALayer に描画する方法を理解しようとしています。これまでのところ、コントローラー オブジェクトをレイヤーのデリゲートとして設定し、コントローラーで CG コマンドを呼び出す必要があることはわかっていると思います。
私の問題は、現在のコードでこれを行う方法が本当にわからないことです。
理想的には、CAAnimation を使用してそれらをアニメーション化できるように、すべてに異なる CG 描画を含む多くの異なるレイヤーが必要です。現在、アニメーションを含む作業レイヤーがいくつかありますが、CG コンテンツはありません。これらすべてのレイヤーを同じデリゲートに設定し、if ステートメントを使用して各レイヤーを呼び出して描画しようとしています。これは可能ですか?または、これを行うためのより簡単な方法があると思いますか?私はまだこれらの概念にかなり慣れていないので、どんな助けでも大歓迎です。
これが私の関連コードです:
私のTapView.hで
@interface TapView : UIView
{
CALayer *circleGlowLayer;
}
-(void)glowCircleTap;
@property (nonatomic) float opacity;
@end
私のTapView.mで
@implementation TapView
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self glowCircleTap];
}
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self)
{
circleGlowLayer = [[CALayer alloc]init];
[circleGlowLayer setBounds:CGRectMake(0.0,0.0,470.0,470.0)];
[circleGlowLayer setPosition:self.center];
UIColor *transparent = [UIColor colorWithRed:0.53 green:0.85 blue:0.89 alpha:1.0];
CGColorRef cgTransparent = [transparent CGColor];
[circleGlowLayer setBackgroundColor:cgTransparent];
[[self layer] addSublayer:circleGlowLayer];
[circleGlowLayer setOpacity:0.0];
}
return self;
}
-(void)glowCircleTap
{
CAKeyframeAnimation *glowCircleFader = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
[glowCircleFader setValues:[NSArray arrayWithObjects:
[NSNumber numberWithFloat:1.0],
[NSNumber numberWithFloat:0.0], nil]];
[glowCircleFader setDuration:0.5];
[circleGlowLayer addAnimation:glowCircleFader forKey:@"fadeAnimation"];
}
@end
今のところ、このコードは画面をタップすると四角形を描画し、0.5 秒かけてフェードアウトします。このレイヤーに描画できるようにしたいと思います。
デリゲートを作成しようとして、TapViewDelegate クラスを作成し、TapView の -init で作成しまし[circleGlowLayer setDelegate:TapViewDelegate];
た。そして、ここで少し迷子になります。さらに、これが近い場合、すべてのレイヤーをこの 1 つのデリゲートに設定できますか? 問題は、デリゲートのアイデアがまだ頭に浮かんでいないことだと思います。助けてくれてありがとう!