Xamarin.ios 如何在xamarin ios中基于当前缩放位置缩放图像

Xamarin.ios 如何在xamarin ios中基于当前缩放位置缩放图像,xamarin.ios,uiimageview,zooming,Xamarin.ios,Uiimageview,Zooming,我使用UIPinchGestureRecgonizer缩放图像。每次缩放时,图像都会从其中心位置而不是当前缩放位置进行缩放。如何基于点而不是中心缩放图像 UIImageView view; public override void ViewDidLoad() { base.ViewDidLoad(); view = new UIImageView(); view.UserInteraction

我使用UIPinchGestureRecgonizer缩放图像。每次缩放时,图像都会从其中心位置而不是当前缩放位置进行缩放。如何基于点而不是中心缩放图像

UIImageView view;
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            view = new UIImageView();
            view.UserInteractionEnabled = true;
            view.Image = UIImage.FromFile("world.png");
            view.Frame = new CoreGraphics.CGRect(10, 20, 256, 256);
            UIPinchGestureRecognizer gesture = new UIPinchGestureRecognizer(pinchGesture);
            view.AddGestureRecognizer(gesture);
            View.Add(view);
            // Perform any additional setup after loading the view, typically from a nib.
        }

        public override void DidReceiveMemoryWarning()
        {
            base.DidReceiveMemoryWarning();
            // Release any cached data, images, etc that aren't in use.
        }

        private void pinchGesture(UIPinchGestureRecognizer pinchGestureRecgonizer)
        {
            pinchGestureRecgonizer.View.Transform *= CoreGraphics.CGAffineTransform.MakeScale(pinchGestureRecgonizer.Scale,
                                                                                                      pinchGestureRecgonizer.Scale);
            pinchGestureRecgonizer.Scale = 1;
        }

参考本文档,我们知道更改其值以修改一个控件的转换点。由于其默认值为(0.5,0.5),控件将始终在中心位置缩放

首先,让UIImageView允许多点触摸,然后我们可以计算
主播点
。在这里,我让它成为两个手指的中心:

view.MultipleTouchEnabled = true;

// Calculate it in the touch began event
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
    base.TouchesBegan(touches, evt);

    if (touches.Count == 2)
    {
        UITouch firstTouch = touches.ToArray<UITouch>()[0];
        UITouch secondTouch = touches.ToArray<UITouch>()[1];

        var firstPoint = firstTouch.LocationInView(view);
        var secondPoint = secondTouch.LocationInView(view);

        var centerPoint = new CoreGraphics.CGPoint((firstPoint.X + secondPoint.X) / 2, (firstPoint.Y + secondPoint.Y) / 2);
        view.Layer.AnchorPoint = new CoreGraphics.CGPoint(centerPoint.X / 256, centerPoint.Y / 256);
    }
}
view.MultipleTouchEnabled=true;
//在触摸开始事件中计算它
公共覆盖无效触摸开始(NSSet触摸,UIEVT事件)
{
基本。触摸开始(触摸,evt);
如果(touchs.Count==2)
{
UITouch firstTouch=touch.ToArray()[0];
UITouch secondTouch=touch.ToArray()[1];
var firstPoint=firstTouch.LocationInView(视图);
var secondPoint=secondTouch.LocationInView(视图);
var centerPoint=new CoreGraphics.CGPoint((firstPoint.X+secondPoint.X)/2,(firstPoint.Y+secondPoint.Y)/2);
view.Layer.ancorpoint=新的CoreGraphics.CGPoint(centerPoint.X/256,centerPoint.Y/256);
}
}

使用定位点无法解决问题。还有别的办法吗?