【问题标题】:How to avoid background image tiling when changing screen orientation, in swift如何在快速更改屏幕方向时避免背景图像平铺
【发布时间】:2019-09-17 11:45:04
【问题描述】:

我正在制作一个简单的单页 ios 应用程序的原型。当设备方向从纵向切换到横向时,我试图让背景在两个图像之间交换。 '''

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)

}

'''

当设备翻转时背景会发生变化,但图像平铺在显示屏上,而它需要是一个充满屏幕的图像。

【问题讨论】:

  • 使用UIImageView 而不是设置backgroundColor。这样,您无需考虑调整图像大小以适应屏幕。只需使用contentMode = .aspectFill

标签: ios swift xcode


【解决方案1】:

稍微更新您的代码以使用正确的“大小”和“边界”

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获得更多帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多