iOS Swift 在 iPad 上随方向改变图像

Posted

技术标签:

【中文标题】iOS Swift 在 iPad 上随方向改变图像【英文标题】:iOS Swift change image with orientation on iPad 【发布时间】:2018-12-03 14:39:48 【问题描述】:

我有一个ios 应用程序,它应该可以在纵向和横向模式下运行。问题是我有一张应该在每个方向都改变的图像,即纵向图像与横向图像不同。

我已经成功地为 Interface Builder 中的 iPhone 屏幕实现了这一点。但是对于iPad,问题在于iPad 的大小等级始终是Regular widthRegular Height。所以我无法区分它们和Interface Builder.

所以,我以编程方式实现了它:

NotificationCenter.default.addObserver(forName: UIDevice.orientationDidChangeNotification,
                                           object: nil,
                                           queue: .main,
                                           using:  notification in
                                            //change image for iPad here
    )

然后我调用该方法来检查方向并在加载视图时设置图像,以便它设置正确的图像。

现在的问题是,如果从viewDidLoad 调用此方法,它不会更改UIImageView 的图像,因为它尚未创建。当从viewDidAppear 调用时,它会正确更改图像,但此更改会反映在视图上,用户可以在更改时看到它。

我的问题是: 有什么方法可以根据Interface Builder 的尺寸等级为iPad 设置图像?

如果没有,我该如何解决以编程方式执行此操作时实时图像更改的问题?

【问题讨论】:

【参考方案1】:

由于 iPad 上的尺寸等级不会改变,您可以使用设备方向

SWIFT 4

if UIDevice.current.userInterfaceIdiom == .pad &&
   UIDevice.current.orientation.isPortrait 
      // do something here
   

【讨论】:

这是我目前使用的解决方案。有用。但是当我在 viewDidLoad 中调用它时,它不会改变图像。当从 viewDidAppear 调用时,它会更改它,但用户会注意到更改 - 因为它在出现在屏幕上之后发生了更改。 @AmaniElsaed 尝试从 viewWillAppear() 调用它。我不确定,但试试看:) 不幸的是,它不起作用。与 viewDidLoad 相同的结果 嗯...我不能说别的了 :(

以上是关于iOS Swift 在 iPad 上随方向改变图像的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 设备方向改变导致 SKLabelNode 变形 Swift

锁定方向在 ipad ios 8 swift xcode 6.2 上不起作用

当 iPad 更改其方向时更改 UIImagView 图像

iOS (iPhone/iPad) SDK - 应用程序不改变方向

为啥 iPad 默认启动图像方向不起作用(iOS 5)?

改变方向改变图像