질문에 이미 답변되어 있지만 NSAttributedString을 사용하여 그림자를 추가하고 글꼴을 변경하는 방법을 보여 주었으므로 사람들 이이 주제를 검색 할 때 계속 볼 필요가 없습니다.
#define FONT_SIZE 20
#define FONT_HELVETICA @"Helvetica-Light"
#define BLACK_SHADOW [UIColor colorWithRed:40.0f/255.0f green:40.0f/255.0f blue:40.0f/255.0f alpha:0.4f]
NSString*myNSString = @"This is my string.\nIt goes to a second line.";
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.alignment = NSTextAlignmentCenter;
paragraphStyle.lineSpacing = FONT_SIZE/2;
UIFont * labelFont = [UIFont fontWithName:FONT_HELVETICA size:FONT_SIZE];
UIColor * labelColor = [UIColor colorWithWhite:1 alpha:1];
NSShadow *shadow = [[NSShadow alloc] init];
[shadow setShadowColor : BLACK_SHADOW];
[shadow setShadowOffset : CGSizeMake (1.0, 1.0)];
[shadow setShadowBlurRadius : 1];
NSAttributedString *labelText = [[NSAttributedString alloc] initWithString : myNSString
attributes : @{
NSParagraphStyleAttributeName : paragraphStyle,
NSKernAttributeName : @2.0,
NSFontAttributeName : labelFont,
NSForegroundColorAttributeName : labelColor,
NSShadowAttributeName : shadow }];
여기 스위프트 버전이 있습니다.
경고! 이것은 4s에서 작동합니다.
5 초 동안 모든 Float 값을 Double 값으로 변경해야합니다 (컴파일러가 아직 제대로 작동하지 않기 때문에)
글꼴 선택을위한 Swift 열거 형 :
enum FontValue: Int {
case FVBold = 1 , FVCondensedBlack, FVMedium, FVHelveticaNeue, FVLight, FVCondensedBold, FVLightItalic, FVUltraLightItalic, FVUltraLight, FVBoldItalic, FVItalic
}
열거 형 액세스를위한 스위프트 배열 (enum은 '-'를 사용할 수 없으므로 필요) :
func helveticaFont (index:Int) -> (String) {
let fontArray = [
"HelveticaNeue-Bold",
"HelveticaNeue-CondensedBlack",
"HelveticaNeue-Medium",
"HelveticaNeue",
"HelveticaNeue-Light",
"HelveticaNeue-CondensedBold",
"HelveticaNeue-LightItalic",
"HelveticaNeue-UltraLightItalic",
"HelveticaNeue-UltraLight",
"HelveticaNeue-BoldItalic",
"HelveticaNeue-Italic",
]
return fontArray[index]
}
신속한 텍스트 기능 :
func myAttributedText (myString:String, mySize: Float, myFont:FontValue) -> (NSMutableAttributedString) {
let shadow = NSShadow()
shadow.shadowColor = UIColor.textShadowColor()
shadow.shadowOffset = CGSizeMake (1.0, 1.0)
shadow.shadowBlurRadius = 1
let paragraphStyle = NSMutableParagraphStyle.alloc()
paragraphStyle.lineHeightMultiple = 1
paragraphStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping
paragraphStyle.alignment = NSTextAlignment.Center
let labelFont = UIFont(name: helveticaFont(myFont.toRaw()), size: mySize)
let labelColor = UIColor.whiteColor()
let myAttributes :Dictionary = [NSParagraphStyleAttributeName : paragraphStyle,
NSKernAttributeName : 3, // (-1,5)
NSFontAttributeName : labelFont,
NSForegroundColorAttributeName : labelColor,
NSShadowAttributeName : shadow]
let myAttributedString = NSMutableAttributedString (string: myString, attributes:myAttributes)
// add new color
let secondColor = UIColor.blackColor()
let stringArray = myString.componentsSeparatedByString(" ")
let firstString: String? = stringArray.first
let letterCount = countElements(firstString!)
if firstString {
myAttributedString.addAttributes([NSForegroundColorAttributeName:secondColor], range:NSMakeRange(0,letterCount))
}
return myAttributedString
}
문자열 배열에서 범위를 찾는 데 사용되는 첫 번째 및 마지막 확장명 :
extension Array {
var last: T? {
if self.isEmpty {
NSLog("array crash error - please fix")
return self [0]
} else {
return self[self.endIndex - 1]
}
}
}
extension Array {
var first: T? {
if self.isEmpty {
NSLog("array crash error - please fix")
return self [0]
} else {
return self [0]
}
}
}
새로운 색상 :
extension UIColor {
class func shadowColor() -> UIColor {
return UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 0.3)
}
class func textShadowColor() -> UIColor {
return UIColor(red: 50.0/255.0, green: 50.0/255.0, blue: 50.0/255.0, alpha: 0.5)
}
class func pastelBlueColor() -> UIColor {
return UIColor(red: 176.0/255.0, green: 186.0/255.0, blue: 255.0/255.0, alpha: 1)
}
class func pastelYellowColor() -> UIColor {
return UIColor(red: 255.0/255.0, green: 238.0/255.0, blue: 140.0/255.0, alpha: 1)
}
}
내 매크로 교체 :
enum MyConstants: Float {
case CornerRadius = 5.0
}
저작자 표시가있는 버튼 메이커 :
func myButtonMaker (myView:UIView) -> UIButton {
let myButton = UIButton.buttonWithType(.System) as UIButton
myButton.backgroundColor = UIColor.pastelBlueColor()
myButton.showsTouchWhenHighlighted = true;
let myCGSize:CGSize = CGSizeMake(100.0, 50.0)
let myFrame = CGRectMake(myView.frame.midX - myCGSize.height,myView.frame.midY - 2 * myCGSize.height,myCGSize.width,myCGSize.height)
myButton.frame = myFrame
let myTitle = myAttributedText("Button",20.0,FontValue.FVLight)
myButton.setAttributedTitle(myTitle, forState:.Normal)
myButton.layer.cornerRadius = myButton.bounds.size.width / MyConstants.CornerRadius.toRaw()
myButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
myButton.tag = 100
myButton.bringSubviewToFront(myView)
myButton.layerGradient()
myView.addSubview(myButton)
return myButton
}
텍스트, 그림자 및 둥근 모서리가있는 UIView / UILabel 메이커 :
func myLabelMaker (myView:UIView) -> UIView {
let myFrame = CGRectMake(myView.frame.midX / 2 , myView.frame.midY / 2, myView.frame.width/2, myView.frame.height/2)
let mylabelFrame = CGRectMake(0, 0, myView.frame.width/2, myView.frame.height/2)
let myBaseView = UIView()
myBaseView.frame = myFrame
myBaseView.backgroundColor = UIColor.clearColor()
let myLabel = UILabel()
myLabel.backgroundColor=UIColor.pastelYellowColor()
myLabel.frame = mylabelFrame
myLabel.attributedText = myAttributedText("This is my String",20.0,FontValue.FVLight)
myLabel.numberOfLines = 5
myLabel.tag = 100
myLabel.layer.cornerRadius = myLabel.bounds.size.width / MyConstants.CornerRadius.toRaw()
myLabel.clipsToBounds = true
myLabel.layerborders()
myBaseView.addSubview(myLabel)
myBaseView.layerShadow()
myBaseView.layerGradient()
myView.addSubview(myBaseView)
return myLabel
}
일반 그림자 추가 :
func viewshadow<T where T: UIView> (shadowObject: T)
{
let layer = shadowObject.layer
let radius = shadowObject.frame.size.width / MyConstants.CornerRadius.toRaw();
layer.borderColor = UIColor.whiteColor().CGColor
layer.borderWidth = 0.8
layer.cornerRadius = radius
layer.shadowOpacity = 1
layer.shadowRadius = 3
layer.shadowOffset = CGSizeMake(2.0,2.0)
layer.shadowColor = UIColor.shadowColor().CGColor
}
뷰 스타일의 뷰 확장 :
extension UIView {
func layerborders() {
let layer = self.layer
let frame = self.frame
let myColor = self.backgroundColor
layer.borderColor = myColor.CGColor
layer.borderWidth = 10.8
layer.cornerRadius = layer.borderWidth / MyConstants.CornerRadius.toRaw()
}
func layerShadow() {
let layer = self.layer
let frame = self.frame
layer.cornerRadius = layer.borderWidth / MyConstants.CornerRadius.toRaw()
layer.shadowOpacity = 1
layer.shadowRadius = 3
layer.shadowOffset = CGSizeMake(2.0,2.0)
layer.shadowColor = UIColor.shadowColor().CGColor
}
func layerGradient() {
let layer = CAGradientLayer()
let size = self.frame.size
layer.frame.size = size
layer.frame.origin = CGPointMake(0.0,0.0)
layer.cornerRadius = layer.bounds.size.width / MyConstants.CornerRadius.toRaw();
var color0 = CGColorCreateGenericRGB(250.0/255, 250.0/255, 250.0/255, 0.5)
var color1 = CGColorCreateGenericRGB(200.0/255, 200.0/255, 200.0/255, 0.1)
var color2 = CGColorCreateGenericRGB(150.0/255, 150.0/255, 150.0/255, 0.1)
var color3 = CGColorCreateGenericRGB(100.0/255, 100.0/255, 100.0/255, 0.1)
var color4 = CGColorCreateGenericRGB(50.0/255, 50.0/255, 50.0/255, 0.1)
var color5 = CGColorCreateGenericRGB(0.0/255, 0.0/255, 0.0/255, 0.1)
var color6 = CGColorCreateGenericRGB(150.0/255, 150.0/255, 150.0/255, 0.1)
layer.colors = [color0,color1,color2,color3,color4,color5,color6]
self.layer.insertSublayer(layer, atIndex: 2)
}
}
실제 뷰는로드 기능을 수행했습니다.
func buttonPress (sender:UIButton!) {
NSLog("%@", "ButtonPressed")
}
override func viewDidLoad() {
super.viewDidLoad()
let myLabel = myLabelMaker(myView)
let myButton = myButtonMaker(myView)
myButton.addTarget(self, action: "buttonPress:", forControlEvents:UIControlEvents.TouchUpInside)
viewshadow(myButton)
viewshadow(myLabel)
}