문제

가능한 복제 :
iPhone 앱에서 수동으로 그라디언트를 그리나요?

내 응용 프로그램은 a에 텍스트를 표시해야합니다 UIView 또는 UILabel 그러나 뒷면은 진실이 아닌 그라디언트 여야합니다. UIColor. 그래픽 프로그램을 사용하여 원하는 모양을 만들어내는 것은 서버에서 반환 된 데이터에 따라 텍스트가 다를 수 있으므로 좋지 않습니다.

누구든지 이것을 다루는 가장 빠른 방법을 아는 사람이 있습니까? 당신의 생각은 크게 감사합니다.

도움이 되었습니까?

해결책

그래픽 이미지 하나를 그라디언트로 하나의 픽셀 너비로 사용하고보기 속성을 설정하여 그래픽을 확장하여보기를 채우도록 설정할 수 있습니다 (간단한 선형 구배를 생각하고 방사형 그래픽이 아닌 간단한 선형 구배를 생각하고 있다고 가정합니다).

다른 팁

나는 이것이 오래된 스레드라는 것을 알고 있지만 향후 참조를 위해 :

iPhone SDK 3.0으로, 새를 사용하여 서브 클래스 나 이미지없이 사용자 정의 그라디언트를 매우 쉽게 구현할 수 있습니다. CAGradientLayer:

 UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
 CAGradientLayer *gradient = [CAGradientLayer layer];
 gradient.frame = view.bounds;
 gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
 [view.layer insertSublayer:gradient atIndex:0];

CagradientLayer 문서를 살펴보십시오. 선택적으로 시작 및 종료점 (상단에서 하단으로 바로 이동하는 선형 구배를 원하지 않는 경우) 또는 각 색상에 매핑되는 특정 위치를 지정할 수 있습니다.

Mike의 응답을 지적한대로 코어 그래픽을 사용하여 구배를 그릴 수 있습니다. 보다 자세한 예로, 당신은 UIView 당신의 배경으로 사용하는 서브 클래스 UILabel. 그것에 UIView 서브 클래스, 재정의 drawRect: 방법 및 다음과 유사한 코드를 삽입하십시오.

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

    CGGradientRef glossGradient;
    CGColorSpaceRef rgbColorspace;
    size_t num_locations = 2;
    CGFloat locations[2] = { 0.0, 1.0 };
    CGFloat components[8] = { 1.0, 1.0, 1.0, 0.35,  // Start color
         1.0, 1.0, 1.0, 0.06 }; // End color

    rgbColorspace = CGColorSpaceCreateDeviceRGB();
    glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);

    CGRect currentBounds = self.bounds;
    CGPoint topCenter = CGPointMake(CGRectGetMidX(currentBounds), 0.0f);
    CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds));
    CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0);

    CGGradientRelease(glossGradient);
    CGColorSpaceRelease(rgbColorspace); 
}

이 특정 예는 UIView 수직 중심에. 당신은 설정할 수 있습니다 UIView'에스 backgroundColor 당신이 좋아하는 것은 무엇이든,이 광택은 그 색상 위에 그려 질 것입니다. 또한 방사형 구배를 그릴 수도 있습니다 CGContextDrawRadialGradient 기능.

당신은 이것을 크기로 만들면됩니다 UIView 적절하게 추가하십시오 UILabel 당신이 원하는 효과를 얻기 위해 그것의 하위 뷰로.

편집 (4/23/2009) : ST3FAN의 제안에 따라 뷰의 프레임을 코드의 경계로 대체했습니다. 이것은 뷰의 원점이 (0,0)가 아닌 경우 사례를 수정합니다.

사용할 때 CAGradientLayer, 반대로 CGGradient, 그라디언트는 매끄럽지 않지만 눈에 띄는 스테핑이 있습니다. 보다 this example:

더 매력적인 결과를 얻으려면 사용하는 것이 좋습니다. CGGradient.

Mirko Froehlich의 답변은 사용자 정의 색상을 사용하고 싶었던 경우를 제외하고 저에게 효과적이었습니다. 트릭은 RGB 대신 색조, 채도 및 밝기로 UI 색상을 지정하는 것입니다.

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = myView.bounds;
UIColor *startColour = [UIColor colorWithHue:.580555 saturation:0.31 brightness:0.90 alpha:1.0];
UIColor *endColour = [UIColor colorWithHue:.58333 saturation:0.50 brightness:0.62 alpha:1.0];
gradient.colors = [NSArray arrayWithObjects:(id)[startColour CGColor], (id)[endColour CGColor], nil];
[myView.layer insertSublayer:gradient atIndex:0];

색상의 색조, 채도 및 밝기를 얻으려면 제작 된 Xcode 색상 선택기를 사용하고 HSB 탭으로 이동하십시오. HUE는이보기에서 정도로 측정되므로 값을 360으로 나누어 코드에 입력하려는 값을 얻으십시오.

이것이 제가 작업 한 내용입니다. Xcode의 IB에서 Uibutton을 투명/명확하고 BG 이미지가 없습니다.

UIColor *pinkDarkOp = [UIColor colorWithRed:0.9f green:0.53f blue:0.69f alpha:1.0];
UIColor *pinkLightOp = [UIColor colorWithRed:0.79f green:0.45f blue:0.57f alpha:1.0];

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = [[shareWordButton layer] bounds];
gradient.cornerRadius = 7;
gradient.colors = [NSArray arrayWithObjects:
                   (id)pinkDarkOp.CGColor,
                   (id)pinkLightOp.CGColor,
                   nil];
gradient.locations = [NSArray arrayWithObjects:
                      [NSNumber numberWithFloat:0.0f],
                      [NSNumber numberWithFloat:0.7],
                      nil];

[[recordButton layer] insertSublayer:gradient atIndex:0];

나는 uiimageview 인 하위 뷰와 함께 이것을 달성합니다. ImageView가 가리키는 이미지는 그라디언트입니다. 그런 다음 Uiview에 배경색을 설정하고 색상의 그라디언트 뷰가 있습니다. 다음으로 나는 필요한대로보기를 사용하고 내가 그린 모든 것이이 그라디언트 뷰 아래에있을 것입니다. ImageView 상단에 두 번째보기를 추가하면 도면이 그라디언트 아래 또는 그라디언트 아래에 있는지 여부에 관계없이 몇 가지 옵션을 가질 수 있습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top