iphone ios dev - 코코아 터치 : 어떻게 UIView의 테두리 색상과 두께를 변경하려면?
Xcode 6 업데이트
Xcode의 최신 버전에는 더 나은 해결책이 있습니다.
@IBInspectable
을 사용하면 Attributes Inspector
에서 Attributes를 직접 설정할 수 있습니다.
그러면 User Defined Runtime Attributes
이 설정됩니다.
이를 설정하는 방법에는 두 가지가 있습니다.
옵션 1 (스토리 보드에서 실시간 업데이트 포함)
-
MyCustomView
작성하십시오. - 이것은
UIView
에서 상속됩니다. -
@IBDesignable
설정@IBDesignable
(그러면 View 업데이트가 실행됩니다.) * -
@IBInspectable
런타임 속성 (테두리 등)을 설정하십시오. - Views 클래스를
MyCustomView
변경하십시오. - 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
}
}
}
* @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
클래스를 변경할 필요가 없다는 것입니다. 그러나이 단점 중 하나는 앱을 실행할 때만 변경 사항이 표시된다는 것입니다.
저는 검사관에게 배경색을 바꿀 수 있음을 알았지 만 테두리 색과 두께도 변경하고 싶습니다. 가능한가요?
감사
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는 뷰 자체에서 경계선을 원했지만 이것은 실행 가능한 대안 일 수 있습니다.
다른면에 다른 테두리를 추가하려는 경우 특정 스타일의 하위보기를 추가하는 것이 쉬운 방법입니다.