tou*_*bun 14 dimension swift apple-watch watchkit
我们知道Apple Watch有两种屏幕尺寸:38mm和42mm.本WKInterfaceDevice类提供一个名为读取的特性screenBounds.我写了一个扩展名WKInterfaceDevice,尝试添加一种方法来检测当前的设备类型.
import WatchKit
enum WatchResolution {
    case Watch38mm, Watch42mm
}
extension WKInterfaceDevice {
    class func currentResolution() -> WatchResolution {
        let watch38mmRect = CGRectMake(0.0, 0.0, 136.0, 170.0)
        let watch42mmRect = CGRectMake(0.0, 0.0, 156.0, 195.0)
        let currentBounds = WKInterfaceDevice.currentDevice().screenBounds
        if CGRectEqualToRect(currentBounds, watch38mmRect) {
            return WatchResolution.Watch38mm
        } else {
            return WatchResolution.Watch42mm
        }
    }
}
这是检测Apple Watch尺寸的正确方法吗?我在Apple文档中缺少另一种方法吗?
Aar*_*ger 24
您的代码看起来不错,但有一些小问题:
CGRectMake但是在Swift中你应该使用CGRect初始化器CGRectEqualToRect但在Swift你可以使用==或switchWatchResolution枚举,但你不需要明确--Swift会从你的方法签名中找出它watch42mmRect但没有用它做任何事情我会像这样重写它:
enum WatchResolution {
    case Watch38mm, Watch42mm, Unknown
}
extension WKInterfaceDevice {
    class func currentResolution() -> WatchResolution {
        let watch38mmRect = CGRect(x: 0, y: 0, width: 136, height: 170)
        let watch42mmRect = CGRect(x: 0, y: 0, width: 156, height: 195)
        let currentBounds = WKInterfaceDevice.currentDevice().screenBounds
        switch currentBounds {
        case watch38mmRect:
            return .Watch38mm
        case watch42mmRect:
            return .Watch42mm
        default:
            return .Unknown
        }
    }
}
更新Swift 4:
它包括新推出的Watch分辨率:
enum WatchResolution {
    case Watch38mm, Watch40mm,Watch42mm,Watch44mm, Unknown  
}
extension WKInterfaceDevice {
class func currentResolution() -> WatchResolution {
    let watch38mmRect = CGRect(x: 0, y: 0, width: 136, height: 170)
    let watch40mmRect = CGRect(x: 0, y: 0, width: 162, height: 197)
    let watch42mmRect = CGRect(x: 0, y: 0, width: 156, height: 195)
    let watch44mmRect = CGRect(x: 0, y: 0, width: 184, height: 224)
    let currentBounds = WKInterfaceDevice.current().screenBounds
    switch currentBounds {
    case watch38mmRect:
        return .Watch38mm
    case watch40mmRect:
        return .Watch40mm
    case watch42mmRect:
        return .Watch42mm
    case watch44mmRect:
        return .Watch44mm
    default:
        return .Unknown
    }
  } 
}
用法
let resol = WKInterfaceDevice.currentResolution()
    switch resol {
    case .Watch38mm, .Watch42mm:
        // Do Something
    case .Watch40mm, .Watch44mm:
        // Do Something
    default:
        // Do Something
    }
参考链接: Apple Developer Watch界面链接
希望有帮助...
谢谢
小智 4
这就是我正在做的:
enum WatchModel {
    case w38, w40, w42, w44, unknown
}
extension WKInterfaceDevice {
    static var currentWatchModel: WatchModel {
        switch WKInterfaceDevice.current().screenBounds.size {
        case CGSize(width: 136, height: 170):
            return .w38
        case CGSize(width: 162, height: 197):
            return .w40
        case CGSize(width: 156, height: 195):
            return .w42
        case CGSize(width: 184, height: 224):
            return .w44
        default:
            return .unknown
    }
  }
}
| 归档时间: | 
 | 
| 查看次数: | 3188 次 | 
| 最近记录: |