내 로그인 뷰는이 하위 뷰를 가지고 UIActivityView
와 UILabel
"...에 서명"말을. 이 서브 뷰에는 둥글 지 않은 모서리가 있습니다. 어떻게 둥글게 만들 수 있습니까?
내 xib 내에서 할 수있는 방법이 있습니까?
내 로그인 뷰는이 하위 뷰를 가지고 UIActivityView
와 UILabel
"...에 서명"말을. 이 서브 뷰에는 둥글 지 않은 모서리가 있습니다. 어떻게 둥글게 만들 수 있습니까?
내 xib 내에서 할 수있는 방법이 있습니까?
답변:
이 시도
#import <QuartzCore/QuartzCore.h> // not necessary for 10 years now :)
...
view.layer.cornerRadius = 5;
view.layer.masksToBounds = true;
참고 : 둥근 모서리를 UIViewController
보기 에 적용하려는 경우 보기 가 실제로 인스턴스화 된 -viewDidLoad
후 보기 컨트롤러의 생성자에 적용되지 않아야합니다 view
.
또한 인터페이스 빌더 의 사용자 정의 런타임 속성 기능을 사용하여 키 경로 layer.cornerRadius
를 값으로 설정할 수 있습니다. QuartzCore
그래도 라이브러리 를 포함시켜야합니다 .
이 트릭은 layer.borderWidth 설정에도 작동하지만을 layer.borderColor
기대 하지 않으므로 작동 CGColor
하지 않습니다 UIColor
.
이러한 매개 변수는 런타임에 평가되므로 스토리 보드에서 효과를 볼 수 없습니다.
Clip Subviews
보기 IB에 대한 옵션도 확인하십시오
이제 @IBInspectable과 함께 UIView에서 빠른 범주 (그림 아래 코드)를 사용하여 스토리 보드에 결과를 표시 할 수 있습니다 (범주를 사용하는 경우 layer.cornerRadius가 아닌 키 경로로 cornerRadius 만 사용하십시오.
extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
}
@IBDesignable
IB에서 실시간 미리보기를 위해 태그를 지정하십시오 . ( nshipster.com/ibinspectable-ibdesignable 에서 자세히 알아보기 )
짧은 답변:
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)
cornerRadius
뷰의 속성을 변경하여 둥근 모서리를 줄 수 있습니다 layer
.
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
있다 상응 . 첫 번째는와 함께 UIView
사용되고 두 번째는와 함께 사용됩니다 CALayer
.
blueView.frame.size.height/2
)의 절반으로 설정하면 모서리 가 완벽하게 둥글게됩니다.
Ed Marty와 다른 접근법 :
#import <QuartzCore/QuartzCore.h>
[v.layer setCornerRadius:25.0f];
[v.layer setMasksToBounds:YES];
IB에서 모든 객체를로드하려면 setMasksToBounds가 필요합니다 ...보기가 반올림되는 문제가 있지만 IB의 객체는 없었습니다.
이 수정 = D 도움이되기를 바랍니다!
이 블로그 게시물에 설명 된대로 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];
}
멋진 부분은 반올림 할 모서리를 선택할 수 있다는 것입니다.
먼저 헤더 파일을 가져와야합니다 <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
테두리 색상과 너비를 변경할 수있는 다음과 같은 사용자 정의 클래스를 사용할 수 있습니다. 이이기 때문에 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 *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];
@IBDesignable
class DesignableView: UIView {
}
extension UIView
{
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
}
layer.cornerRadius
원래 상태로 돌아 가지 못하게 합니까? (즉, xcode 스토리 보드 cornerRadius
는 원본 UIView
이 초기화 된 후에 만 설정하는 방법을 어떻게 알 수 있습니까?)
SwiftUI에서는 원하는 곳에서 cornerRadius
수정자를 직접 사용할 수 있습니다 View
. 이 질문의 예는 다음과 같습니다.
Text("Signing In…")
.padding(16)
.background(Color.red)
.cornerRadius(50)
참고 것을 당신이 CornerRadius를 설정 때문에 경우에도, 반경 등 더 이상 다이아몬드가없는 이상 높이의 절반 이상 이 원활 라운드 것입니다.
체크 아웃 이 답변 하는 방법에 자체에를 라운드 특정의 코너 SwiftUI에서
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
둥근 모서리가 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);
}
도움이 되었기를 바랍니다!
이미지를 사용할 수도 있습니다.
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 Boolean 이미지의 부울 값은 여전히 코너 반경 경계를 벗어나지 않습니다.
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)
}
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
}
}