iphone ios dev - 코코아 터치 : 어떻게 UIView의 테두리 색상과 두께를 변경하려면?





6 Answers

Xcode 6 업데이트

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

@IBInspectable 을 사용하면 Attributes Inspector 에서 Attributes를 직접 설정할 수 있습니다.

그러면 User Defined Runtime Attributes 이 설정됩니다.

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

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

  1. MyCustomView 작성하십시오.
  2. 이것은 UIView 에서 상속됩니다.
  3. @IBDesignable 설정 @IBDesignable (그러면 View 업데이트가 실행됩니다.) *
  4. @IBInspectable 런타임 속성 (테두리 등)을 설정하십시오.
  5. Views 클래스를 MyCustomView 변경하십시오.
  6. Attributes Panel에서 편집하고 Storyboard의 변경 사항을 확인하십시오 :)

`

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

* @IBDesignableclass 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 클래스를 변경할 필요가 없다는 것입니다. 그러나이 단점 중 하나는 앱을 실행할 때만 변경 사항이 표시된다는 것입니다.

doc membercenter developer

저는 검사관에게 배경색을 바꿀 수 있음을 알았지 만 테두리 색과 두께도 변경하고 싶습니다. 가능한가요?

감사




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 특성을 직접 설정할 수 있어야합니다. 첨부 된 이미지보기

속성 검사기




이 코드를보십시오 :

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



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



UIView의 레이어를 편집하지 않으려는 경우 언제든지 다른보기에보기를 포함시킬 수 있습니다. 부모 뷰의 배경색은 테두리 색상으로 설정됩니다. 국경을 원하는 넓이에 따라 조금 더 큽니다.

물론 이것은보기가 투명하지 않고 단 하나의 테두리 색상 만 원한다면 작동합니다. OP는 뷰 자체에서 경계선을 원했지만 이것은 실행 가능한 대안 일 수 있습니다.




다른면에 다른 테두리를 추가하려는 경우 특정 스타일의 하위보기를 추가하는 것이 쉬운 방법입니다.




Related