광어네 맛집

[Swift & Objective C] 점선 그리기 본문

Swift/Tips

[Swift & Objective C] 점선 그리기

Lautner Jacob 2022. 12. 29. 16:43
728x90
반응형

이번 포스팅은 쉬운 거 같지만
막상 하려면 헷갈리는 점선 그리는 방법을 알아보도록 하겠습니다!
그리고 Swift 랑 Objective C 둘 다 적어보고자 합니다!

let dotLine = UIView(frame: CGRect(x: view.bounds.midX , y: view.bounds.midX,
                                   width: 100, height: 100))

override func viewDidLoad() {
   ...
   dotLine.backgroundColor = UIColor.black.cgColor
   view.addSubView(dotLine)
   ...
}

우선 View 를 선언해줍니다
편의를 위해서 미리 view를 그려줬어요!

이후 CAShapeLayer 와 UIBezierPath 를 이용할건데
CAShaperLayer의 경우 색상과 줄간격을 설정하고
UIBezierPath의 경우 위치를 설정하는 거라 생각해주시면 됩니다

func drawDotLine() {
   let layer = CAShapeLayer()
   layer.strokeColor = UIColor.white.cgColor
   layer.lineDashPattern = [10, 10]
        
   let path = UIBezierPath()
   let point1 = CGPoint(x: dotLine.bounds.midX, y: dotLine.bounds.minY)
   let point2 = CGPoint(x: dotLine.bounds.midX, y: dotLine.bounds.maxY)
        
   path.move(to: point1)
   path.addLine(to: point2)
        
   layer.path = path.cgPath
   dotLine.layer.addSublayer(layer)
}


생각보다 간단하죠?
point 1 -> point 2 로 그려준다고 생각해주시면 됩니다!
그러면 다음과 같이 그려지게 됩니다!


이번에는 세로를 그렸으니 가로도 한번 그려볼까요?

func drawDotLine() {
   let layer = CAShapeLayer()
   layer.strokeColor = UIColor.white.cgColor
   layer.lineDashPattern = [10, 10]
        
   let path = UIBezierPath()
   let point1 = CGPoint(x: dotLine.bounds.minX, y: dotLine.bounds.midY)
   let point2 = CGPoint(x: dotLine.bounds.maxX, y: dotLine.bounds.midY)
        
   path.move(to: point1)
   path.addLine(to: point2)
        
   layer.path = path.cgPath
   dotLine.layer.addSublayer(layer)
}


Objective C 의 경우에는 다음과 같이 설정하시면 됩니다!
Objc 에서 보니 단순히 Int Array 인줄 알았는데 NSNumber Array인것도 확인할 수 있네요

    CAShapeLayer *layer = [[CAShapeLayer alloc] init];
    layer.strokeColor = [UIColor systemRedColor].CGColor;
    NSArray *pattern = @[[NSNumber numberWithFloat:10], [NSNumber numberWithFloat:10]];
    layer.lineDashPattern = pattern;
    
    UIBezierPath *path = [[UIBezierPath alloc] init];
    CGPoint point1 = CGPointMake(CGRectGetMidX(_dotLine.bounds), CGRectGetMinY(_dotLine.bounds));
    CGPoint point2 = CGPointMake(CGRectGetMidX(_dotLine.bounds), CGRectGetMaxY(_dotLine.bounds));
    [path moveToPoint:point1];
    [path addLineToPoint:point2];

    layer.path = path.CGPath;
    [_dotLine.layer addSublayer:layer];



깊게 들어가면 재밌는 부분이 많아요!

그리고 다른 분들께서 작성하신 포스팅
View 에 점선그리기 등 많은 글이 나오니 참고하시면 좋을 듯 해요!

그리고 점선이 안그려질 수도 있는데
bounds, frame, view가 그려지는 시점도 같이 공부해보시는 것도 추천드립니다!

그럼 올해 마지막 포스팅 끝!

728x90
반응형