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)
逻辑好吗?这里的错误在哪里?(
编辑答案:
你无法动画内容-drawRect:.如果您试图为形状的颜色设置动画,您可能需要查看CAShapeLayer.它允许您指定CGPathRef它应绘制的颜色,以及笔触/填充颜色,并且所有这些属性都是可动画的.但要记住的一点是,这在其工作中并不是非常有效.如果您的形状不是一直动画,您可能需要设置shouldRasterize为YES.只要图层不是动画,这将显着加快渲染速度.如果你这样做,要小心,因为有相关的错误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)
| 归档时间: |
|
| 查看次数: |
3591 次 |
| 最近记录: |