Nice programing

UIView 둥근 모서리 제공

nicepro 2020. 10. 3. 11:51
반응형

UIView 둥근 모서리 제공


내 로그인보기에는 "Signing In…" 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.

이러한 매개 변수는 런타임에 평가되기 때문에 스토리 보드에서 효과를 볼 수 없습니다.

인터페이스 빌더를 사용하여 코너 반경 설정


이제 @IBInspectable과 함께 UIView의 빠른 범주 (그림 아래 코드)를 사용하여 스토리 보드에 결과를 표시 할 수 있습니다 (범주를 사용하는 경우 layer.cornerRadius가 아닌 cornerRadius 만 키 경로로 사용하십시오.

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

여기에 이미지 설명 입력


빠른

짧은 답변:

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.

또한보십시오


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

Swift 4-IBDesignable 사용

   @IBDesignable
    class DesignableView: UIView {
    }

    extension UIView
    {

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

view.layer.cornerRadius = 25
view.layer.masksToBounds = true

가져 오기를 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

여기에 이미지 설명 입력


둥근 모서리가 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 이미지의 부울 값은 여전히 ​​모서리 반경 경계 외부에 그려지지 않습니다.

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

Xcode 6 사용 시도

     self.layer.layer.cornerRadius = 5.0f;

또는

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

참고 URL : https://stackoverflow.com/questions/1509547/giving-uiview-rounded-corners

반응형