グラフィックブレンドの実装について
4261 ワード
iOS図文混在
画像の混在は、すでに多くのアプリに欠かせない機能となっている.すなわち、文字に画像、特にチャットとコメントのインタフェース、文字に表情画像を加える.では、この機能をどのように実現するのでしょうか.今ではこの機能を実現するフレームワークが多いが、実現原理を知る必要がある.最近、メモを整理して、以下のように記録し、この方面のよく知らない子供靴にも役立つことを望んでいる.
図文混在を実現するには、まずどのようなコントロールで文字と画像を展示するかを明確にし、複数行の文字を展示できるのは2つのコントロール、 である.表情キーボードはシステム表情キーボードかカスタム表情キーボードか、システム表情はemoji表情、16進数文字列であり、特別な処理をする必要がなく、 を示すことができる.カスタム表情キーボードであれば、一般的には小さなアイコンが多く、画像名があるべきで、対応する表情名があるべきで、例えば:[ほほほ] カスタム表情の場合、一般的には、属性文字列を使用してローカル文字色を変更し、正規表現で表情名を取得し、属性文字列に変換してサイズを設定し、最後にコントロールに を表示します.もちろん属性文字列、あるものはリッチテキスト と呼ばれています
一般的に、この機能には、多くの場所で使用する必要があります.私はカプセル化し、NSStringに分類を書くことができます.属性文字列管理者を作成して実現することもできます.
以上は普通文字列を属性文字列に変換する関数だけで、名前のハイライトを実現することができ、他の文字の普通の状態のスタイルは、図文の混在はさらに進んでいるだけで、以下のようにします.
以上から分かるように、コアエージェントはforループ内部であり、
チャットの記録、キャスターにプレゼントのメッセージを送るなど、画像をダウンロードする必要があります.コードは以下の通りです.
以上の3つの関数は、直接コピーすれば使用できますが、リンクのハイライトなど、他のマッチングルールが必要で、子供靴たちはさらに拡張することができます.
画像の混在は、すでに多くのアプリに欠かせない機能となっている.すなわち、文字に画像、特にチャットとコメントのインタフェース、文字に表情画像を加える.では、この機能をどのように実現するのでしょうか.今ではこの機能を実現するフレームワークが多いが、実現原理を知る必要がある.最近、メモを整理して、以下のように記録し、この方面のよく知らない子供靴にも役立つことを望んでいる.
構想
UILabel
とUITextView
インプリメンテーション
一般的に、この機能には、多くの場所で使用する必要があります.私はカプセル化し、NSStringに分類を書くことができます.属性文字列管理者を作成して実現することもできます.
class TCAttibuteStingManager {
}
extension TCAttibuteStingManager {
class func greateNormalAttibutesString(_ username: String, _ message: String) -> NSAttributedString {
let str = username + message
// NSMutableAttributedString
let attrStr = NSMutableAttributedString(string: str)
//
let nameRange = NSRange(location: 0, length: username.characters.count)
attrStr.setAttributes([NSForegroundColorAttributeName: UIColor.orange], range: nameRange)
return attrStr
}
}
以上は普通文字列を属性文字列に変換する関数だけで、名前のハイライトを実現することができ、他の文字の普通の状態のスタイルは、図文の混在はさらに進んでいるだけで、以下のようにします.
class func greateChatMessage(_ username: String, _ message: String, font: UIFont) -> NSAttributedString {
let str = username + ":" + message
let attrStr = NSMutableAttributedString(string: str)
let nameRange = NSRange(location: 0, length: username.characters.count)
attrStr.setAttributes([NSForegroundColorAttributeName: UIColor.orange], range: nameRange)
// , :i [ ] you [ ] girl [ ]!
// [] ,
// ,
// .*?
//
let pattern = "\\[.*?\\]"
guard let reg = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) else {
return attrStr
}
//
let range = NSRange(location: 0, length: str.characters.count)
let results = reg.matches(in: str, options: [], range: range)
//
//
for i in (0..
以上から分かるように、コアエージェントはforループ内部であり、
NSTextAttachment
を作成し、マッチング結果に基づいてNSTextAttachment
オブジェクトを属性文字列に変換する!これで、簡単な図文混成ができました.チャットの記録、キャスターにプレゼントのメッセージを送るなど、画像をダウンロードする必要があります.コードは以下の通りです.
class func createImageMessage(_ userName: String, _ imageName: String, _ imageUrl: String, font: UIFont) -> NSAttributedString {
let str = userName + ":xxxxxx" + imageName
let attrStr = NSMutableAttributedString(string: str)
let nameRange = NSRange(location: 0, length: userName.characters.count)
attrStr.setAttributes([NSForegroundColorAttributeName: UIColor.orange], range: nameRange)
let imageNameRange = (imageName as NSString).range(of: imageName)
attrStr.setAttributes([NSForegroundColorAttributeName: UIColor.orange], range: imageNameRange)
//
guard let image = KingfisherManager.shared.cache.retrieveImageInMemoryCache(forKey: imageUrl) else {
return attrStr
}
let attachment = NSTextAttachment()
attachment.image = image
attachment.bounds = CGRect(x: 0, y: -4, width: font.lineHeight, height: font.lineHeight)
let imageAttr = NSAttributedString(attachment: attachment)
//
attrStr.append(imageAttr)
return attrStr
}
以上の3つの関数は、直接コピーすれば使用できますが、リンクのハイライトなど、他のマッチングルールが必要で、子供靴たちはさらに拡張することができます.