我在尝试找到如何在UIImageView中的UIImage上绘制透明圆圈时遇到了很多麻烦。 Google-ing给了我线索,但我仍然找不到一个有效的例子。
有没有人知道的例子证明了这一点?
答案 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 成员函数。