[ios] UIButton에서 테두리를 만드는 방법은 무엇입니까?

내 앱에서 “addButton”이라는 사용자 정의 버튼을 사용하고 흰색으로 테두리를 만들고 싶습니다. 사용자 정의 버튼 주위에 흰색 테두리를 얻으려면 어떻게해야합니까?



답변

버튼의 레이어 속성에 액세스하여 CALayer에서 테두리 속성을 설정할 수 있습니다.

먼저 Quartz를 추가하십시오

#import <QuartzCore/QuartzCore.h>

속성 설정 :

myButton.layer.borderWidth = 2.0f;
myButton.layer.borderColor = [UIColor greenColor].CGColor;

보다:

https://developer.apple.com/documentation/quartzcore/calayer#//apple_ref/occ/cl/CALayer

위 링크의 CALayer를 사용하면 모서리 반경, maskToBounds 등과 같은 다른 속성을 설정할 수 있습니다.

또한 버튼 재미에 대한 좋은 기사 :

https://web.archive.org/web/20161221132308/http://www.apptite.be/tutorial_custom_uibuttons.php


답변

매우 간단합니다. 파일에 quartzCore 헤더를 추가하십시오 (프로젝트에 쿼츠 프레임 워크를 추가해야합니다)

그리고이 작업을 수행

[[button layer] setCornerRadius:8.0f];

[[button layer] setMasksToBounds:YES];

[[button layer] setBorderWidth:1.0f];

필요에 따라 float 값을 변경할 수 있습니다.

즐겨.


전형적인 현대 코드는 다음과 같습니다.

self.buttonTag.layer.borderWidth = 1.0f;
self.buttonCancel.layer.borderWidth = 1.0f;

self.buttonTag.layer.borderColor = [UIColor blueColor].CGColor;
self.buttonCancel.layer.borderColor = [UIColor blueColor].CGColor;

self.buttonTag.layer.cornerRadius = 4.0f;
self.buttonCancel.layer.cornerRadius = 4.0f;

그것은 세그먼트 컨트롤과 비슷한 모습입니다.

스위프트 업데이트 :

  • “QuartzCore”를 추가 할 필요가 없습니다

그냥 해:

button.layer.cornerRadius = 8.0
button.layer.borderWidth = 1.0
button.layer.borderColor = UIColor.black.cgColor


답변

그리고 신속하게 “QuartzCore / QuartzCore.h”를 가져올 필요가 없습니다.

그냥 사용하십시오 :

button.layer.borderWidth = 0.8
button.layer.borderColor = (UIColor( red: 0.5, green: 0.5, blue:0, alpha: 1.0 )).cgColor

또는

button.layer.borderWidth = 0.8
button.layer.borderColor = UIColor.grayColor().cgColor


답변

레이어를 설정 문제는의 borderWidthborderColor 당신이 버튼을 터치 할 때 경계가 하이라이트 효과를 애니메이션하지 않습니다.

물론 버튼의 이벤트를 관찰하고 그에 따라 테두리 색상을 변경할 수 있지만 불필요한 느낌입니다.

또 다른 옵션은 확장 가능한 UIImage를 만들어 버튼의 배경 이미지로 설정하는 것입니다. 다음과 같이 Images.xcassets에서 이미지 세트를 만들 수 있습니다.

Images.xcassets

그런 다음 버튼의 배경 이미지로 설정합니다.

버튼 속성

이미지가 템플릿 이미지 인 경우 버튼의 색조 색상을 설정할 수 있으며 테두리가 변경됩니다.

최종 버튼

이제 터치하면 나머지 버튼으로 테두리가 강조 표시됩니다.


답변

반경, 색상 및 너비 버튼을 변경하려면 다음과 같이 설정하십시오.

self.myBtn.layer.cornerRadius = 10;
self.myBtn.layer.borderWidth = 1;
self.myBtn.layer.borderColor =[UIColor colorWithRed:189.0/255.0f green:189.0/255.0f blue:189.0/255.0f alpha:1.0].CGColor;


답변

Ben Packard의 답변 에서 업데이트 된 버전 ( Swift 3.0.1 )이 있습니다 .

import UIKit

@IBDesignable class BorderedButton: UIButton {

    @IBInspectable var borderColor: UIColor? {
        didSet {
            if let bColor = borderColor {
                self.layer.borderColor = bColor.cgColor
            }
        }
    }

    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            self.layer.borderWidth = borderWidth
        }
    }

    override var isHighlighted: Bool {
        didSet {
            guard let currentBorderColor = borderColor else {
                return
            }

            let fadedColor = currentBorderColor.withAlphaComponent(0.2).cgColor

            if isHighlighted {
                layer.borderColor = fadedColor
            } else {

                self.layer.borderColor = currentBorderColor.cgColor

                let animation = CABasicAnimation(keyPath: "borderColor")
                animation.fromValue = fadedColor
                animation.toValue = currentBorderColor.cgColor
                animation.duration = 0.4
                self.layer.add(animation, forKey: "")
            }
        }
    }
}

그 결과 버튼을 스토리 보드 덕분에 내부에 사용할 수 있습니다 @IBDesignable@IBInspectable태그입니다.

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

또한 정의 된 두 가지 속성을 사용하면 인터페이스 빌더에서 직접 테두리 너비와 색상을 설정하고 결과를 미리 볼 수 있습니다.

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

테두리 반경 및 하이라이트 페이딩 시간에 대해서도 비슷한 방식으로 다른 속성을 추가 할 수 있습니다.


답변

가져올 필요가 없습니다 QuartzCore.h지금 . iOS 8 SDK 및 Xcode 6.1을 참조하십시오.

직접 사용 :

[[myButton layer] setBorderWidth:2.0f];
[[myButton layer] setBorderColor:[UIColor greenColor].CGColor];