1

我试图了解如何使用 Core Graphics 在我的 CALayer 上绘图。到目前为止,我想我知道我应该设置一个控制器对象作为图层的委托,然后在控制器中调用我的 CG 命令。

我的问题是我真的不知道如何用我当前的代码做到这一点。

理想情况下,我需要有许多不同的图层,所有图层上都有不同的 CG 绘图,所以我可以使用 CAAnimation 为它们制作动画。截至目前,我有一些带有动画的工作层,但没有 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

到目前为止,当我点击屏幕时,此代码会绘制一个正方形,然后在半秒内将其淡出。我希望能够在这一层上绘图。

为了尝试制作委托,我制作了一个 TapViewDelegate 类,然后在我的 TapView 中的 -init 中我会[circleGlowLayer setDelegate:TapViewDelegate];然后这就是我有点迷失的地方。此外,如果这很接近,我是否可以将我的所有层设置为这个委托?我认为问题在于代表的想法仍然在我脑海中挥之不去。提前感谢您的帮助!

4

0 回答 0