给人的UIView圆角

问题描述 投票:551回答:20

我登录视图有具有UIActivityViewUILabel说一个子视图“登录...”。此子视图具有未圆角。我怎样才能让他们圆的?

有没有办法做到这一点我XIB里面?

ios cocoa-touch uiview
20个回答
1194
投票

尝试这个

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

...

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

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


3
投票

斯威夫特4 - 使用IBDesignable

   @IBDesignable
    class DesignableView: UIView {
    }

    extension UIView
    {

        @IBInspectable
        var cornerRadius: CGFloat {
            get {
                return layer.cornerRadius
            }
            set {
            layer.cornerRadius = newValue
        }
    }
}

3
投票
view.layer.cornerRadius = 25
view.layer.masksToBounds = true

2
投票

请输入Quartzcore framework那么你必须设置setMaskToBoundsTRUE这个非常重要的线。

然后:[[yourView layer] setCornerRadius:5.0f];


2
投票
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;
}

1
投票

在OBJç编程方式做到这一点

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];

我们也可以从情节串连图板做到这一点。

 layer.cornerRadius  Number  5

enter image description here


1
投票

如果圆角不是在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);
}

希望这可以帮助!


0
投票

您也可以使用图像:

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];

0
投票

设置cornerRadious物业全方位视角

集masksToBounds布尔值,图像也不会仍然圆角半径边界外绘制

view.layer.cornerRadius = 5;

view.layer.masksToBounds = YES;

0
投票

使用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)

}

0
投票

在雨燕4.2和10.1的Xcode

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
    }
}

257
投票

您还可以使用自定义属性运行界面生成器的功能,关键路径layer.cornerRadius设置为一个值的用户。请确保您包括QuartzCore库虽然。

这招也适用于设置layer.borderWidth但是它不会layer.borderColor工作,因为这需要一个CGColor不是UIColor

因为这些参数在运行时进行评估,您将无法看到故事板的影响。


-4
投票

ON的Xcode 6你试试

     self.layer.layer.cornerRadius = 5.0f;

要么

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

60
投票

现在你可以在使用的UIView迅速类别(代码波纹管图片)与@IBInspectable在故事板显示结果(如果您使用的范畴,只能使用cornerRadius而不是layer.cornerRadius作为关键路径。

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


53
投票

Swift

简短的回答:

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

Supplemental Answer

如果你来到了这个答案,你可能已经看到了足够解决你的问题。我加入这个答案给一位用于更直观的解释,为什么事情做他们做什么。

如果你开始定期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

您可以通过更改视图的cornerRadiuslayer财产给它圆角。

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

无论clipsToBoundsmasksToBoundsequivalent。这仅仅是第一个被使用UIView第二个是使用CALayer

See also


43
投票

一种不同的方法比一个埃德马蒂做的:

#import <QuartzCore/QuartzCore.h>

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

您需要setMasksToBounds它加载来自IB的所有对象...我得到在我的观点得到了四舍五入的问题,但并没有从IB有对象:/

这个固定= d希望它能帮助!


27
投票

正如在描述this blog post,这里是圆一个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];
}

关于它的凉爽的部分是,你可以选择要四舍五入这角落。


19
投票

首先,您需要导入头文件<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,否则效果可能不会显示。


10
投票

您可以使用下面的自定义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
        }
    }

}

6
投票
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];
© www.soinside.com 2019 - 2024. All rights reserved.