0
我已經編寫了代碼,可以讓我在iOS中的視圖在屏幕上放大並限制可以縮小的量。我不希望用戶能夠縮小開始屏幕。問題是,下面的代碼會讓我放大,但是一旦我處於某一點,我就無法縮小到開始屏幕。我不知道我做錯了什麼。UIPinchGestureRecognizer在Xamarin中放大,但不放大
float _currentScale = 1.0f;
public override void ViewDidLoad()
{
base.ViewDidLoad();
UIPinchGestureRecognizer twoFingerPinch = new UIPinchGestureRecognizer();
twoFingerPinch.Delegate = new GestureDelegate();
View.AddGestureRecognizer(twoFingerPinch);
}
class GestureDelegate : UIGestureRecognizerDelegate
{
public override bool ShouldReceiveTouch(UIGestureRecognizer aRecogniser, UITouch aTouch)
{
return true;
}
// Ensure that the pinch, pan and rotate gestures are all recognized simultaneously
public override bool ShouldRecognizeSimultaneously(UIGestureRecognizer gestureRecognizer, UIGestureRecognizer otherGestureRecognizer)
{
// if the gesture recognizers views differ, don't recognize
if (gestureRecognizer.View != otherGestureRecognizer.View)
return false;
// if either of the gesture recognizers is a long press, don't recognize
if (gestureRecognizer is UILongPressGestureRecognizer || otherGestureRecognizer is UILongPressGestureRecognizer)
return false;
return true;
}
}
void ScaleScreen(UIPinchGestureRecognizer gestureRecognizer)
{
AdjustAnchorPointForGestureRecognizer(gestureRecognizer);
if (gestureRecognizer.State == UIGestureRecognizerState.Began || gestureRecognizer.State == UIGestureRecognizerState.Changed)
{
float minScale = 1.0f;
float maxScale = 3.0f;
float zoomSpeed = .5f;
float deltaScale = (float)gestureRecognizer.Scale;
deltaScale = ((deltaScale - 1) * zoomSpeed) + 1;
deltaScale = Math.Min(deltaScale, maxScale/_currentScale);
deltaScale = Math.Max(deltaScale, minScale/_currentScale);
_currentScale = deltaScale;
gestureRecognizer.View.Transform *= CGAffineTransform.MakeScale(deltaScale, deltaScale);
// Reset the gesture recognizer's scale - the next callback will get a delta from the current scale.
gestureRecognizer.Scale = 1;
}
}
void AdjustAnchorPointForGestureRecognizer(UIGestureRecognizer gestureRecognizer)
{
if (gestureRecognizer.State == UIGestureRecognizerState.Began)
{
var image = gestureRecognizer.View;
var locationInView = gestureRecognizer.LocationInView(image);
var locationInSuperview = gestureRecognizer.LocationInView(image.Superview);
image.Layer.AnchorPoint = new CGPoint(locationInView.X/image.Bounds.Size.Width, locationInView.Y/image.Bounds.Size.Height);
image.Center = locationInSuperview;
}
}
這是接近我所期待的,但用戶可以縮小過去1只是彈回1時,他們停在你的情況。我現在可能只需要接受它。 – SpaceCowboy74