给UIView圆角

我的登录视图有一个子视图,它有一个UIActivityView和一个UILabel表示“Signing In…”这个子视图有不圆角的角。我怎样才能把它们变圆呢?

有什么办法在我的xib里面做吗?

376754 次浏览

试试这个

#import <QuartzCore/QuartzCore.h> // not necessary for 10 years now  :)

...

view.layer.cornerRadius = 5;
view.layer.masksToBounds = true;

注意:如果你试图将圆角应用到UIViewController的视图中,它不应该应用在视图控制器的构造函数中,而应该应用在-viewDidLoad中,在view实际实例化之后。

这是一种不同于Ed Marty的方法:

#import <QuartzCore/QuartzCore.h>


[v.layer setCornerRadius:25.0f];
[v.layer setMasksToBounds:YES];

你需要setMasksToBounds来从IB加载所有的对象…我有一个问题,我的视图得到了圆润,但没有IB的对象:/

这是固定的=D希望它有助于!

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 50, 200, 200)];


view.layer.backgroundColor = [UIColor whiteColor].CGColor;
view.layer.cornerRadius = 20.0;
view.layer.frame = CGRectInset(v.layer.frame, 20, 20);


view.layer.shadowOffset = CGSizeMake(1, 0);
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowRadius = 5;
view.layer.shadowOpacity = .25;


[self.view addSubview:view];
[view release];

您还可以使用接口生成器的用户自定义运行时属性特性将键路径layer.cornerRadius设置为一个值。但是要确保包含了QuartzCore库。

这个技巧也适用于设置图层。然而,borderWidth将不会为layer.borderColor工作,因为这期望一个CGColor而不是UIColor

您将无法在故事板中看到效果,因为这些参数是在运行时计算的。

Using Interface builder to set the corner半径

您需要首先导入头文件<QuartzCore/QuartzCore.h>

 #import QuartzCore/QuartzCore.h>


[yourView.layer setCornerRadius:8.0f];
yourView.layer.borderColor = [UIColor redColor].CGColor;
yourView.layer.borderWidth = 2.0f;
[yourView.layer setMasksToBounds:YES];

不要错过使用-setMasksToBounds,否则可能无法显示效果。

正如在这篇博文中所描述的,这里有一个方法来圆角的UIView:

+(void)roundView:(UIView *)view onCorner:(UIRectCorner)rectCorner radius:(float)radius
{
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds
byRoundingCorners:rectCorner
cornerRadii:CGSizeMake(radius, radius)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = view.bounds;
maskLayer.path = maskPath.CGPath;
[view.layer setMask:maskLayer];
[maskLayer release];
}

最酷的部分是你可以选择你想要四舍五入的角。

你也可以使用图像:

UIImage *maskingImage = [UIImage imageNamed:@"bannerBarBottomMask.png"];
CALayer *maskingLayer = [CALayer layer];
maskingLayer.frame = CGRectMake(-(self.yourView.frame.size.width - self.yourView.frame.size.width) / 2
, 0
, maskingImage.size.width
, maskingImage.size.height);
[maskingLayer setContents:(id)[maskingImage CGImage]];
[self.yourView.layer setMask:maskingLayer];

请导入Quartzcore framework,然后将setMaskToBounds设置为TRUE,这是非常重要的一行。

然后:# EYZ0

现在你可以在UIView中使用一个快速的类别(代码如下图所示),在@IBInspectable中显示在故事板上的结果(如果你正在使用类别,只使用拐角半径,而不是图层。cornerRadius作为关键路径。

extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
}

enter image description here

UIView* viewWithRoundedCornersSize(float cornerRadius,UIView * original)
{
// Create a white border with defined width
original.layer.borderColor = [UIColor yellowColor].CGColor;
original.layer.borderWidth = 1.5;


// Set image corner radius
original.layer.cornerRadius =cornerRadius;


// To enable corners to be "clipped"
[original setClipsToBounds:YES];
return original;
}

ON Xcode 6 你试着< / p >

     self.layer.layer.cornerRadius = 5.0f;

    self.layer.layer.cornerRadius = 5.0f;
self.layer.clipsToBounds = YES;

设置圆形视图的转角属性

设置masksToBounds布尔值,图像将不会在角半径边界外绘制

view.layer.cornerRadius = 5;


view.layer.masksToBounds = YES;

斯威夫特

简短的回答:

myView.layer.cornerRadius = 8
myView.layer.masksToBounds = true  // optional

补充回答

如果你得到了这个答案,你可能已经看到了足够解决你的问题的东西。我添加这个答案是为了更直观地解释事物为什么会这样做。

如果你从普通的UIView开始,它有正方形的角。

let blueView = UIView()
blueView.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
blueView.backgroundColor = UIColor.blueColor()
view.addSubview(blueView)

enter image description here

你可以通过改变视图layercornerRadius属性来给它圆角。

