문제

iPhone의 기본 UILabel에서는 부드러운 그림자가 지원되지 않는다는 것을 알고 있습니다.그렇다면 내 자신의 것을 구현하는 가장 좋은 방법은 무엇입니까?

편집하다:

분명히 나는 UILabel -drawRect를 그립니다.내 질문은 라벨의 내용을 그래픽으로 가져오고 그 주위에 그리거나 흐리게 하는 등의 작업을 수행하는 방법입니다.

편집 2:

나는 약 1년 후에 이 질문으로 다시 돌아왔습니다.그동안 나는 레이블에 부드러운 그림자를 쉽게 추가하고 반경 등을 조정할 수 있으며 텍스트 자체에 그라데이션을 그릴 수 있는 클래스를 만들었습니다.GitHub에서 찾을 수 있습니다. https://github.com/doukasd/iOS-Components/tree/master/Views

도움이 되었습니까?

해결책

이 답변 에게 이 비슷한 질문 UILabel 뒤에 흐린 그림자를 그리는 코드를 제공합니다.작성자는 CGContextSetShadow()를 사용하여 그려진 텍스트에 대한 그림자를 생성합니다.

다른 팁

3.2부터 SDK에는 그림자가 직접 지원됩니다.

label.layer.shadowColor = [label.textColor CGColor];
label.layer.shadowOffset = CGSizeMake(0.0, 0.0);

수입 <QuartzCore/QuartzCore.h> 몇 가지 매개변수를 가지고 놀아보세요:

label.layer.shadowRadius = 3.0;
label.layer.shadowOpacity = 0.5;

그리고 레이블 경계에 의해 그림자가 잘린 것을 발견한 경우:

label.layer.masksToBounds = NO;

마침내 설정

label.layer.shouldRasterize = YES

UILabel의 ShadowColor 및 ShadowOffset 속성을 사용하는 것이 좋습니다.

UILabel* label = [[UILabel alloc] init];
label.shadowColor = [UIColor whiteColor];
label.shadowOffset = CGSizeMake(0,1);

IIDan의 답변에 추가로:어떤 목적을 위해서는 다음을 설정해야 합니다.

label.layer.shouldRasterize = YES

나는 이것이 그림자를 렌더링하는 데 사용되는 블렌드 모드 때문이라고 생각합니다.예를 들어 어두운 배경과 흰색 텍스트가 있고 검은색 그림자 광선을 사용하여 텍스트를 "강조 표시"하고 싶었습니다.이 속성을 설정하기 전까지는 작동하지 않았습니다.

뷰에 (부드러운) 그림자를 적용합니다. , 이와 같이:

UILabel *label = [[UIabel alloc] init];
label.layer.shadowColor = [[UIColor whiteColor] CGColor];
label.layer.shadowOpacity = 1.0;

최신 상태를 유지하려면 다음 단계를 따르세요.Swift에서 섀도우를 생성하는 것은 다음과 같이 쉽습니다:

QuartzCore 프레임워크 가져오기

import QuartzCore

그리고 레이블에 그림자 속성을 설정하십시오.

titleLabel.shadowColor = UIColor.blackColor()
titleLabel.shadowOffset = CGSizeMake(0.0, 0.0)
titleLabel.layer.shadowRadius = 5.0
titleLabel.layer.shadowOpacity = 0.8
titleLabel.layer.masksToBounds = false
titleLabel.layer.shouldRasterize = true
_nameLabel = [[UILabel alloc] initWithFrame:CGRectZero];
_nameLabel.font = [UIFont boldSystemFontOfSize:19.0f];
_nameLabel.textColor = [UIColor whiteColor];
_nameLabel.backgroundColor = [UIColor clearColor];
_nameLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.2];
_nameLabel.shadowOffset = CGSizeMake(0, 1);

내 생각에는 [UIColor colorWithWhite:0 alpha:0.2]를 사용하여 알파 값을 설정해야 한다고 생각합니다.

저는 이러한 기술(FXLabel 제외)을 거의 모두 시도했지만 iOS 7에서 작동하도록 할 수 없었습니다.나는 결국 나에게 완벽하게 맞는 THLabel을 찾았습니다.나는 Interface Builder에서 THLabel을 사용하고 프로그래머가 아닌 사람도 쉽게 모양과 느낌을 제어할 수 있도록 사용자 정의 런타임 속성을 설정했습니다.

https://github.com/MuscleRumble/THLabel

이건 마치 트릭처럼,

UILabel *customLabel = [[UILabel alloc] init];

UIColor *color = [UIColor blueColor];
customLabel.layer.shadowColor = [color CGColor];
customLabel.layer.shadowRadius = 5.0f;
customLabel.layer.shadowOpacity = 1;
customLabel.layer.shadowOffset = CGSizeZero;
customLabel.layer.masksToBounds = NO;

나는 부드러운 그림자 지원 및 기타 다양한 효과를 갖춘 UILabel 하위 클래스를 제공하는 라이브러리를 작성했습니다.

https://github.com/nicklockwood/FXLabel

명시된 대로 UILabel 하위 클래스를 만들고 drawRect:에서 다음을 수행합니다. [self drawTextInRect:rect]; 현재 컨텍스트에 텍스트를 가져옵니다.일단 거기에 있으면 필터 등을 추가하여 작업을 시작할 수 있습니다.방금 컨텍스트에 그린 내용으로 그림자를 만들려면 다음을 사용할 수 있어야 합니다.

CGContextSetShadowWithColor()

해당 기능을 사용하는 방법을 알아보려면 문서에서 해당 기능을 찾아보세요.

iOS 5부터 Apple은 부드러운 그림자가 있는 레이블을 생성하는 개인 API 방법을 제공합니다.라벨은 매우 빠릅니다.일련의 투명 보기에서 동시에 수십 개를 사용하고 있으며 스크롤 애니메이션이 느려지지 않습니다.

이는 App Store가 아닌 앱에만 유용하며(분명히) 헤더 파일이 필요합니다.

$SBBulletinBlurredShadowLabel = NSClassFromString("SBBulletinBlurredShadowLabel");

CGRect frame = CGRectZero;

SBBulletinBlurredShadowLabel *label = [[[$SBBulletinBlurredShadowLabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
label.font = [UIFont boldSystemFontOfSize:12];
label.text = @"I am a label with a soft shadow!";
[label sizeToFit];

~ 안에 Swift 3, 확장을 만들 수 있습니다.

import UIKit

extension UILabel {
    func shadow() {
        self.layer.shadowColor = self.textColor.cgColor
        self.layer.shadowOffset = CGSize.zero
        self.layer.shadowRadius = 3.0
        self.layer.shadowOpacity = 0.5
        self.layer.masksToBounds = false
        self.layer.shouldRasterize = true
    }
}

다음을 통해 사용하십시오.

label.shadow()

UILabel을 하위 클래스로 만들고 -drawInRect를 재정의합니다.

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