[ios] 코코아 터치 : UIView의 테두리 색상과 두께를 변경하는 방법?

검사관에서 배경색을 변경할 수 있지만 테두리 색과 두께도 변경하고 싶습니다. 이것이 가능합니까?



답변

테두리 속성을 설정하려면 뷰의 레이어를 사용해야합니다. 예 :

#import <QuartzCore/QuartzCore.h>
...
view.layer.borderColor = [UIColor redColor].CGColor;
view.layer.borderWidth = 3.0f;

이 기능에 액세스하려면 QuartzCore.framework와 링크해야합니다.


답변

Xcode 6 업데이트

Xcode의 최신 버전 이후에는 더 나은 해결책이 있습니다.

으로 @IBInspectable당신은에서 직접 속성을 설정할 수 있습니다 Attributes Inspector .

내 사용자 정의보기 @IBInspectable 속성

이것은 User Defined Runtime Attributes당신을 위해 설정합니다 :

여기에 이미지 설명을 입력하십시오

이를 설정하는 방법에는 두 가지가 있습니다.

옵션 1 (스토리 보드에서 실시간 업데이트)

  1. 을 만듭니다 MyCustomView.
  2. 이에서 상속됩니다 UIView.
  3. 설정 @IBDesignable(이것은 View 업데이트를 라이브로 만듭니다). *
  4. 런타임 속성 (테두리 등)을 @IBInspectable
  5. 조회수 클래스를로 변경 MyCustomView
  6. 속성 패널에서 편집하고 스토리 보드의 변경 사항을보십시오. 🙂

`

@IBDesignable
class MyCustomView: UIView {
    @IBInspectable var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }
    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }
    @IBInspectable var borderColor: UIColor? {
        didSet {
            layer.borderColor = borderColor?.CGColor
        }
    }
}

* @IBDesignable시작시 설정 한 경우에만 작동class MyCustomView

옵션 2 (Swift 1.2 이후 작동하지 않음, 설명 참조)

UIView 클래스를 확장하십시오.

extension UIView {
    @IBInspectable var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }
    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }
    @IBInspectable var borderColor: UIColor? {
        didSet {
            layer.borderColor = borderColor?.CGColor
        }
    }
}

이런 식으로 기본보기 에는 항상 추가 편집 가능한 필드가 Attributes Inspector있습니다. 또 다른 장점은 MycustomView매번 수업을 변경할 필요가 없다는 것 입니다. 그러나 이것의 한 가지 단점은 앱을 실행할 때만 변경 사항을 볼 수 있다는 것입니다.


답변

원하는 색상으로 테두리를 만들 수도 있습니다.

view.layer.borderColor = [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0].CGColor;

* r, g, b는 0에서 255 사이의 값입니다.


답변

UIView 확장에 다음 @IBInspectables 추가

extension UIView {

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

  @IBInspectable var borderColor: UIColor? {
    get {
      if let color = layer.borderColor {
        return UIColor(CGColor: color)
      }
      return nil
    }
    set(newValue) {
      layer.borderColor = newValue?.CGColor
    }
  }
}

그런 다음 속성 관리자에서 직접 borderColor 및 borderWidth 속성을 설정할 수 있어야합니다. 첨부 된 이미지 참조

속성 관리자


답변

Vladimir의 CALayer 솔루션을 사용할 때 모달 UINavigationController가 닫히는 것과 같은 애니메이션이 표시되면 많은 결함이 발생하고 드로잉 성능 문제가 발생합니다.

따라서이를 달성하지만 결함과 성능 손실이없는 또 다른 방법은 사용자 정의 UIView를 만들고 drawRect메시지를 다음과 같이 구현하는 것입니다.

- (void)drawRect:(CGRect)rect
{
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(contextRef, 1);
    CGContextSetRGBStrokeColor(contextRef, 255.0, 255.0, 255.0, 1.0);
    CGContextStrokeRect(contextRef, rect);
}


답변

view.layer.borderWidth = 1.0
view.layer.borderColor = UIColor.lightGray.cgColor


답변

이 코드를 사용해보십시오 :

view.layer.borderColor =  [UIColor redColor].CGColor;
view.layer.borderWidth= 2.0;
[view setClipsToBounds:YES];