2017年1月1日日曜日

文字を修飾

LabelやTextViewなどで文字の一部の色を変えたり、フォントサイズを変えたり、影をつけたりする方法。
NSMutableAttributedStringというクラスを作り、それにattributeをaddしていくという使い方。
attributeの種類はNS○○AttributeNameというので指定する。


textViewというUITextViewがあるとして、中の文字の一部(「いうえお」の部分)を緑色で赤い影付きにする。

attributeを個別に追加

let str = NSMutableAttributedString(string: "あいうえお")

let shadow = NSShadow() //影はNSShadowというクラス
shadow.shadowColor = UIColor.red //影の色
shadow.shadowOffset = CGSize(width: 2, height: 2) //影のズレ
shadow.shadowBlurRadius = 3.0 //影の半径

//影の色
str.addAttribute(NSShadowAttributeName, value: shadow, range: NSMakeRange(1, 4))
//文字の色
str.addAttribute(NSForegroundColorAttributeName, value: UIColor.green, range: NSMakeRange(1, 4))

//textViewのattributexTextプロパティとして指定
textView.attributedText = str

attributeをまとめて追加

let str = NSMutableAttributedString(string: "あいうえお")
let shadow = NSShadow()
shadow.shadowColor = UIColor.red
shadow.shadowOffset = CGSize(width: 2, height: 2)
shadow.shadowBlurRadius = 3.0
//attributeを[]内で,区切りで複数指定
str.addAttributes([NSForegroundColorAttributeName: UIColor.green,
                   NSShadowAttributeName: shadow], range: NSMakeRange(1, 4))
textView.attributedText = str

NS○○AttributeNameのいろいろ

  • NSFontAttributeName: String // UIFont, default Helvetica(Neue) 12
    • フォント名
    • UIFontで指定
  • NSParagraphStyleAttributeName: String // NSParagraphStyle, default defaultParagraphStyle
    • 段落スタイル(文字寄せ、行末の単語をハイフンでつなぐ…など)
    • NSMutableParagraphStyleを作り、そのプロパティをいじって指定
      • .alignment = NSTextAlignmentRightなど
      • .hyphenationFactor = 0.9など 
  • NSForegroundColorAttributeName: String // UIColor, default blackColor
    • 文字色
    • UIColorで指定
  • NSBackgroundColorAttributeName: String // UIColor, default nil: no background
    • 文字背景色
    • UIColorで指定
  • NSLigatureAttributeName: String // NSNumber containing integer, default 1: default ligatures, 0: no ligatures
    • リガチャ(つなげ文字)
    • 0がなし、1があり
  • NSKernAttributeName: String // NSNumber containing floating point value, in points; amount to modify default kerning. 0 means kerning is disabled.
    • カーニング(字間)
    • 浮動小数点のNSNumberで指定
  • NSStrikethroughStyleAttributeName: String // NSNumber containing integer, default 0: no strikethrough
    • 取り消し線
    • 太さをIntで指定(フォントサイズを大きくするとそれに連れて大きくなる)
  • NSStrikethroughColorAttributeName: String // UIColor, default nil: same as foreground color
    • 取り消し線色
  • NSUnderlineStyleAttributeName: String // NSNumber containing integer, default 0: no underline
    • 下線(フォントサイズを大きくするとそれに連れて大きくなる)
    • NSUnderlineStyleSingl、NSUnderlinePatternDash(破線)などの定数も用意
  • NSUnderlineColorAttributeName: String // UIColor, default nil: same as foreground color
    • 下線の色
  • NSStrokeColorAttributeName: String // UIColor, default nil: same as foreground color
    • 中抜き文字の枠の色
  • NSStrokeWidthAttributeName: String // NSNumber containing floating point value, in percent of font point size, default 0: no stroke; positive for stroke alone, negative for stroke and fill (a typical value for outlined text would be 3.0)
    • 中抜き文字の枠の幅(フォントサイズを大きくするとそれに連れて大きくなる)
    • 負の値だと中の塗りつぶしもある
  • NSShadowAttributeName: String // NSShadow, default nil: no shadow
  • NSTextEffectAttributeName: String // NSString, default nil: no text effect
    • 文字エフェクト
    • 今のところNSTextEffectLetterpressStyleしかない。プレスしたような文字になるようだが、確認できなかった。
  • NSAttachmentAttributeName: String // NSTextAttachment, default nil
    • テキスト内に画像の埋め込み
  • NSLinkAttributeName: String // NSURL (preferred) or NSString
    • リンクの埋め込み
  • NSBaselineOffsetAttributeName: String // NSNumber containing floating point value, in points; offset from baseline, default 0
    • ベースライン・オフセットの指定
  • NSObliquenessAttributeName: String // NSNumber containing floating point value; skew to be applied to glyphs, default 0: no skew
    • 斜め文字
    • どれくらい右に傾けるかをNSNumberのfloatで。1.0で普通に傾く。負の値だと左に傾く。
  • NSExpansionAttributeName: String // NSNumber containing floating point value; log of expansion factor to be applied to glyphs, default 0: no expansion
    • 拡大(グリフの縦横比)
    • 正の値で横長、負の値で縦長
  • NSWritingDirectionAttributeName: String // NSArray of NSNumbers representing the nested levels of writing direction overrides as defined by Unicode LRE, RLE, LRO, and RLO characters.  The control characters can be obtained by masking NSWritingDirection and NSWritingDirectionFormatType values.  LRE: NSWritingDirectionLeftToRight|NSWritingDirectionEmbedding, RLE: NSWritingDirectionRightToLeft|NSWritingDirectionEmbedding, LRO: NSWritingDirectionLeftToRight|NSWritingDirectionOverride, RLO: NSWritingDirectionRightToLeft|NSWritingDirectionOverride,
    • 文字方向(アラビア語などへの対応)
  • NSVerticalGlyphFormAttributeName: String // An NSNumber containing an integer value.  0 means horizontal text.  1 indicates vertical text.  If not specified, it could follow higher-level vertical orientation settings.  Currently on iOS, it's always horizontal.  The behavior for any other value is undefined.
    • 縦書きグリフ(0が横書き、1が縦書きだが、iOSでは0しか使えない)

0 件のコメント:

コメントを投稿