각도로 선형 CG 그라데이션을 그리려합니다. "CGContextDrawLinearGradientWithAngle()"이 존재하지 않기 때문에 CGContextDrawLinearGradient (CGContextRef, CGGradientRef, CGPoint startPoint, CGPoint endPoint, CGGradientDrawingOptions)를 사용하려고합니다.CGGradient : 각도에서 선형 그라디언트 그리기
그 점을 염두에두고 각도 (도)를 시작점과 끝점으로 변환해야합니다. NSGradient의 drawInBezierPath : 흉내를 흉내 내고 싶습니다. (AppKit의의 일환으로, NSGradient 슬프게도 아이폰 OS 개발자들에게 사용할 수 없습니다.) 다행히, 문서가 어떻게 get the starting gradient 알려줍니다
- (CGPoint)startingPointForAngle:(CGFloat)angle rect:(CGRect)rect {
CGPoint point = CGPointZero;
if (angle < 90.0f)
point = CGPointMake(CGRectGetMinX(rect), CGRectGetMaxY(rect));
else if (angle < 180.0f)
point = CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect));
else if (angle < 270.0f)
point = CGPointMake(CGRectGetMaxX(rect), CGRectGetMinY(rect));
else
point = CGPointMake(CGRectGetMinX(rect), CGRectGetMinY(rect));
return point;
}
불행하게도, 문서가 어떻게 결말 점을 얻는 우리에게 이야기하지 않습니다. (사각형의 높이나 너비를 거리로 사용하는 것만으로 충분합니다.) Several sites out there은 어떻게 끝점을 찾을 수 있는지 알려줍니다. 불행하게도, 종점을 계산하기 전에 거리를 알아야합니다. 그러나 거리를 계산하려면 종점을 계산해야합니다. NSGradient가 알아 낸 것처럼 보입니다.
- (CGPoint)endingPointForAngle:(CGFloat)angle rect:(CGRect)rect startingPoint:(CGPoint)startingPoint {
//http://www.zahniser.net/~russell/computer/index.php?title=Angle%20and%20Coordinates
//(x + distance * cos(a), y + distance * sin(a))
CGFloat angleInRadians = (CGFloat)M_PI/180.0f * angle;
CGFloat distance = ????????;
CGPoint point = CGPointMake(startingPoint.x + distance * cosf(angleInRadians), startingPoint.y + distance * sinf(angleInRadians));
return point;
}
CGPoint startingGradientPoint = [self startingPointForAngle:self.fillGradientAngle rect:rect];
CGPoint endingGradientPoint = [self endingPointForAngle:self.fillGradientAngle rect:rect startingPoint:startingGradientPoint];
CGContextDrawLinearGradient(graphicsContext, self.fillGradient, startingGradientPoint, endingGradientPoint, 0);
아이디어가 없습니다.