Проблема маскировки в SwiftUIIOS

Программируем под IOS
Ответить
Anonymous
 Проблема маскировки в SwiftUI

Сообщение Anonymous »

Я работаю над собственным слайдером, используя RoundedRectangle для дорожки и другой Rectangle для прогресса с примененной маской. В основном это работает нормально, пока большой палец не приближается к концу. Когда большой палец перетаскивается близко к правому краю, RoundedRectangle выглядит закругленным с обоих концов. Как я могу исправить это так, чтобы только правый конец закругленного прямоугольника отображался как закругленный?

Код: Выделить всё

struct Slider: View {
@Binding var progress: CGFloat
private let stroke: CGFloat = 5.0
private var thumbWidth: CGFloat { stroke * 2 }
private var thumbHeight: CGFloat { thumbWidth * 3.5 }

var body: some View {
GeometryReader { geometry in

ZStack {
Color.black.ignoresSafeArea()

VStack {
let progressWidth = geometry.size.width * progress
let sliderWidth = geometry.size.width - thumbWidth

ZStack(alignment: .leading) {
RoundedRectangle(cornerRadius: stroke)
.frame(height: stroke)
.foregroundStyle(Color.white.opacity(0.5))
.padding(.leading, progressWidth)

Rectangle()
.fill(Color.white.opacity(0.5))
.mask(alignment: .leading) {
Rectangle()
.frame(width: progressWidth)
}

Capsule()
.fill(.red)
.frame(width: thumbWidth, height: thumbHeight)
.offset(x: progress * (geometry.size.width - thumbWidth))
.gesture(
DragGesture()
.onChanged { gesture in
let newProgress = min(max(gesture.location.x / sliderWidth, 0), 1)
progress = newProgress
}
)
}
.frame(height: thumbHeight)
}
}
}
}
}

struct SliderView: View {
@State private var progress: CGFloat = 0.0
var body: some View {
ZStack {
Color.black.ignoresSafeArea()
Slider(progress: $progress)
}
}
}
С большим пальцем посередине:
Изображение

Большой палец близко к концу:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/791 ... in-swiftui
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»