2011-02-12 4 views
1

그래디언트에 대한 설명서를 읽고 있는데 약간 분실했습니다. 나는 뷰를 가지고 있으며, 그 뷰 내에서 rect (보기보다 작음) 내에서 아래에서 위로 위쪽으로 간단한 검은 색에서 회색의 선형 그라디언트를 그립니다. 하위 클래스를 만들지 않고 어떻게 할 수 있습니까? (뷰를 서브 클래스 화해야하는 많은 것들을 읽었습니다)?보기 내부에있는 rect 내부에 간단한 선형 그래디언트 그리기

나는 다양한 플랫폼에서 해본 적이있는 것처럼 간단하게이 방법을 찾고 있습니다. 다음과 같은 언어 (예 :-)) :

blackcolor = MakeBlack(); 
whiteColor = MakeWhite(); 

startPoint = MakeStartPoint(); 
endPoint = MakeEndPoint(); 

onthisgraphicport = SetGraphicPort(self.view); 
clippingRect = MakeClipRect(); 

DrawGradient(from:whiteColor, to:blackcolor, from:startPoint, to:endPoint, onthisgraphicport, intoThisRect:clippingRect); 

감사합니다.

+0

중복 가능성 (http://stackoverflow.com/questions/422066/gradients-on-uiview-and-uilabels-on-iphone). 많은 투표를 통해 @Mirko의 답변을보십시오. 보기보다 작게하려면 그라디언트 레이어의 프레임을 더 작게 설정하십시오 (그라데이션 레이어를보기의 하위보기로 생각하십시오). – Anurag

+0

@Anurag : 아니요, 우선 해결책은 하위 레이어를 삽입하고, 아무 것도 삽입하지 않으려 고합니다. 그리기 ... 두 번째 제공 솔루션은 drawRect로 작동합니다. 그라디언트를 그려야하는 내부의 뷰에 rect가 있어야합니다. – Oliver

+0

'drawRect'를 사용하지 않고 * 및 *를 삽입하지 않음으로써 의미를 이해하지 못합니다. 그래디언트를 얻으려면 * 무언가 *를해야 할 것입니다. 마술처럼 그 자체에 나타나지는 않습니다. – Anurag

답변

4

이 코드 스 니펫이 도움이 될 수 있습니다. 나는 웹에서 코드를 발견했다. 불행히도 사이트를 잊어 버렸으므로 누구에게 크레딧을 줄지 확신하지 못했습니다.

코드는 흰색에서 검은 색까지의 그래디언트를 그립니다. 직사각형과 색상을 원하는대로 변경하십시오. [아이폰에서의 UIView에 그라디언트와 UILabels]의

@interface MyView : UIView { 
    CGGradientRef _gradientRef; 
} 

@end 

@implementation MyView 

- (void) dealloc 
{ 
    [super dealloc]; 
} 

- (id) initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
     CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); 
     CGFloat colors[] = 
     { 
      1.0f, 1.0f, 1.0f, 1.0f, 
      0.0f, 0.0f, 0.0f, 1.0f, 
     }; 
     _gradientRef = CGGradientCreateWithColorComponents(rgb, colors, NULL, sizeof(colors)/(sizeof(colors[0]) * 4)); 
     CGColorSpaceRelease(rgb); 
    } 

    return self; 
} 

- (void) drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGPoint start = rect.origin; 
    start.y = 0; 
    CGPoint end = CGPointMake(rect.origin.x, rect.size.height); 
    CGContextDrawLinearGradient(context, _gradientRef, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); 

    [super drawRect:rect]; 
} 

@end 
+0

아무 것도 그려지지 않습니다. UIView를 서브 클래 싱하는 drawRect 메소드 안에 있습니다. 그래서 그것은 뷰의 사각형 안으로 끌어들입니다. 그러나이 작품을 어떻게보기 외부에서 만들 수 있습니까? 이 샘플 코드를 많이 보았고 서브 클래 싱없이이 작업을 수행 할 방법을 요청한 이유가 여기 있습니다. – Oliver

+0

제가 게시 한 코드는 분명히 그라디언트를 그립니다. 아이디어는 [MyView alloc] initWithFrame : ...]을 사용하여 그라데이션보기를 만든 다음이보기를 하위보기로보기에 추가하는 것이 었습니다. 어느 것이 효과가 있을지. 당신이 달성하고자하는 것은 (내가 생각하기에) 뷰의 그래픽 컨텍스트를 얻고 그것에 끌어들이는 것입니다. 내가 아는 한, 이것이 가능하지 않습니다 (제가 잘못하면 저를 교정하십시오). – cutemachine

+0

내가 아는 한 내가 읽은 것처럼 불가능한 것 같습니다. 놀라운 일! 그릴 무언가를 즉석에서 만들어야한다면 사전에있을 수는 없지만 어떻게 할 수 있습니까? 그것 UIView의 하위 클래스를 만들 수 및 즉시 drawright 재정의 ??? – Oliver

관련 문제