我有一个图像(它实际上是圆形的),并希望只绘制与两个同心圆之间的区域相对应的图像部分,外部的一个是固定的,内部的可以调整大小。
外同心圆将始终对应于图像的外边缘 - 但需要在绘制的图像中留下“洞” - 对应于较小的同心圆的大小。
我正在尝试在iOS的objective-c中执行此操作 - 绘制可变大小的“取景器”控件。
任何帮助都非常感激。
答案 0 :(得分:3)
听起来像使用CGContextEOClip
的标准情况。没有检查过这段代码,但是有点像:
CGContextRef ctxt = UIGraphicsGetCurrentContext();
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, NULL, outerCircle);
CGPathAddEllipseInRect(path, NULL, innerCircle);
CGContextEOClip(ctxt);
//Draw your stuff
答案 1 :(得分:1)
最简单,最高效的解决方案可能是使用UIImageView
并应用CAShapeLayer
作为其图层的掩码。
示例:
UIImage *image = ...;
CGFloat ringWidth = 20.0;
CGRect outerCircleRect = CGRectMake(0, 0, image.size.width, image.size.height);
CGRect innerCircleRect = CGRectInset(outerCircleRect, ringWidth, ringWidth);
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:outerCircleRect];
[path appendPath:[UIBezierPath bezierPathWithOvalInRect:innerCircleRect]];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.fillRule = kCAFillRuleEvenOdd;
shapeLayer.path = [path CGPath];
UIImageView *imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
imageView.layer.mask = shapeLayer;
[self.view addSubview:imageView];
您必须包含QuartzCore框架才能实现此目的。
更改内圆的半径时,可以简单地为形状图层指定新路径。这甚至可以动画。