Я пытаюсь создать круглый текстовый путь в Swiftui, используя пользовательский вид CirculartextPath. Текст нарисуется на дуге, и я хочу добавить цвет фона за пути, как показано на другом изображении (например, добавление сплошного фонового цвета ко всей текстовой дуге).
circulartextPath:
import SwiftUI
struct CircularTextPath: View {
let text: String
let arcAngle: Angle
var body: some View {
if arcAngle.radians != 0.0 {
textAsPath
.fixedSize()
.hidden()
.overlay {
GeometryReader { fullText in
let textWidth = fullText.size.width
let startAngle = -(arcAngle.radians / 2)
let radius = arcAngle.radians > 0 ? textWidth * 1.5 / arcAngle.radians : textWidth * 2.0 / arcAngle.radians
HStack(spacing: 0) {
ForEach(Array(text.enumerated()), id: \.offset) { index, character in
Text(String(character))
.hidden()
.overlay {
GeometryReader { charSpace in
let midX = charSpace.frame(in: .named("FullText")).midX
let fraction = midX / textWidth
let angle = startAngle + (fraction * arcAngle.radians)
let xOffset = (textWidth / 2) - midX
TextPath(character: String(character))
.scaleEffect(x: 1, y: 1) // Flip horizontally to correct mirroring
.offset(y: -radius)
.rotationEffect(.radians(angle))
.offset(x: xOffset, y: radius)
}
}
}
}
.fixedSize()
.frame(width: textWidth)
}
}
.coordinateSpace(name: "FullText")
} else {
textAsPath
}
}
private var textAsPath: some View {
HStack(spacing: 0) {
ForEach(Array(text.enumerated()), id: \.offset) { index, character in
TextPath(character: String(character))
.scaleEffect(x: 1, y: 1) // Flip horizontally to correct mirroring
}
}
}
}
struct TextPath: View {
let character: String
var body: some View {
let path = characterToPath(character)
return path.fill(Color.primary)
}
private func characterToPath(_ character: String) -> Path {
let font = UIFont.systemFont(ofSize: 20)
let attributedString = NSAttributedString(string: character, attributes: [.font: font])
let line = CTLineCreateWithAttributedString(attributedString)
let path = CGMutablePath()
for run in (CTLineGetGlyphRuns(line) as! [CTRun]) {
for index in 0..
Чего я хочу достичь: < /strong>
Я хочу добавить цвет фона за пути, особенно за всей круглой дугой текста. Как я могу изменить этот код, чтобы добавить твердый цвет фона в путь, аналогичный эффекту, показанному на другом изображении, которое у меня есть? /> Я также попытался добавить цвет фона в сам путь, но это не сработало, потому что путь не является твердым объектом, это просто контур текста. src = "https://i.sstatic.net/r6ndxgkz.png"/>
выход я хочу
Подробнее здесь: https://stackoverflow.com/questions/795 ... nother-ima
Как добавить цвет фона в путь, похожий на то, что показано на другом изображении? ⇐ IOS
Программируем под IOS
1741842015
Anonymous
Я пытаюсь создать круглый текстовый путь в Swiftui, используя пользовательский вид CirculartextPath. Текст нарисуется на дуге, и я хочу добавить цвет фона за пути, как показано на другом изображении (например, добавление сплошного фонового цвета ко всей текстовой дуге).
[b] circulartextPath: [/b]
import SwiftUI
struct CircularTextPath: View {
let text: String
let arcAngle: Angle
var body: some View {
if arcAngle.radians != 0.0 {
textAsPath
.fixedSize()
.hidden()
.overlay {
GeometryReader { fullText in
let textWidth = fullText.size.width
let startAngle = -(arcAngle.radians / 2)
let radius = arcAngle.radians > 0 ? textWidth * 1.5 / arcAngle.radians : textWidth * 2.0 / arcAngle.radians
HStack(spacing: 0) {
ForEach(Array(text.enumerated()), id: \.offset) { index, character in
Text(String(character))
.hidden()
.overlay {
GeometryReader { charSpace in
let midX = charSpace.frame(in: .named("FullText")).midX
let fraction = midX / textWidth
let angle = startAngle + (fraction * arcAngle.radians)
let xOffset = (textWidth / 2) - midX
TextPath(character: String(character))
.scaleEffect(x: 1, y: 1) // Flip horizontally to correct mirroring
.offset(y: -radius)
.rotationEffect(.radians(angle))
.offset(x: xOffset, y: radius)
}
}
}
}
.fixedSize()
.frame(width: textWidth)
}
}
.coordinateSpace(name: "FullText")
} else {
textAsPath
}
}
private var textAsPath: some View {
HStack(spacing: 0) {
ForEach(Array(text.enumerated()), id: \.offset) { index, character in
TextPath(character: String(character))
.scaleEffect(x: 1, y: 1) // Flip horizontally to correct mirroring
}
}
}
}
struct TextPath: View {
let character: String
var body: some View {
let path = characterToPath(character)
return path.fill(Color.primary)
}
private func characterToPath(_ character: String) -> Path {
let font = UIFont.systemFont(ofSize: 20)
let attributedString = NSAttributedString(string: character, attributes: [.font: font])
let line = CTLineCreateWithAttributedString(attributedString)
let path = CGMutablePath()
for run in (CTLineGetGlyphRuns(line) as! [CTRun]) {
for index in 0..
[b] Чего я хочу достичь: < /strong>
Я хочу добавить цвет фона за пути, особенно за всей круглой дугой текста. Как я могу изменить этот код, чтобы добавить твердый цвет фона в путь, аналогичный эффекту, показанному на другом изображении, которое у меня есть? /> Я также попытался добавить цвет фона в сам путь, но это не сработало, потому что путь не является твердым объектом, это просто контур текста. src = "https://i.sstatic.net/r6ndxgkz.png"/>
выход я хочу [/b]
Подробнее здесь: [url]https://stackoverflow.com/questions/79503500/how-to-add-a-background-color-to-a-path-similar-to-the-one-shown-in-another-ima[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия