在UIImage - iPhone SDK上绘制一个透明圆圈

时间:2010-08-03 00:58:11

标签: iphone objective-c uiimageview

我在尝试找到如何在UIImageView中的UIImage上绘制透明圆圈时遇到了很多麻烦。 Google-ing给了我线索,但我仍然找不到一个有效的例子。

有没有人知道的例子证明了这一点?

4 个答案:

答案 0 :(得分:11)

最简单的方法就是创建一个半透明的方形UIView,然后将其图层的cornerRadius设置为其宽度/高度的一半。类似的东西:

UIView *squareView = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];
squareView.alpha = 0.5;
squareView.layer.cornerRadius = 50;
...
[squareView release];

答案 1 :(得分:2)

是最简单的解决方案:

CGFloat r = 150;

UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,0,1.5*r,1.5*r)];
lbl.text = @"●";
lbl.transform = CGAffineTransformMakeTranslation(0.0f, -r/6);
lbl.textAlignment = UITextAlignmentCenter;
lbl.backgroundColor = [UIColor clearColor];
lbl.textColor = [UIColor redColor];
lbl.font = [UIFont systemFontOfSize:2*r];
lbl.alpha = 0.5;
lbl.center = self.view.center;
[self.view addSubview:lbl];

答案 2 :(得分:1)

一种方法是将CAShapeLayer添加一个圆形path,直接添加到UIImageView的图层或添加到UIImageView的新UIView图层。

如果您确实想要修改图像,则通过将其绘制到CGBitmapContext然后从修改后的位图创建新图像来创建它的可变副本。

CGPathRef circlePath = CGPathCreateMutable();
CGPathAddEllipseInRect( circlePath , NULL , CGRectMake( 0,0,20,20 ) );
CAShapeLayer *circle = [[CAShapeLayer alloc] init];
circle.path = circlePath;
circle.opacity = 0.5;
[myImageView.layer addSublayer:circle];
CGPathRelease( circlePath );
[circle release];

答案 3 :(得分:1)

你可以实现一个自定义的UIView子类,用于绘制你的图像,然后实现 drawRect 方法中的圆圈:

@interface CircleImageView : UIView {
    UIImage * m_image;
    CGRect m_viewRect;

    // anything else you need in this view?
} 

drawRect的实现:

- (void)drawRect:(CGRect)rect {

    // first draw the image
    [m_image drawInRect:m_viewRect blendMode:kCGBlendModeNormal alpha:1.0];

    // then use quartz to draw the circle
    CGContextRef context = UIGraphicsGetCurrentContext ()

    // stroke and fill black with a 0.5 alpha
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 0.5);
    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 0.5);

    // now draw the circle
    CGContextFillEllipseInRect (context, m_viewRect);
}

您需要在init上设置 m_viewRect m_image 成员函数。