【问题标题】:How do you hold all the items of a collectionView in place when the device rotates without locking the device in portrait mode?当设备旋转而不将设备锁定为纵向模式时,如何将 collectionView 的所有项目保持在适当的位置?
【发布时间】:2018-09-28 19:06:47
【问题描述】:

我想构建一个collectionView,当用户旋转设备而不将设备的方向锁定为纵向模式时,它将所有单元格保持在适当的位置。我曾尝试使布局无效,但无济于事。感谢您的帮助。

【问题讨论】:

  • 仅在 info.plist 中将支持的界面方向设置为纵向?
  • @AshleyMills 我还想允许应用检测何时处于横向模式
  • 您还有其他需要在两个方向上工作的屏幕?
  • @AshleyMills 在某种意义上是的,我希望他们能够检测到它们何时处于横向模式,但我不希望屏幕旋转或 collectionView 屏幕上的任何项目在发生旋转
  • 我不确定我是否理解 - 如果屏幕不旋转,您为什么想知道设备是否处于横向?

标签: ios swift uicollectionview uicollectionviewlayout uiinterfaceorientation


【解决方案1】:

根据您的评论,您希望所有屏幕都保持纵向,但要知道设备是否处于横向而不旋转界面(对于相机屏幕),您应该……

  • your info.plist 中将支持的界面方向设置为纵向
  • 使用CMMotionManager检测设备方向...

    let motionManager = CMMotionManager()
    var currentOrientation = UIDeviceOrientation.portrait
    
    func montiorOrientation() {
        motionManager.startAccelerometerUpdates(to: OperationQueue()) { data, error in
            if let error = error {
                print("CM orientation error - \(error)")
                return
            }
            let acceleration = data!.acceleration
    
            let orientation: UIDeviceOrientation = fabs(acceleration.y) < fabs(acceleration.x) ?
                (acceleration.x > 0 ? .landscapeRight : .landscapeLeft) :
                (acceleration.y > 0 ? self.currentOrientation : .portrait) // Ignore portraitUpsideDown
    
            if orientation != self.currentOrientation {
                DispatchQueue.main.async {
                    self.currentOrientation = orientation
                }
            }
    
        }
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多