Trong tôi C# Tôi làm như sau
private double _firstDistance = 0;
private int _firstScaling = 0;
private void PinchHandler(UIPinchGestureRecognizer pinchRecognizer)
{
nfloat x1, y1, x2, y2 = 0;
var t1 = pinchRecognizer.LocationOfTouch(0, _previewView);
x1 = t1.X;
y1 = t1.Y;
var t2 = pinchRecognizer.LocationOfTouch(1, _previewView);
x2 = t2.X;
y2 = t2.Y;
if (pinchRecognizer.State == UIGestureRecognizerState.Began)
{
_firstDistance = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
_firstScaling = _task.TextTemplates[_selectedTextTemplate].FontScaling;
}
if (pinchRecognizer.State == UIGestureRecognizerState.Changed)
{
var distance = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
var fontScaling = Convert.ToInt32((distance - _firstDistance)/_previewView.Frame.Height * 100);
fontScaling += _firstScaling;
_task.TextTemplates[_selectedTextTemplate].FontScaling = fontScaling;
UpdateBitmapPreview();
}
}
tôi tính toán khoảng cách giữa hai điểm khi pinch "bắt đầu" và giữ giá trị trong hai lối đi riêng. Sau đó, tôi tính toán một tỷ lệ (fontScaling) dựa trên khoảng cách đo đầu tiên và thứ hai (trong "thay đổi"). Tôi sử dụng chế độ xem của riêng mình (_previewView) để đặt làm cơ sở (100%), nhưng bạn có thể sử dụng View.Bounds.height thay thế hoặc chiều rộng cho vấn đề đó. trong trường hợp của tôi, tôi luôn có chế độ xem hình vuông, vì vậy chiều cao == chiều rộng trong ứng dụng của tôi.
Nguồn
2016-11-08 15:00:05