gpt4 book ai didi

Ios Swift使字体切换粗体,斜体,粗体斜体,正常而不改变其他属性

转载 作者:IT王子 更新时间:2023-10-29 05:29:13 30 4
gpt4 key购买 nike

我很惊讶,简单地为现有字体设置粗体和斜体在 Swift 中是如此复杂。

我只是想通过在字体类上使用以下方法来简化事情。

我希望将以下方法添加到已设置字体系列和字体大小的现有字体中。我需要保留这些并仅更改以下内容。

setBold : Shud preserve italic

setItalic : Shud preserve bold

setBoldItalic

setNormal : remove both bold and italic

removeBold : Shud preserve italic

removeitalic : Shud preserve bold

我尝试了下面的方法,使用 fontDescriptorWithSymbolicTraits 对我来说就像一场噩梦。

是否有更简单的方法,只需几行代码即可完成这些操作?

extension UIFont
{
var isBold: Bool
{
return fontDescriptor().symbolicTraits.contains(.TraitBold)
}

var isItalic: Bool
{
return fontDescriptor().symbolicTraits.contains(.TraitItalic)
}

func setBold() -> UIFont
{
var fontDescriptorVar: UIFontDescriptor
if(isBold){
return self
}
else
{
fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitBold)
}
return UIFont(descriptor: fontDescriptorVar, size: 0)
}

func setItalic()-> UIFont
{
var fontDescriptorVar: UIFontDescriptor
if(isItalic) {
return self
}
else
{
fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitItalic)
}
return UIFont(descriptor: fontDescriptorVar, size: 0)
}

func setBoldItalic()-> UIFont
{
let fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(arrayLiteral: .TraitBold, .TraitItalic))
return UIFont(descriptor: fontDescriptorVar, size: 0)
}

// Things I need are

// To set back to normal

func setNormal()-> UIFont
{

}

// Remove only bold if it's both bold and Italic

func removeBold()-> UIFont
{

}

// Remove only italic if it's both bold and Italic

func removeitalic()-> UIFont
{

}
}

我不想使用它询问我的大小和字体作为输入:

UIFont(name "namFontFamily", size: 16)

UIFont.systemFontOfSize(16, weight: UIFontWeightLight)

我到处搜索,找不到符合我需求的简单解决方案。

最佳答案

你说你想保留其他特征,所以你可能需要修改代码中的一些方法:

func setBold() -> UIFont
{
if isBold {
return self
} else {
var symTraits = fontDescriptor().symbolicTraits
symTraits.insert([.TraitBold])
let fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(symTraits)
return UIFont(descriptor: fontDescriptorVar, size: 0)
}
}

setItalic()setBoldItalic() 也是如此。

所以,removeBold() 应该是这样的:

func removeBold()-> UIFont
{
if !isBold {
return self
} else {
var symTraits = fontDescriptor().symbolicTraits
symTraits.remove([.TraitBold])
let fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(symTraits)
return UIFont(descriptor: fontDescriptorVar, size: 0)
}
}

removeItalic() 类似。

但我不确定 setNormal()。您想删除所有特征,还是只想删除斜体和粗体?也许您可以自己动手做。

关于Ios Swift使字体切换粗体,斜体,粗体斜体,正常而不改变其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533323/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com