我必须绘制一个椭圆形状的按钮,我不想将图像设置为椭圆形。
我已经读过您可以使用UIBezierPath绘制不同的整形器,但我无法绘制正确的椭圆形状。
以下是用于创建圆形的代码。
self.layer.borderWidth=1.0;
self.clipsToBounds = YES;
[self setTitleColor:ktextColor forState:UIControlStateNormal];
self.layer.cornerRadius = self.bounds.size.width/2;//half of the width
self.layer.borderColor=[[UIColor whiteColor]CGColor];
任何帮助表示赞赏!!
答案 0 :(得分:2)
您可以为按钮的图层设置委托,并实现委托方法`displayLayer:'
-(void)displayLayer:(CALayer *)layer
{
UIGraphicsBeginImageContext(layer.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(0.0, 0.0, CGRectGetWidth(layer.frame), CGRectGetHeight(layer.frame))];
[[UIColor whiteColor] setFill];
[ovalPath fill];
[[UIColor blackColor] setStroke];
ovalPath.lineWidth = 1;
[ovalPath stroke];
UIImage *imageBuffer = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
layer.contents = (id)[imageBuffer CGImage];
}
答案 1 :(得分:1)
您还可以创建CAShapelayer,然后向图层添加手势,如下所示:
-(void)generateOvalWithSize:(CGSize)size origin:(CGPoint)origin {
CAShapeLayer ovalLayer = [CAShapeLayer layer];
CGMutablePathRef ovalPath = CGPathCreateMutable();
CGPathAddEllipseInRect(ovalPath, NULL, CGRectMake(origin.x, origin.y, size.width, size.height));
CGPathCloseSubpath(ovalPath);
ovalLayer.path = ovalPath;
// Configure the apperence of the circle
ovalLayer.fillColor = [UIColor whiteColor].CGColor;
ovalLayer.strokeColor = [UIColor whiteColor].CGColor;
ovalLayer.lineWidth = 2;
// Add to parent layer
[[self layer] addSublayer:ovalLayer];
}
答案 2 :(得分:1)
我已经使用这两个功能一段时间了,我还没有遇到任何问题,但如果有人看到问题,请告诉我。
你可以传递任何UIView的子类(即UIButton,UICollectionViewCell等)
+ (void)setCornerRadius:(CGFloat)radius forView:(UIView*)view
{
[view.layer setCornerRadius:radius];
[view.layer setMasksToBounds:YES];
}
+ (void)setBordersForView:(UIView*)view width:(CGFloat)width color:(UIColor*)color
{
view.layer.borderColor = color.CGColor;
view.layer.borderWidth = width;
}
以上结果在集合视图中产生了以下效果:
集合视图单元格有一个单独的按钮,它一直围绕边缘(自动布局)并占据单元格的整个高度和宽度。
然后我传入整个单元格(或者在单元格内调用self.viewForBaseLineLayout)作为上面列出的两个函数中的view参数。
对于我传递20.0f的radius参数。 (但是这个值会根据你传递的视图的大小而变化;你只需要玩它就可以了)
我知道这篇文章很老,但也许它会帮助新人:)
答案 3 :(得分:0)
您可以使用OBShapedButton类Download Here