SwiftUI: неправильное движение заметки после поворотаIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 SwiftUI: неправильное движение заметки после поворота

Сообщение Anonymous »

Я работаю над проектом SwiftUI, в котором я могу перетаскивать, изменять размер и вращать заметки. Хотя изменение размера и поворот работают нормально, у меня возникают проблемы с перетаскиванием после поворота заметки.
Проблема:
Когда заметка нота поворачивается, перетаскивание ее вдоль «вертикальных» или «горизонтальных» осей приводит к перемещению вдоль исходных неповернутых осей. Например, если заметку повернуть на 90 градусов, при перетаскивании вверх она сдвинется вбок.
Что я пробовал:
  • Я использовал RotateEffect для обработки вращения.
  • Я настраиваю перевод, чтобы учесть вращение с помощью тригонометрии, но перетаскивание по-прежнему работает неправильно. .
Вот мой код для заметки:

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

ZStack {
stickyNote.color
.frame(width: stickyNote.size.width, height: stickyNote.size.height)
.cornerRadius(10)
.overlay(
RoundedRectangle(cornerRadius: 10)
.stroke(isSelected ? Color.blue : Color.clear, lineWidth: 3)
)
.rotationEffect(rotation, anchor: .center)
.offset(x: position.width, y: position.height)
.gesture(
TransformHelper.dragGesture(
position: $position,
lastPosition: $lastPosition,
rotation: rotation,
isResizing: isResizing,
isDragging: $isDragging
)
)
.gesture(
TransformHelper.rotationGesture(
rotation: $rotation,
lastRotation: $lastRotation
)
)
}
А вот код движения и вращения:

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

static func adjustTranslationForRotation(_ translation: CGSize, rotation: Angle) -> CGSize {
let radians = rotation.radians
let cosTheta = CGFloat(cos(radians))
let sinTheta = CGFloat(sin(radians))

// Adjust the translation to account for rotation
let adjustedX = translation.width * cosTheta - translation.height * sinTheta
let adjustedY = translation.width * sinTheta + translation.height * cosTheta

return CGSize(width: adjustedX, height: adjustedY)
}

static func dragGesture(
position: Binding,
lastPosition: Binding,
rotation: Angle,
isResizing: Bool,
isDragging: Binding
) -> some Gesture {
return DragGesture()
.onChanged { value in
if !isResizing {
let adjustedTranslation = adjustTranslationForRotation(value.translation, rotation: rotation)

position.wrappedValue = CGSize(
width: lastPosition.wrappedValue.width + adjustedTranslation.width,
height: lastPosition.wrappedValue.height + adjustedTranslation.height
)
isDragging.wrappedValue = true
}
}
.onEnded { _ in
if isDragging.wrappedValue {
isDragging.wrappedValue = false
lastPosition.wrappedValue = position.wrappedValue
}
}
}
Кто-нибудь сталкивался с подобной проблемой, когда направление перетаскивания было неправильным после применения поворота? Будем очень признательны за любые советы о том, как заставить заметку правильно двигаться в зависимости от ее текущей ориентации!
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... r-rotation
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • SwiftUI: неправильное движение заметки после поворота
    Anonymous » » в форуме IOS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Движение 3D склона Unity создает неровное движение
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Неправильное движение на левую вершину с FedIsplacemationMap в качестве фонефильтра, без ожидаемого эффекта
    Anonymous » » в форуме Html
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Снимите фокус с поля ввода заметки при нажатии в любом месте за его пределами на экране.
    Anonymous » » в форуме C#
    0 Ответы
    112 Просмотры
    Последнее сообщение Anonymous
  • Отображение рисунка matplotlib.pyplot в PDF-файле, экспортированном из заметки Obsidian.
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous

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