[ios] UIView 둥근 모서리 제공

내 로그인 뷰는이 하위 뷰를 가지고 UIActivityViewUILabel“…에 서명”말을. 이 서브 뷰에는 둥글 지 않은 모서리가 있습니다. 어떻게 둥글게 만들 수 있습니까?

내 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. 그렇지 않으면 효과가 표시되지 않을 수 있습니다.