滚动视图缩放:图像平移未按预期工作

本文关键字:工作 视图 缩放 图像 滚动 | 更新日期: 2023-09-27 18:22:00

我正在更新旧服务的映像兼容性,遇到了一个问题。

几个月前,我研究了如何缩放和平移图像。我在Xamarin官方网站上找到了这样做的方法(https://developer.xamarin.com/recipes/ios/content_controls/scroll_view/zoom_a_scrollview/)。这在当时运行良好,但现在并没有按预期运行。

以下是我正在运行的代码片段:

修改图像的大小,使其宽度始终等于屏幕宽度,并使用屏幕宽度修改高度,以保留图像的各个方面。

var width = image.Size.Width;
var height = image.Size.Height;
var newWidth = (GlobalSupport.ScreenWidth - 30);
var newHeight = height * newWidth / width;
UIGraphics.BeginImageContext(new SizeF(newWidth, newHeight));
image.Draw(new RectangleF(0, 0, newWidth, newHeight));
image = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();

创建imageView,将图像添加到其中,并设置滚动视图及其缩放。

imageView = new UIImageView(
    new RectangleF((screenWidth - image.Size.Width) / 2, 
                   0, image.Size.Width, image.Size.Height));
imageView.Image = image;
scrollView = new UIScrollView(this.View.Bounds);
scrollView.MaximumZoomScale = 4f;
scrollView.MinimumZoomScale = 1f;
scrollView.ViewForZoomingInScrollView += (UIScrollView sv) =>
{
    scrollView.ContentSize = new SizeF(imageView.Frame.Width, imageView.Frame.Height);
    return imageView;
};
this.View.AddSubview(scrollView);
scrollView.AddSubview(imageView);

我可以很好地缩放图像,UIImageView的宽度和高度也可以修改得很好。滚动视图的contentSize也会更新,但当缩放时,我只能平移到图像的某个宽度,而不能平移到整个宽度。我也摇不动了。不过我可以摇到最左上角。

有人知道这可能是什么吗?

图片:https://i.stack.imgur.com/VPkgO.jpg

图像缩放:https://i.stack.imgur.com/AQl61.jpg

图像平移:https://i.stack.imgur.com/fR1Z3.jpg

滚动视图缩放:图像平移未按预期工作

哦,我已经找到了解决方案。显然,用于父滚动视图的View.Bounds是错误的。滚动视图几乎是实际屏幕大小的2倍宽,因此平移不起作用(因为滚动视图的宽度比实际屏幕大小宽)。

解决了它,通过修改scrollView的初始化,如下所示:

scrollView = new UIScrollView(new RectangleF(0, 0, GlobalSupport.ScreenWidth, GlobalSupport.ScreenHeight));