Ios 如何在swift中以编程方式在任何屏幕方向上保持一个方面固定的UIView填充屏幕?

Ios 如何在swift中以编程方式在任何屏幕方向上保持一个方面固定的UIView填充屏幕?,ios,swift,uiview,uiviewcontroller,uiviewanimation,Ios,Swift,Uiview,Uiviewcontroller,Uiviewanimation,我只想要这个简单的效果: 我有一张图片会根据设备/屏幕方向自动定位,它总是填满整个屏幕,而不会拉伸自己,这样外观就不会改变 我使用Xcode虽然我在storyboard和UI builder上得到了很多答案,但我真的不喜欢这样的工作方式,但是你不知道它是如何工作的,所以我试图找到一种以编程方式完成的方法 我曾尝试将图像视图设置为子视图,但在设备旋转后,它无法很好地修复,它要么拉伸以填充屏幕,要么移动到其他位置而大小不变(当我尝试重新计算帧并应用于子视图时),然后我尝试覆盖UIView的drawr

我只想要这个简单的效果:

我有一张图片会根据设备/屏幕方向自动定位,它总是填满整个屏幕,而不会拉伸自己,这样外观就不会改变

我使用Xcode虽然我在storyboard和UI builder上得到了很多答案,但我真的不喜欢这样的工作方式,但是你不知道它是如何工作的,所以我试图找到一种以编程方式完成的方法

我曾尝试将图像视图设置为子视图,但在设备旋转后,它无法很好地修复,它要么拉伸以填充屏幕,要么移动到其他位置而大小不变(当我尝试重新计算帧并应用于子视图时),然后我尝试覆盖UIView的drawrect func,该帧工作正常,但旋转动画被破坏(它在旋转过程中自行拉伸,然后跳到最后一帧)

我想要的完美效果就像iOS原始照片应用程序一样,当我检查一张照片时,它会调整大小以修复屏幕,甚至当我旋转屏幕时,动画效果也非常完美,旋转和缩放同时发生,不会发生拉伸跳过。谁能帮我一下吗

谢谢

我设置框架的方式:

func locating (imgsize:CGSize,scrsize:CGSize) ->CGRect {
var size:CGSize
var ori:CGPoint
if ((imgsize.height / imgsize.width) * scrsize.width>=scrsize.height){
    size = CGSize(width:scrsize.width,height:imgsize.height*(scrsize.width/imgsize.width))
    ori = CGPoint(x:0,y:scrsize.height-imgsize.height*(scrsize.width/imgsize.width))

}
else {
    size = CGSize(width:imgsize.width*(scrsize.height/imgsize.height),height:scrsize.height)
    ori = CGPoint(x:-(imgsize.width*(scrsize.height/imgsize.height)-scrsize.width)/2,y:0)
    }
return CGRect(origin:ori,size:size)

}除了数学以外!这里也有一些解决方案,可以为你工作

  • 将图像宽度和高度设置为superview宽度和高度
self.imageView.frame=self.imageView.superView?.bounds

  • 然后将
    imageView的
    contentMode
    属性设置为
    aspectFill
    aspectFit

  • self.imageView.contentMode=UIViewContentModeScaleAspectFit
  • self.imageView.contentMode=UIViewContentModeScaleAspectFill

谢谢!这太有用了!它几乎可以完美工作,唯一的一点是,在ScaleSpectFill/fit中,我只能将图像设置在中间,是否有任何方法可以在缩放图像以填充/适应superview的同时将其对齐到一侧?(就像我有一个非常高的图像,它可以缩放以满足屏幕的宽度,但是高度太高了,我想将它与底部对齐,因为我想显示的图像的内容就在那里,有没有办法?我必须计算帧并使用重绘模式?这个第三方库可能会做你想做的事情h:谢谢你这么多的帮助!