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)
您可以通過更改視圖layer
的cornerRadius
屬性來放棄它。
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
這給出了這個結果:
clipsToBounds
和masksToBounds
都是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