ios - tab - xcode framework教學




給UIView圓角 (13)

迅速

簡短的回答:

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)

您可以通過更改視圖layercornerRadius屬性來放棄它。

blueView.layer.cornerRadius = 8

較大的半徑值會帶來更多圓角

blueView.layer.cornerRadius = 25

而較小的值會減少圓角。

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

這給出了這個結果:

clipsToBoundsmasksToBounds都是equivalent 。 第一個與UIView使用,第二個與CALayer

也可以看看

  • 如何添加邊框和陰影
  • 貝塞爾路徑
  • Transformations

我的登錄視圖有一個子視圖,它有一個UIActivityView和一個UILabel說“正在登錄...”。 這個子視圖的角落不是四捨五入的。 我怎樣才能讓它們變圓?

有沒有辦法在我的xib內部做到這一點?


Swift 4 - 使用IBDesignable

   @IBDesignable
    class DesignableView: UIView {
    }

    extension UIView
    {

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

你可以使用下面的自定義UIView類寫在Swift 3.0中,它也可以改變邊框的顏色和寬度。 因為這是IBDesignalbe您也可以更改界面構建器中的屬性。

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

}

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

}

在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


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

希望這可以幫助!


您還可以使用界面構建器的“ 用戶定義的運行時屬性”功能將關鍵路徑layer.cornerRadius設置為一個值。 確保你包含了QuartzCore庫。

這個技巧也適用於設置layer.borderWidth,但它不適用於layer.borderColor因為這需要一個CGColor而不是UIColor

您將無法在故事板中看到效果,因為這些參數是在運行時評估的。


您需要先導入頭文件<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 ,否則效果可能不會顯示。


現在,您可以使用@IBInspectable中的UIView中的swift類別(代碼如圖所示的代碼)在故事板中顯示結果(如果您使用的是類別,請僅使用cornerRadius而不是layer.cornerRadius作為關鍵路徑。

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


與埃德馬蒂的方法不同的是:

#import <QuartzCore/QuartzCore.h>

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

你需要setMasksToBounds來從IB加載所有的對象...我有一個問題,我的視圖四捨五入,但沒有IB的對象:/

這固定= D希望它有幫助!


請導入Quartzcore framework然後您必須將setMaskToBounds設置為TRUE這是非常重要的一行。

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


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

view.layer.cornerRadius = 25
view.layer.masksToBound = true




uiview