我正在制作一个简单的单页 ios 应用程序的原型(prototype)。当设备方向从纵向切换到横向时,我试图让背景在两个图像之间交换。 '''
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
UIGraphicsBeginImageContext(self.view.frame.size)
switch UIDevice.current.orientation{
case .portrait:
UIImage(named: "img_001")?.draw(in: self.view.bounds)
case .portraitUpsideDown:
UIImage(named: "img_001")?.draw(in: self.view.bounds)
case .landscapeLeft:
UIImage(named: "img_002")?.draw(in: self.view.bounds)
case .landscapeRight:
UIImage(named: "img_002")?.draw(in: self.view.bounds)
default:
break
}
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
self.view.backgroundColor = UIColor(patternImage: image)
}
'''
当设备翻转时背景会发生变化,但图像平铺在显示屏上,而它需要是填充屏幕的单个图像。
最佳答案
稍微更新了您的代码以使用正确的“大小”和“边界”
UIGraphicsBeginImageContext(size)
var bounds = self.view.bounds
bounds.size = size
switch UIDevice.current.orientation{
case .portrait:
UIImage(named: "download.jpg")?.draw(in: bounds)
case .portraitUpsideDown:
UIImage(named: "download.jpg")?.draw(in: bounds)
case .landscapeLeft:
UIImage(named: "download.jpg")?.draw(in: bounds)
case .landscapeRight:
UIImage(named: "download.jpg")?.draw(in: bounds)
default:
break
}
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
self.view.backgroundColor = UIColor(patternImage: image)
您可以通过here获得更多帮助
关于ios - 如何在快速更改屏幕方向时避免背景图像平铺,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57966602/