当设备旋转时如何在不将设备锁定为纵向模式的情况下将 collectionView 的所有项目固定到位?
How do you hold all the items of a collectionView in place when the device rotates without locking the device in portrait mode?
我想构建一个 collectionView,当用户旋转设备而不将设备的方向锁定为纵向模式时,它会将所有单元格固定在适当的位置。我试过使布局无效但无济于事。谢谢您的帮助。
根据您的评论,您希望将所有屏幕保持纵向,但要知道设备是否处于横向而不旋转界面(对于相机屏幕),您应该...
- 在
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
}
}
}
}
我想构建一个 collectionView,当用户旋转设备而不将设备的方向锁定为纵向模式时,它会将所有单元格固定在适当的位置。我试过使布局无效但无济于事。谢谢您的帮助。
根据您的评论,您希望将所有屏幕保持纵向,但要知道设备是否处于横向而不旋转界面(对于相机屏幕),您应该...
- 在
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 } } } }