2016-08-01 1 views
-2

어떻게 ObjectiveC 및 Cocoa에서 반원으로 버블 링을 그립니까 (iOS가 아닌 macOS에서)? 현재,이 같은 내 요구에 맞는 매우 간단한 원을 만들 수 있어요 :ObjectiveC 및 MacOS 용 Cocoa에서 반원을 버블 링하는 방법은 무엇입니까?

NSRect rect = CGRectMake(location.x, location.y, 2*radius, 2*radius) 
rect.cornerRadius = radius 

이 완전한 원을 만드는,하지만 어떻게 내가 반원, 완벽하게 음영을해야합니까? 나에게 자기가를 의미

[[self layer] addSublayer:rect]; 

이 소요 인수가,있는 CAShapeLayer의 프레임에 "RECT"를 추가하는 것이 쉽기 때문에 내가 원을 그리는이 특정 방법을 사용하고있는 이유는 현재 CocoaView.

예 : (태그가 의미로)

semicircle

마지막으로,이없는 아이폰 OS 프레임 워크, 코어 애니메이션에서 수행 될 필요가있다.

+2

당신은에 의해 무슨 뜻 이죠 "는 그리기 반원에서 버블 링 "했습니까? 원의 일부 (원호)를 그리시겠습니까? 완전한 원이 아닌 원을 그리시겠습니까? 아니면 좀 더 타원형 모양일까요? 결론을 말하면 질문을 편집하거나 사진을 공유하거나 의미를 표현할 수 있습니다. 귀하의 질문에 대한 대답으로, 당신은'NSBezierPath'와'stroke'를 만들 수 있습니다 (예를 들어, 커스텀'NSView' 서브 클래스의'drawRect'에서). 아니면'CGPathRef'를 만들고 그것을'CAShapeLayer'의 경로로 설정할 수 있습니다. 그러나 경로의 세부 사항은이 "발포 된"모양과 완전히 다릅니다. – Rob

+0

@ Rob - 나는 "bubbled in"의 그림으로 더 나은 설명을 추가했습니다. –

답변

1

이것은 UIBezierPath를 사용하여 호를 그리는 코드입니다. 그것은 당신이 원하는 것을 정확히 아니지만, 당신은 코어 그래픽에서이 작업을 수행하려는 경우에는 반경

 - (void)drawRect:(CGRect)rect 
    { 
     UIBezierPath *blueHalf = [UIBezierPath bezierPath]; 
     [blueHalf addArcWithCenter:CGPointMake(100, 100) radius:90.0 startAngle:-M_PI_2 endAngle:M_PI_2 clockwise:YES]; 
     [blueHalf setLineWidth:4.0]; 
     [[UIColor blueColor] setStroke]; 
     [blueHalf stroke]; 
    } 

을 변경할 수 있습니다

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(context, 4); 

    CGContextSetStrokeColorWithColor(context, [[UIColor blueColor] CGColor]); 
    CGContextAddArc(context, 100, 100, 90, -M_PI_2, M_PI_2, FALSE); 
    CGContextStrokePath(context); 
} 

enter image description here

+0

그레이트 대답! 나는 여전히 코코아에 익숙하지 않으므로 drawRect가 포함 된 파일에서 import 또는 include 문을 추가해야합니까? 또한 이미지에 반원이 표시되지 않습니다 (예 : 답변에 표시된 반원처럼). 어떻게 그걸 채울 수 있니? –

+0

UIBezierPath를 사용하려면 @ import UIKit가 필요합니다. https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIBezierPath_class/index.html#//apple_ref/occ/cl/ 링크가 있습니다. UIBezierPath –

+0

또한, 표시된 이미지는 반원처럼 정확하게 채워지지 않은 반원입니다. 이 방법으로 내 이미지가 내 대답에 반영되는지 확인하십시오. –

관련 문제