테스트 용 UWP 형식에서 나는 아래에 기본적인 조작 테스트가 있습니다. 그것은 CanvasControl에 3 개의 원을 그리고 번역과 스케일링 조작을 설정합니다.조작 델타 - 이상한 효과와 오버 플로우에 대한 응답
터치 스크린에서이 기능을 테스트하면 기본적으로 화면의 두 손가락 위치에 따라 원을 번역하고 확대/축소하는 기능을 수행합니다. 그러나 특정 지점을 넘기면 이미지가 2 익스텐트 사이에서 매우 빠르게 진동하기 시작하며 코드가 오버플로로 멈추게됩니다.
저는 캔버스 컨트롤을 그리드에 넣고 그리드 컨트롤에서 캔버스 컨트롤에 대한 조작을 시도했지만 확대/축소 및 패닝의 효과가 올바르지는 않지만 동일한 문제가 발생하지 않았습니다.
그래서 내 코드의 효과처럼 보입니다. 반복 변형입니다. 렌더링 변형을 일으키는 조작이 다른 조작을 일으킬 수 있으며, 그것이 안정 될 때까지 원으로 이동합니다. 또는 정밀도 문제가있는 경우 반복됩니다. 터치 포인트 간 거리가 너무 짧아서 오버플로가 발생할 때까지 반복됩니다.
예상 되나요? 이 작업을 수행하는 올바른 방법은 무엇입니까?
는Private WithEvents Canv As New CanvasControl
Private WithEvents gr As New Grid
Private Sub Canv_Draw(sender As CanvasControl, args As CanvasDrawEventArgs) Handles Canv.Draw
args.DrawingSession.DrawCircle(50, 50, 25, Windows.UI.Colors.Blue)
args.DrawingSession.DrawCircle(250, 250, 25, Windows.UI.Colors.Blue)
args.DrawingSession.DrawCircle(500, 500, 25, Windows.UI.Colors.Blue)
End Sub
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Content = gr
gr.Children.Add(Canv)
Canv.ManipulationMode = ManipulationModes.Scale Or ManipulationModes.TranslateX Or ManipulationModes.TranslateY
end sub
Private Sub Canv_ManipulationDelta(sender As Object, e As ManipulationDeltaRoutedEventArgs) Handles Canv.ManipulationDelta
Dim t As New TranslateTransform
t.X = e.Cumulative.Translation.X
t.Y = e.Cumulative.Translation.Y
Dim s As New ScaleTransform
s.ScaleX = e.Cumulative.Scale
s.ScaleY = e.Cumulative.Scale
s.CenterX = e.Position.X
s.CenterY = e.Position.Y
Dim g As New TransformGroup
g.Children.Add(s)
g.Children.Add(t)
Canv.RenderTransform = g
End Sub