我有一个可在所有手机和平板电脑上运行的Swift iOS应用程序。 我想为所有设备使用相同的代码库和IPA文件。 在手机上应用程序应该是肖像。 在平板电脑上应用应该是风景。
如果您的方向正确,我可以让它不允许旋转,但如果您在设备方向错误时启动应用程序,它将以错误的方向从应用程序开始并强制您进行物理旋转手机来解决它,即使这样屏幕搞砸了。
在常规:部署信息:设备方向:我同时检查了纵向和横向
请注意,这与已经提出的其他问题相似,但我无法找到我的特殊情况。
我在所有View Controllers中使用此代码,以防止旋转,如果您已经在正确的方向:
override func shouldAutorotate() -> Bool
{
let orientation:UIDeviceOrientation = UIDevice.currentDevice().orientation
print(orientation)
if(UIDevice.currentDevice().userInterfaceIdiom == .Phone)
{
if(orientation.isLandscape)
{
return true
}
}
else
{
if(orientation.isPortrait)
{
return true
}
}
return false
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask
{
if(UIDevice.currentDevice().userInterfaceIdiom == .Phone)
{
return UIInterfaceOrientationMask.Portrait
}
else
{
return UIInterfaceOrientationMask.Landscape
}
}
答案 0 :(得分:5)
答案 1 :(得分:1)
我使用的代码会将方向更改为我想要VC的方向。
Frist我有这个结构。
struct Device {
// MARK: - Singletons
static var TheCurrentDevice: UIDevice {
struct Singleton {
static let device = UIDevice.currentDevice()
}
return Singleton.device
}
static var TheCurrentDeviceHeight: CGFloat {
struct Singleton {
static let height = UIScreen.mainScreen().bounds.size.height
}
return Singleton.height
}
// MARK: - Device Idiom Checks
static var PHONE_OR_PAD: String {
if isPhone() {
return "iPhone"
} else if isPad() {
return "iPad"
}
return "Not iPhone nor iPad"
}
static var DEBUG_OR_RELEASE: String {
#if DEBUG
return "Debug"
#else
return "Release"
#endif
}
static var SIMULATOR_OR_DEVICE: String {
#if (arch(i386) || arch(x86_64)) && os(iOS)
return "Simulator"
#else
return "Device"
#endif
}
static func isPhone() -> Bool {
return TheCurrentDevice.userInterfaceIdiom == .Phone
}
static func isPad() -> Bool {
return TheCurrentDevice.userInterfaceIdiom == .Pad
}
static func isDebug() -> Bool {
return DEBUG_OR_RELEASE == "Debug"
}
static func isRelease() -> Bool {
return DEBUG_OR_RELEASE == "Release"
}
static func isSimulator() -> Bool {
return SIMULATOR_OR_DEVICE == "Simulator"
}
static func isDevice() -> Bool {
return SIMULATOR_OR_DEVICE == "Device"
}
}
然后在我要控制的VC veiwdidload中,我使用了这段代码。
override func viewDidload() {
let CD = Device.PHONE_OR_PAD
if CD == "iPhone" {
let value = UIInterfaceOrientation.Portrait.rawValue
UIDevice.currentDevice().setValue(value, forKey: "orientation")
shouldAutorotate()
}
}
override func shouldAutorotate() -> Bool {
switch UIDevice.currentDevice().orientation {
case .Portrait, .PortraitUpsideDown, .Unknown:
return true
default:
return false
}
}
希望这有帮助。