ProgramingTip

UITextField 텍스트에 그림자 효과

bestdevel 2021. 1. 8. 23:07
반응형

UITextField 텍스트에 그림자 효과


의 텍스트에 그림자를 추가 할 수 UITextField있습니까?


3.2부터 CALayer 섀도우 속성을 사용할 수 있습니다.

_textField.layer.shadowOpacity = 1.0;   
_textField.layer.shadowRadius = 0.0;
_textField.layer.shadowColor = [UIColor blackColor].CGColor;
_textField.layer.shadowOffset = CGSizeMake(0.0, -1.0);

약간의 다른 문제가 있습니다. UILabel에 흐린 그림자를 원합니다. 많은 것도 문제에 대한 해결책은 Tyler의 번호 (2)였습니다.

내 코드는 다음과 달라집니다.

- (void) drawTextInRect:(CGRect)rect {
    CGSize myShadowOffset = CGSizeMake(4, -4);
    CGFloat myColorValues[] = {0, 0, 0, .8};

    CGContextRef myContext = UIGraphicsGetCurrentContext();
    CGContextSaveGState(myContext);

    CGColorSpaceRef myColorSpace = CGColorSpaceCreateDeviceRGB();
    CGColorRef myColor = CGColorCreate(myColorSpace, myColorValues);
    CGContextSetShadowWithColor (myContext, myShadowOffset, 5, myColor);

    [super drawTextInRect:rect];

    CGColorRelease(myColor);
    CGColorSpaceRelease(myColorSpace); 

    CGContextRestoreGState(myContext);
}

이 UILabel에서 확장되고 그림자가있는 텍스트를 오른쪽 4px로 그립니다. 그림자는 불투명도가 80 % 인 회색이며 눈에 다양 게 흐릿합니다.

저는 Tyler의 솔루션 2 번이 Tyler의 1 번보다 성능면에서 조금 더 낫다고 생각합니다. 뷰에서 하나의 UILabel 만 다루고 모든 프레임을 다시 그리는 것이 아니라고 가정 할 때 a보다 성능이 좋지는. 일반 UILabel.

추신이 코드는 Quartz 2D 문서 에서 많이 빌 렸습니다.


.NET과 같은 방식으로 여기에 텍스트 그림자에 대한 기본 지원이 제공되지 않는다고 생각합니다 UILabel.

두 가지 아이디어 :

(1) [코드 작성이 다소 까다 롭습니다.]UITextField아주 작은 객실 (아마도 (0.2,0.8)?) 1 초를 추가합니다 . 프로토콜 에서 메소드 textField:shouldChangeCharactersInRange:replacementString:구현하여 모든 텍스트 변경을 수신 할 수 있습니다 . 사용하여 하단 텍스트를 동시에 업데이트 할 수 있습니다. 약간의 텍스트 (그림자)를 사용하여 표시 할 수 있습니다. 추가됨 : 오 예, 이 아이디어 를 사용 한다면 상단 텍스트 필드의 배경색을로 설정하는 것을 잊지 마십시오 .UITextFieldDelegate[UIColor clearColor]

(2) [더욱 재미있는 코딩] 메소드하위 클래스 UITextField로 재정의합니다 drawRect:. 나는 따라 달라지는 것이 지정되는 그리기 방법에 따라 달라 앞까지 언급거야 그래서 내가 이런 짓을하지 않은, 그리고 당신과 같은, 다른 함수를 재정의 할 필요가있는 판명 할 수있다 특정가 인 . 이제 통해 그림자를 그리는 드로잉 게이트웨이 설정 기능 및 통화를 . 제대로 작동하기를 바랍니다. 원본 코드가 드로잉하는 그림자의 그림자 변수를 지우고 그 아이디어가 튀어 나와 전체 드로잉 코드를 직접 작성해야하는 경우 에 대비해 복사 와 함께 제공되는 모든 기능 때문에 권장하지 않습니다. -붙여 넣기 및 일본어 한자 입력.drawTextInRect:UITextFieldCGContextSetShadow[super drawRect:rect];UITextFieldUITextFields


그림자를 직접 적용하는 방법은 효과가 UITextView잘못된 방법입니다. 명확한 배경색으로 그림자를 직접 추가하면 모든 하위 뷰가 그림자를 얻습니다.

접근하는 접근 방식은 NSAttributedString.

NSMutableAttributedString* attString = [[NSMutableAttributedString alloc] initWithString:textView.text];
NSRange range = NSMakeRange(0, [attString length]);

[attString addAttribute:NSFontAttributeName value:textView.font range:range];
[attString addAttribute:NSForegroundColorAttributeName value:textView.textColor range:range];

NSShadow* shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor whiteColor];
shadow.shadowOffset = CGSizeMake(0.0f, 1.0f);
[attString addAttribute:NSShadowAttributeName value:shadow range:range];

textView.attributedText = attString;

그러나 textView.attributedText는 iOS6 용입니다. 더 낮은 버전을 지원해야하는 경우 다음 접근 방식을 사용할 수 있습니다. (추가하는 것을 잊지 마세요 #import <QuartzCore/QuartzCore.h>)

CALayer *textLayer = (CALayer *)[textView.layer.sublayers objectAtIndex:0];
textLayer.shadowColor = [UIColor whiteColor].CGColor;
textLayer.shadowOffset = CGSizeMake(0.0f, 1.0f);
textLayer.shadowOpacity = 1.0f;
textLayer.shadowRadius = 0.0f;

참조 URL : https://stackoverflow.com/questions/1274168/drop-shadow-on-uitextfield-text

반응형