холст щепотка и масштаб с начальным масштабом менее 1 - PullRequest
1 голос
/ 20 июня 2011

У меня есть один внешний холст, внутри которого я загружаю другой холст (большого размера). Я установил геометрию клипа, чтобы на экране была видна только часть внутреннего (большого) холста.

Поскольку внутренний холст имеет большой размер, поэтому я сохранил начальный масштаб внутреннего холста как 0,4, т.е. я применил композитное преобразование к внутреннему холсту и сделал scaleX и scaleY равными 0,4.

Теперь я реализовал методы слушателя жестов OnPinchStart и OnPinchDelta. В OnPinchDelta я масштабирую холст.

Проблема в том, что, поскольку начальный масштаб равен 0,4, поэтому, пока масштаб не достигнет (или масштаб не пересекает 1), холст не масштабируется от центра, это означает, что его положение изменяется. Однако как только масштабный коэффициент достигает (или пересекает) 1, масштабирование холста начинается правильно.

Короче говоря, когда коэффициент масштабирования меньше 1, масштабирование не происходит от центра или иным образом, положение холста не остается правильным.

Я пробовал много разных подходов, но масштабный коэффициент меньше 1 не работает для меня должным образом. Любая помощь.

1 Ответ

0 голосов
/ 21 июня 2011
var factor = // calculate this based on amount of data and the speed
var width = // element rendered width
var height = // element rendered height
var changeInWidth = (1-factor) * width; // can be 0, neg or pos
var changeInHeight = (1-factor) * height;
var changeInX = changeInWidth / 2;
var changeInY = changeInHeight / 2;

Canvas.SetLeft(element, Canvas.GetLeft(element) + changeInX);
Canvas.SetTop(element, Canvas.GetTop(element) + changeInY);

Просто убедитесь, что ваш элемент обернут холстом, в противном случае левый и верхний будут игнорироваться.

Для вычисления коэффициента вы можете использовать e.DistanceRatio;Он может использоваться как фактор, но вы можете умножить его на постоянную, если хотите увеличить (например, 1,2) или уменьшить (0,8) скорость масштабирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...