如何在CoreGraphics中向CGContextFillEllipseInRect添加偏移量?

时间:2014-07-31 10:11:20

标签: ios objective-c core-graphics

我想将最高偏移量添加到CGContextFillEllipseInRect

当我使用topOffset等于零时,一切正常。但是当我没有使用零偏移时,我得到了错误的圆圈。 我试图设置CGContextTranslateCTM(context, 0, topOffset);,但结果是一样的。

float topOffset = 30.f;
CGContextRef context = UIGraphicsGetCurrentContext();
UIImage *img = [UIImage imageNamed:@"Circle.png"];
CGContextSetFillColorWithColor(context, [[UIColor colorWithPatternImage:img] CGColor]);
CGContextFillEllipseInRect(context, CGRectMake(0, topOffset, img.size.width, img.size.height));

没有偏移

enter image description here

顶部偏移量

enter image description here

1 个答案:

答案 0 :(得分:3)

CGContextSetFillColorWithColor方法准备填充给定颜色值的整个上下文区域。

Stroking or Filling Method被调用时,裁剪给定的笔划或填充区域。

因此,你会得到Ellipse或Rect或类似的东西......

  • 首先,调用CGContextSetFillColorWithColor设置填充颜色(或图案颜色)和FillRect整个区域。

enter image description here

  • 其次,调用CGContexetSetFillColorWithColor设置模式并使用set top,left offset填充

enter image description here

相同背景但是给定FillRect()和FillEllipseInRect()的区域,

在你的情况下......

  • 致电CGContextSetFillColorWithColor(context, [[UIColor colorWithPatternImage:img] CGColor]);并填写整个区域

enter image description here

  • 当您使用Top-Offset填充Ellipse时....看起来像这样

enter image description here

这就是为什么你的圈子出错了。

如果您想要单一填充色,请尝试CGContextSetRGBFillColor设置填充色。

编辑,试试这个(在FillColor之前更改CTM并在椭圆绘制之前恢复)

float topOffset = 30.f;
CGContextRef context = UIGraphicsGetCurrentContext();
UIImage *img = [UIImage imageNamed:@"Circle.png"];
CGContextTranslateCTM(context, 0, topOffset);
CGContextSetFillColorWithColor(context, [[UIColor colorWithPatternImage:img] CGColor]);
CGContextTranslateCTM(context, 0, (-1*topOffset);
CGContextFillEllipseInRect(context, CGRectMake(0, topOffset, img.size.width, img.size.height));

抱歉英语不好:)