blueView.layer.cornerRadius = 8

enter image description here

半径值越大,圆角越圆润

blueView.layer.cornerRadius = 25

enter image description here

数值越小,圆角越小。

blueView.layer.cornerRadius = 3

enter image description here

这可能足够解决你的问题了。然而,有时视图可以有超出视图边界的子视图或子层。例如,如果我像这样添加一个子视图

let mySubView = UIView()
mySubView.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubView.backgroundColor = UIColor.redColor()
blueView.addSubview(mySubView)

或者如果我像这样添加一个

let mySubLayer = CALayer()
mySubLayer.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
mySubLayer.backgroundColor = UIColor.redColor().CGColor
blueView.layer.addSublayer(mySubLayer)

然后我就会得到

enter image description here

现在,如果我不希望有东西在边界外,我可以这样做

blueView.clipsToBounds = true

或者这个

blueView.layer.masksToBounds = true

结果是这样的:

enter image description here

clipsToBoundsmasksToBounds都是等效。只是第一个与UIView一起使用,第二个与CALayer一起使用。

另请参阅

使用UIView扩展:

extension UIView {


func addRoundedCornerToView(targetView : UIView?)
{
//UIView Corner Radius
targetView!.layer.cornerRadius = 5.0;
targetView!.layer.masksToBounds = true


//UIView Set up boarder
targetView!.layer.borderColor = UIColor.yellowColor().CGColor;
targetView!.layer.borderWidth = 3.0;


//UIView Drop shadow
targetView!.layer.shadowColor = UIColor.darkGrayColor().CGColor;
targetView!.layer.shadowOffset = CGSizeMake(2.0, 2.0)
targetView!.layer.shadowOpacity = 1.0
}
}

用法:

override func viewWillAppear(animated: Bool) {


sampleView.addRoundedCornerToView(statusBarView)


}

你可以使用下面的自定义UIView类,它也可以改变边框的颜色和宽度。因为这是IBDesignalbe,你可以在界面构建器中更改属性。

enter image description here

import UIKit


@IBDesignable public class RoundedView: UIView {


@IBInspectable var borderColor: UIColor = UIColor.white {
didSet {
layer.borderColor = borderColor.cgColor
}
}


@IBInspectable var borderWidth: CGFloat = 2.0 {
didSet {
layer.borderWidth = borderWidth
}
}


@IBInspectable var cornerRadius: CGFloat = 0.0 {
didSet {
layer.cornerRadius = cornerRadius
}
}


}

在obj c中通过编程实现吗

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 50,    200, 200)];


view.layer.backgroundColor = [UIColor whiteColor].CGColor;
view.layer.cornerRadius = 20.0;
view.layer.frame = CGRectInset(v.layer.frame, 20, 20);


[view.layer.shadowOffset = CGSizeMake(1, 0);
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowRadius = 5;
view.layer.shadowOpacity = .25;][1]


[self.view addSubview:view];

我们也可以从stoaryboard做这个。

 layer.cornerRadius  Number  5

enter image description here

Swift 4 -使用IBDesignable

   @IBDesignable
class DesignableView: UIView {
}


extension UIView
{


@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
}
view.layer.cornerRadius = 25
view.layer.masksToBounds = true

如果圆角在viewDidload ()中不起作用,最好在viewDidLayoutSubview ()中编写代码

-(void)viewDidLayoutSubviews
{
viewTextfield.layer.cornerRadius = 10.0 ;
viewTextfield.layer.borderWidth = 1.0f;
viewTextfield.layer.masksToBounds =  YES;
viewTextfield.layer.shadowRadius = 5;
viewTextfield.layer.shadowOpacity = 0.3;
viewTextfield.clipsToBounds = NO;
viewTextfield.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
}

希望这能有所帮助!

在Swift 4.2和Xcode 10.1中

let myView = UIView()
myView.frame = CGRect(x: 200, y: 200, width: 200, height: 200)
myView.myViewCorners()
//myView.myViewCorners(width: myView.frame.width)//Pass View width
view.addSubview(myView)


extension UIView {
//If you want only round corners
func myViewCorners() {
layer.cornerRadius = 10
layer.borderWidth = 1.0
layer.borderColor = UIColor.red.cgColor
layer.masksToBounds = true
}
//If you want complete round shape, enable above comment line
func myViewCorners(width:CGFloat) {
layer.cornerRadius = width/2
layer.borderWidth = 1.0
layer.borderColor = UIColor.red.cgColor
layer.masksToBounds = true
}
}

——SwiftUI

在SwiftUI中,你可以直接在任何View上使用cornerRadius修饰符。 例如这个问题:

Text("Signing In…")
.padding(16)
.background(Color.red)
.cornerRadius(50)

Preview

请注意,没有更多的菱形半径,所以即使你设置角半径超过一半的高度,它也会平滑地旋转。

结帐 这个答案查看如何在SwiftUI中圆角特定角