C# Xamarin ios-如何在UIScrollView中放置大图像
我正在使用用C#实现的Xamarin.iOS。我有一个图像列表。我正在尝试实现一个类似于Facebook或任何其他照片查看应用程序的功能。图像非常大,但我想缩放它们,使它们始终符合scrollview的边界-在本例中,scrollview符合屏幕边界 我的挑战是:C# Xamarin ios-如何在UIScrollView中放置大图像,c#,uiscrollview,xamarin.ios,C#,Uiscrollview,Xamarin.ios,我正在使用用C#实现的Xamarin.iOS。我有一个图像列表。我正在尝试实现一个类似于Facebook或任何其他照片查看应用程序的功能。图像非常大,但我想缩放它们,使它们始终符合scrollview的边界-在本例中,scrollview符合屏幕边界 我的挑战是: 我的图像填满了整个屏幕,但没有正确缩放 缩小时,我希望最小缩放比例返回到原始视图 以下是我目前的代码: public override void ViewDidLoad() { base.ViewDidLoad
public override void ViewDidLoad()
{
base.ViewDidLoad ();
//Setting up the scrollView
ScrollViewMain.BouncesZoom = false;
ScrollViewMain.ClipsToBounds = true;
index = 0;
AddImageInScrollView(index);
btnClose.AddTarget (this, new Selector ("MySelector"), UIControlEvent.TouchDown);
btnPrevious.TouchUpInside += (object sender, EventArgs e) => {
index--;
if(index < 0)
index = 0;
imageView.RemoveFromSuperview();
AddImageInScrollView(index);
} ;
btnNext.TouchUpInside += (object sender, EventArgs e) => {
index++;
if((nuint)index > Car.allThumbnails.Count-1)
index = (int)Car.allThumbnails.Count-1;
imageView.RemoveFromSuperview();
AddImageInScrollView(index);
} ;
var tapGestureRecognizer = new UITapGestureRecognizer (OnDoubleTap);
tapGestureRecognizer.NumberOfTapsRequired = 2;
ScrollViewMain.AddGestureRecognizer (tapGestureRecognizer);
}
public void AddImageInScrollView(int index)
{
//Setting up the imageView
imageView = new UIImageView(Car.allThumbnails.GetItem<UIImage>((nuint)index));
imageView.UserInteractionEnabled = true;
imageView.ContentMode = UIViewContentMode.ScaleAspectFit;
//Adding the imageView to the scrollView as subView
ScrollViewMain.AddSubview(imageView);
ScrollViewMain.DecelerationRate = UIScrollView.DecelerationRateFast;
var scrollViewFrame = ScrollViewMain.Frame;
var scaleWidth = scrollViewFrame.Size.Width / ScrollViewMain.ContentSize.Width;
var scaleHeight = scrollViewFrame.Size.Height / ScrollViewMain.ContentSize.Height;
ScrollViewMain.ContentSize = new System.Drawing.SizeF((float)ScrollViewMain.Bounds.Size.Width, (float)ScrollViewMain.Bounds.Size.Height);
var minScale = Math.Min(scaleWidth, scaleHeight);
//Set the zoom properties
ScrollViewMain.MaximumZoomScale = 3f;
ScrollViewMain.MinimumZoomScale = (float)minScale;
ScrollViewMain.ViewForZoomingInScrollView += (UIScrollView sv) => {
return imageView;
};
ScrollViewMain.ZoomScale = 1.0f;
ScrollViewMain.ContentMode = UIViewContentMode.ScaleAspectFit;
imageView.ContentMode = UIViewContentMode.ScaleAspectFit;
imageView.SizeToFit();
ScrollViewMain.ContentSize = new System.Drawing.SizeF((float)imageView.Frame.Size.Width, (float)imageView.Frame.Size.Height);
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
//设置滚动视图
ScrollViewMain.BouncesZoom=false;
ScrollViewMain.ClipsToBounds=true;
指数=0;
AddImagesCrollView(索引);
btnClose.AddTarget(此,新选择器(“MySelector”),uicontrol事件.触地);
btnPrevious.TouchUpInside+=(对象发送者,事件参数e)=>{
索引--;
如果(指数<0)
指数=0;
imageView.RemoveFromSuperview();
AddImagesCrollView(索引);
} ;
btnNext.TouchUpInside+=(对象发送方,事件参数e)=>{
索引++;
if((num)index>Car.allThumbnails.Count-1)
index=(int)Car.allThumbnails.Count-1;
imageView.RemoveFromSuperview();
AddImagesCrollView(索引);
} ;
var tapGestureRecognizer=新的UITapGestureRecognizer(OnDoubleTap);
TapGestureRecognitor.NumberOfTapsRequired=2;
ScrollViewMain.AddGestureRecognizer(点击GestureRecognizer);
}
公共void AddImageInScrollView(整数索引)
{
//设置imageView
imageView=newUIImageView(Car.allThumbnails.GetItem((nuint)索引));
imageView.UserInteractionEnabled=true;
imageView.ContentMode=UIViewContentMode.ScaleSpectFit;
//将imageView作为子视图添加到scrollView
ScrollViewMain.AddSubview(imageView);
ScrollViewMain.DecelerationRate=UIScrollView.DecelerationRateFast;
var scrollViewFrame=ScrollViewMain.Frame;
var scaleWidth=scrollViewFrame.Size.Width/ScrollViewMain.ContentSize.Width;
var scaleHeight=scrollViewFrame.Size.Height/ScrollViewMain.ContentSize.Height;
ScrollViewMain.ContentSize=new System.Drawing.SizeF((float)ScrollViewMain.Bounds.Size.Width,(float)ScrollViewMain.Bounds.Size.Height);
var minScale=Math.Min(标度宽度、标度高度);
//设置缩放属性
ScrollViewMain.MaximumZoomScale=3f;
ScrollViewMain.MinimumZoomScale=(浮点)最小刻度;
ScrollViewMain.ViewForZoomingInScrollView+=(UIScrollView sv)=>{
返回图像视图;
};
ScrollViewMain.ZoomScale=1.0f;
ScrollViewMain.ContentMode=UIViewContentMode.ScaleSpectFit;
imageView.ContentMode=UIViewContentMode.ScaleSpectFit;
imageView.SizeToFit();
ScrollViewMain.ContentSize=new System.Drawing.SizeF((float)imageView.Frame.Size.Width,(float)imageView.Frame.Size.Height);
}
这就是它的样子