ProgramingTip

imageView의 모서리 반경을 설정하는 방법은 무엇입니까?

bestdevel 2020. 12. 2. 21:41
반응형

imageView의 모서리 반경을 설정하는 방법은 무엇입니까?


Objective-C에서 기존 라인

self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame)/4.0f;

그것의 일을, 나는 유추를 사용하여 Swift에서 시도했습니다

self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame)/4.0

아무것도 바뀌지 않고 모서리는 이전과 동일합니다. 또한 Xcode는 구문 오류를 표시하지 않습니다. Swift는이 목표를 달성하기위한 다른 방법을 지원합니까? 여기에서 다른 방식을 사용하는 것이 일반적으로 위에 수행됩니다.


레이어가 클립 영역을 벗어나면 경계에 마스크를 설정해야합니다.

self.mainImageView.layer.masksToBounds = true

로부터 문서 :

기본적으로 모서리 반경은 레이어의 콘텐츠 속성에있는 이미지에 적용됩니다. 레이어의 배경색과 적용에만 적용됩니다. 그러나 masksToBounds 속성을 true로 설정하면 콘텐츠가 모서리 모서리로 잘립니다.


Swift 3.0Xcode8 에는 작은 차이가 있습니다.

모서리 반경을 UIView에 청구 yourUIView.layoutIfNeeded()하기 전에 호출 해야합니다 cornerRadius.

라이선스 UIView의 높이와 너비 (1000.0)에 대한 참조를 반환하여 뷰가 사라질 수 있습니다.

레이어 속성을 설정하기 전에 항상 UIView (인터페이스 전에 제약 등)의 크기를 적용하십시오.

UIView 클래스 구현 예

class BadgeView: UIView {

  override func awakeFromNib() {

    self.layoutIfNeeded()
    layer.cornerRadius = self.frame.height / 2.0
    layer.masksToBounds = true

   }
 }

이 시도

self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame)/4.0
self.mainImageView.clipsToBounds = true

"사용자 정의 실행 속성"을 제공하는 모든보기의 반경을 정의하고 사용자 유형의 "layer.cornerRadius"키 경로를 제공하는 한 다음 필요한 반경 값을 제공 할 수 있습니다. 아래 첨부 된 이미지를 참조하십시오.

XCode에서 구성

에뮬레이터의 결과


@IBInspectableswift (또는 Objective-C에서 IBInspectable)로 표시되어 인터페이스 빌더의 속성 검사기 패널에서 쉽게 편집 할 수 있습니다. 속성 관리자에서 borderWidth , cornerRadius , borderColor
직접 수 있습니다.

extension UIView {

  @IBInspectable var cornerRadius: CGFloat {

   get{
        return layer.cornerRadius
    }
    set {
        layer.cornerRadius = newValue
        layer.masksToBounds = newValue > 0
    }
  }

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

  @IBInspectable var borderColor: UIColor? {
    get {
        return UIColor(cgColor: layer.borderColor!)
    }
    set {
        layer.borderColor = borderColor?.cgColor
    }
  }
}

여기에 이미지 설명 입력


3'CGRectGetWidth '가'CGRect.width '속성으로 대체되었습니다.

    view.layer.cornerRadius = view.frame.width/4.0
    view.clipsToBounds = true

스위프트 3, Xcode 8, iOS 10

DispatchQueue.main.async {
  self.mainImageView.layer.cornerRadius = self.mainImageView.bounds.size.width / 2.0
  self.mainImageView.clipsToBounds = true
}

가장 쉬운 방법은 UIImageView 하위 클래스를 만드는 것입니다 (해본 적이없는 iPhone 7 및 XCode 8에서 완벽하게 작동합니다).

class CIRoundedImageView: UIImageView {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func awakeFromNib() {

        self.layoutIfNeeded()
        layer.cornerRadius = self.frame.height / 2.0
        layer.masksToBounds = true
    }
}

그런 다음 접근 할 수 있습니다.

imageView.layer.borderWidth = 2.0

imageView.layer.borderColor = UIColor.blackColor().CGColor

UIView특정 모서리를 둥글게 할 수 있는 확장 프로그램을 만들었습니다 .

import UIKit

enum RoundType {
    case top
    case none
    case bottom
    case both
}

extension UIView {

    func round(with type: RoundType, radius: CGFloat = 3.0) {
        var corners: UIRectCorner

        switch type {
        case .top:
            corners = [.topLeft, .topRight]
        case .none:
            corners = []
        case .bottom:
            corners = [.bottomLeft, .bottomRight]
        case .both:
            corners = [.allCorners]
        }

        DispatchQueue.main.async {
            let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
            let mask = CAShapeLayer()
            mask.path = path.cgPath
            self.layer.mask = mask
        }
    }

}

Swift에서 시도하십시오.

self.photoView.layer.cornerRadius = self.photoView.frame.height/2

참고 URL : https://stackoverflow.com/questions/27861383/how-to-set-corner-radius-of-imageview

반응형