본문 바로가기
개발/ios

UIView의 원 테두리가 얇거나 작아보일때...

by 매몰 2018. 1. 29.

 

 

가끔 우리는 아주 사소한 차이로 고민할 때가 있다.

 

이거 왜이러니? 기분탓인가? 한번 살펴볼까? 귀찮다 이정도쯤이야 뭐..

 

하고 지나친적이 있지 않은가ㅎ 나는 많다ㅎㅎ

최근에도 그랬다.

 

UIView에서 StrokeEllipse 를 이용해 rect 크기 만큼 원 테두리를 그릴수 있다.

하지만 그려 놓고 나니 왠지 생각보다 작아보였고, 안에 색깔있는 원을 넣으니 테두리 굵기마저 얇아 보였다.. 뭐지???

 

처음엔 그냥 지나쳤다가 똥싸고 손안씻은것처럼 찝찝해서 한번 살펴보았다.

바보같았다... 왜 몰랐을까? 테두리 굵기는 양쪽으로 넓어진다는 사실을...

그래서 한쪽 굵기만큼 반이 얇아지고 작게 보이는 것이었다. 

 

아래와 같이 하면 금방 해결된다.. 혹시나 귀찮아서 그냥 지나칠 분들을 위해 글을 남긴다.

 

 

 

@IBInspectable var color: UIColor = UIColor.redColor()

@IBInspectable var borderColor: UIColor = UIColor.blackColor()

 

@IBInspectable var borderWidth: CGFloat = 2

 

override func drawRect(rect: CGRect) {

    let context = UIGraphicsGetCurrentContext()

        

    //테두리용 크기 얻기

    let inRect = strokeRect(rect, width: borderWidth)

        

    //색을 체운 그리기

    drawColor(context!, color: color, rect: inRect)

        

    // 테두리 그리기

    drawStroke(context!, width: borderWidth, color: borderColor, rect: inRect)

}

  

    

private func drawColor(context: CGContext, color: UIColor, rect: CGRect) {

    CGContextSetFillColorWithColor(context, color.CGColor)

    CGContextFillEllipseInRect(context, rect)

}

    

private func drawStroke(context: CGContext, width: CGFloat, color: UIColor, rect: CGRect) {

    CGContextSetLineWidth(context, width)

    CGContextSetStrokeColorWithColor(context, color.CGColor)

    CGContextStrokeEllipseInRect(context, rect)

}

    

private func strokeRect(rect: CGRect, width: CGFloat) -> CGRect {

    //굵기의 반만큼 rect 크기를 줄인다

    let width2 = width / 2

    return CGRectInset(rect, width2, width2)

 

}

 

 

 

 

 

 

 

 

도움이 되셨다면~ 정성으로 빚은 저희 앱!  많은 이용 바래요:)

 

https://meorimal.com/index.html?tab=spaceship

 

우주선 - 방치형 인공지능 투자 체험기

미리 맛보는 인공지능 투자!

(주)머리말 meorimal.com

 

https://meorimal.com/subway.html

 

지하철어디있니

더이상 고민하지 마세요. 뛸지 말지 딱 보면 알죠.

(주)머리말 meorimal.com

 

사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기