如何在drawRect中使用CGContextDrawPath等绘制的路径的填充颜色设置动画:?

nac*_*o4d 1 iphone core-animation core-graphics

我想知道是否可以使用CoreGraphics为我绘制的路径的填充颜色设置动画?我正在绘制这个: 使用Quartz - Core Graphics进行简单绘图

我想从白色改变它的填充颜色,让我们说灰色.这可能吗?

我知道view.layer.content属性的存在,但这在这里有用吗?虽然,我不知道在这种情况下如何使用它.

提前致谢.

更新

我正在尝试这种方法(它的错误,因此我可以告诉它是否会起作用)基本上我正在创建一个CGImageRef并将其传递给self.layer.contents,它可以使用UIView动画制作动画,但是......我得到了奇怪的结果,除了不是动画.

int bitsPerComponent = 8;
int channels = 4;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
void *data = malloc(self.bounds.size.width*self.bounds.size.height*channels);

CGContextRef context = CGBitmapContextCreate(data,                      //pointer to data
                                             self.bounds.size.width,    //width
                                             self.bounds.size.height,   //height
                                             bitsPerComponent,          //bitsPerComponent
                                             self.bounds.size.width*channels,//bytesPerRow
                                             colorSpace,                    //colorSpace
                                             kCGImageAlphaPremultipliedFirst);  //bitmapInfo

//method that uses below link's code
[self _drawBackgroundInContext:context color:UIColorFromMandalaBoxType(type)];

CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL,         //info, NULL
                                                              data,         //pointer to data
                                                              self.bounds.size.width*self.bounds.size.height*channels, //number of bytes
                                                              NULL);        //release callback


CGImageRef image = CGImageCreate(self.bounds.size.width,            //width
                                 self.bounds.size.height,         //height
                                 bitsPerComponent,                //bitsPerComponent
                                 bitsPerComponent*channels,       //bitsPerPixel
                                 self.bounds.size.width*channels, //bytesPerRow
                                 colorSpace,                        //colorSpace
                                 kCGImageAlphaPremultipliedFirst,   //bitmapInfo
                                 dataProvider, NULL, false, kCGRenderingIntentDefault);

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.5f];
self.layer.contents = (id)image;
[UIView commitAnimations];

CGImageRelease(image);
CGDataProviderRelease(dataProvider);
CGContextRelease(context);
free(data);
CGColorSpaceRelease(colorSpace);
Run Code Online (Sandbox Code Playgroud)

逻辑好吗?这里的错误在哪里?(

Lil*_*ard 7

编辑答案:
你无法动画内容-drawRect:.如果您试图为形状的颜色设置动画,您可能需要查看CAShapeLayer.它允许您指定CGPathRef它应绘制的颜色,以及笔触/填充颜色,并且所有这些属性都是可动画的.但要记住的一点是,这在其工作中并不是非常有效.如果您的形状不是一直动画,您可能需要设置shouldRasterizeYES.只要图层不是动画,这将显着加快渲染速度.如果你这样做,要小心,因为有相关的错误shouldRasterize.一个让人想到的是,如果你将其设置opacity为0,然后将其设置为非0,shouldRasterize则倾向于根本不绘制任何内容,因为它在0不透明度下缓存了绘图.

原始答案:
如果你完全生活在CoreGraphics中,你可以使用CGContextSetFillColorWithColor(),给它上下文和CGColorRef(例如CGContextSetFillColorWithColor(ctx, [UIColor grayColor].CGColor),如果你试图调整"当前"图形上下文的填充颜色,你也可以使用稍微简单一些[[UIColor grayColor] setFill].

编辑:查看链接后,您只需要更改说明的行

CGContextSetFillColorWithColor(context, [UIColor white].CGColor);
Run Code Online (Sandbox Code Playgroud)

使用你想要的任何颜色.在这种情况下,它会

CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor);
Run Code Online (Sandbox Code Playgroud)