Xamarin.ios 如何在xamarin ios中基于当前缩放位置缩放图像
我使用UIPinchGestureRecgonizer缩放图像。每次缩放时,图像都会从其中心位置而不是当前缩放位置进行缩放。如何基于点而不是中心缩放图像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
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);
}
}
使用定位点无法解决问题。还有别的办法吗?