又出了一款大手机,问题就是要适配了,适配自然是要根据屏幕尺寸来。
怎么代表尺寸,当然是用枚举了(Swift的枚举真的优秀)
public enum ScreenModel {
public enum ClassicModel {
case inch35
case inch4
}
case classic(ClassicModel)
case bigger
case biggerPlus
case x
case xMax
}
想一下历代手机,无非就是枚举里面的这几种,比更大还更大。
然后就可以根据屏幕来获得对应的枚举了
private let screenModel: ScreenModel = {
let screen = UIScreen.main
let height = max(screen.bounds.width, screen.bounds.height)
switch height {
case 480:
return .classic(.inch35)
case 568:
return .classic(.inch4)
case 667:
return .bigger
case 736, 1920:
return .biggerPlus
case 812:
return .x
case 896:
return .xMax
default:
print("Warning: Can NOT detect screenModel! bounds: \(screen.bounds) nativeScale: \(screen.nativeScale)")
return .bigger // Default
}
}()
光知道是什么屏还不够,得根据不同的屏幕来做我们想做的事情。适配无非就是在不同的分辨率下设置不同的值,或者根据分辨率做一些其它的事情,用泛型真的再好不过。
手机是个四方形,所以只要关注横和竖,哈哈哈。
public enum Ruler<T> {
case iPhoneHorizontal(T, T, T)
case iPhoneVertical(T, T, T, T, T, T)
}
一个带泛型的枚举(优秀),分别是横和竖。横着有三种尺寸,normal,bigger,biggerplus。
竖着就不同了,4,5,6,6plus,x,xplus。
所以第一个枚举有三个泛型参数,第二个枚举有六个。
public var value: T {
switch self {
case let .iPhoneHorizontal(classic, bigger, biggerPlus):
switch screenModel {
case .classic:
return classic
case .bigger:
return bigger
case .biggerPlus:
return biggerPlus
case .x:
return bigger
case .xMax:
return biggerPlus
default:
return biggerPlus
}
case let .iPhoneVertical(inch35, inch4, bigger, biggerPlus, x, xMax):
switch screenModel {
case .classic(let model):
switch model {
case .inch35:
return inch35
case .inch4:
return inch4
}
case .bigger:
return bigger
case .biggerPlus:
return biggerPlus
case .x:
return x
case .xMax:
return xMax
default:
return biggerPlus
}
}
在枚举里面设一个value的属性,就可以得到不同尺寸下的值。
let width = Ruler.iPhoneHorizontal(10, 20, 30).value
let height = Ruler.iPhoneVertical(5, 10, 20, 30, 40).value
colorView.backgroundColor = Ruler.iPhoneVertical(UIColor.black, UIColor.red, UIColor.blue, UIColor.green, UIColor.yellow).value
typealias Greeting = () -> Void
let greeting: Greeting = Ruler.iPhoneVertical(
{ print("Hello!") },
{ print("Hi!") },
{ print("How are you!") },
{ print("How do you do!") },
{ print("好久不见!") },
greeting()
泛型的好处就是不仅仅是设置个size那么简单,你甚至可以设置颜色或者函数,是不是很酷。
Ruler了解一下
网友评论