ScrollView 缩放:图像平移未按预期工作
ScrollView zooming: image panning not working as intended
我正在努力更新图像对旧服务的兼容性,运行 遇到了问题。
几个月前,我查阅了如何缩放和平移图像。我在 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 也更新了,但是当缩放时我只能平移到图像的特定宽度,而不是整个宽度。我也不能平移。不过我可以平移到最左上角。
有人知道这可能是什么吗?
图片:http://i.stack.imgur.com/VPkgO.jpg
哦,我已经找到解决办法了。显然,用于父 scrollView 的 View.Bounds 是错误的。 scrollview 几乎是实际屏幕尺寸的 2 倍,因此无法平移(因为 scrollview 的宽度比实际屏幕尺寸宽)。
通过修改 scrollView 的初始化解决了这个问题:
scrollView = new UIScrollView(new RectangleF(0, 0, GlobalSupport.ScreenWidth, GlobalSupport.ScreenHeight));
我正在努力更新图像对旧服务的兼容性,运行 遇到了问题。
几个月前,我查阅了如何缩放和平移图像。我在 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 也更新了,但是当缩放时我只能平移到图像的特定宽度,而不是整个宽度。我也不能平移。不过我可以平移到最左上角。
有人知道这可能是什么吗?
图片:http://i.stack.imgur.com/VPkgO.jpg
哦,我已经找到解决办法了。显然,用于父 scrollView 的 View.Bounds 是错误的。 scrollview 几乎是实际屏幕尺寸的 2 倍,因此无法平移(因为 scrollview 的宽度比实际屏幕尺寸宽)。
通过修改 scrollView 的初始化解决了这个问题:
scrollView = new UIScrollView(new RectangleF(0, 0, GlobalSupport.ScreenWidth, GlobalSupport.ScreenHeight));