给UIView圆angular
我的login视图有一个子视图,它有一个UIActivityView
和一个UILabel
说“正在login…”。 这个子视图有不圆的angular落。 我怎样才能使他们圆?
有没有办法在我的xib内部做到这一点?
尝试这个
#import <QuartzCore/QuartzCore.h> // not necessary for 10 years now :)
…
view.layer.cornerRadius = 5; view.layer.masksToBounds = true;
注意:如果你试图将圆angular应用到UIViewController
的视图,它不应该被应用在视图控制器的构造函数中,而应该在-viewDidLoad
,在view
被实际实例化之后。
您还可以使用界面构build器的“ 用户定义的运行时属性”function将关键pathlayer.cornerRadius
设置为一个值。 确保你包含了QuartzCore
库。
这个技巧也适用于设置layer.borderWidth,但它不会为layer.borderColor
工作,因为这需要一个CGColor
而不是一个UIColor
。
您将无法在故事板中看到效果,因为这些参数是在运行时评估的。
现在,您可以使用@IBInspectable中的UIView(图片中的代码)中的swift类别在故事板中显示结果(如果使用类别,则只使用cornerRadius而不使用layer.cornerRadius作为关键path。
extension UIView { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } set { layer.cornerRadius = newValue layer.masksToBounds = newValue > 0 } } }
与Ed Marty不同的是:
#import <QuartzCore/QuartzCore.h> [v.layer setCornerRadius:25.0f]; [v.layer setMasksToBounds:YES];
你需要setMasksToBounds为它从IB加载所有的对象…我有一个问题,我的看法四舍五入,但没有IB的对象:/
这固定= D希望它有帮助!
正如在这篇博客文章中所描述的 ,这里是一个圆angular的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]; }
关于它的很酷的部分是,你可以select你想要四舍五入的angular落。
迅速
简短的回答:
myView.layer.cornerRadius = 8 myView.layer.masksToBounds = true // optional
补充答案
如果你有这个答案,你可能已经看到足够的解决你的问题。 我添加了这个答案给了一些更直观的解释为什么事情做他们做的事情。
如果你从一个普通的UIView
开始,它有方形的angular落。
let blueView = UIView() blueView.frame = CGRect(x: 100, y: 100, width: 100, height: 50) blueView.backgroundColor = UIColor.blueColor() view.addSubview(blueView)
您可以通过更改视图layer
的cornerRadius
属性来放弃它。
blueView.layer.cornerRadius = 8
半径值越大,圆angular越多
blueView.layer.cornerRadius = 25
而较小的值则会减less圆angular。
blueView.layer.cornerRadius = 3
这可能足以解决你的问题。 然而,有时一个视图可以有一个子视图或一个超出视图边界的子图层。 例如,如果我要添加一个这样的子视图
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)
然后我会结束
现在,如果我不想让事情悬在边界之外,我可以做到这一点
blueView.clipsToBounds = true
或这个
blueView.layer.masksToBounds = true
这给出了这个结果:
clipsToBounds
和masksToBounds
都是等效的 。 第一个和UIView
使用,第二个和CALayer
。
也可以看看
- 如何添加边框和阴影
- 贝塞尔path
- 转换
您需要先导入头文件<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 *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];
你可以使用下面的自定义UIView类写在Swift 3.0,也可以改变边框的颜色和宽度。 因为这是IBDesignalbe您也可以更改界面构build器中的属性。
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 } } }
请导入Quartzcore framework
然后你必须将setMaskToBounds
设置为TRUE
这个非常重要的行。
然后: [[yourView layer] setCornerRadius:5.0f];
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; }
在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
Swift 4 – 使用IBDesignable
@IBDesignable class DesignableView: UIView { } extension UIView { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } set { layer.cornerRadius = newValue } } }
你也可以使用一个图像:
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];
设置cornerRadious属性为圆视图
set masksToBounds图像的布尔值将不会被绘制在angular半径边界之外
view.layer.cornerRadius = 5; view.layer.masksToBounds = YES;
使用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) }
ON Xcode 6您的尝试
self.layer.layer.cornerRadius = 5.0f;
要么
self.layer.layer.cornerRadius = 5.0f; self.layer.clipsToBounds = YES;