Swift 5.2, iOS 13
Я хочу предсказать / вычислить центральную точку кадра после того, как он был масштабирован, чтобы я мог перемещать к нему фигуру при масштабировании. Если я попытаюсь масштабировать и центрировать вид в анимации / динамически, это не сработает, с конечным результатом, как я подозреваю, комбинацией центральных точек. Итак, на изображениях ниже синий прямоугольник начинается в верхнем правом углу, я масштабирую его и перемещаю в центр. Но, как вы можете видеть из зеленого прямоугольника, масштабирование испортило ту точку, до которой нужно добраться ...
struct SwiftUIView2: View {
@State var relocate = Alignment.topTrailing
@State var zoom:CGFloat = 1.0
@State var tag:Bool = true
@State var tag2:Bool = false
@State var centerPoint: CGPoint = .zero
var body: some View {
ZStack {
ZStack(alignment: relocate) {
Rectangle()
.stroke(Color.blue, lineWidth: 2)
.frame(width: 32, height: 32, alignment: .center)
.onTapGesture {
withAnimation {
if self.tag {
self.zoom = 2.0
self.relocate = Alignment.center
} else {
self.relocate = Alignment.topTrailing
self.zoom = 1.0
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.tag.toggle()
}
}
.scaleEffect(zoom, anchor: .topLeading)
}.frame(width: 256, height: 256, alignment: relocate)
.border(Color.red)
if !tag {
ZStack {
Rectangle()
.stroke(Color.green, lineWidth: 2)
.frame(width: 32, height: 32, alignment: .center)
.onTapGesture {
self.tag.toggle()
}
}.frame(width: 256, height: 256, alignment: .center)
.scaleEffect(zoom, anchor: .center)
}
}
}
}
GeoReader Я думал будет ответом, но и от него вылезает фигня. Провел больше недели, пробуя настраиваемые выравнивания, положение, все, что я мог придумать. На данный момент оценил решение с процентным соотношением экранов сайта, но, очевидно, оно не слишком хорошо работает с экранами разных размеров.
1 ответ
Вот исправление (протестировано с Xcode 11.4 / iOS 13.4)
}
.scaleEffect(zoom) // << here !! (remove topLeading anchor)
}.frame(width: 256, height: 256, alignment: relocate)
Похожие вопросы
Новые вопросы
animation
Анимация - это быстрое отображение последовательности визуальных эффектов, чтобы создать иллюзию движения или изменения.