web-dev-qa-db-ja.com

Swift APIが利用できないかどうかを確認する方法

ビューの左上と右上にのみコーナー半径を適用しています。 viewDidLoad()には次のものがあります。

_if #available(iOS 11.0, *) {
    view.layer.cornerRadius = 20.0
    view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
} 
_

IOS 11が利用できない場合、最善の方法はdraw(_ rect:)でそれを行うようです。 viewDidLoad()の外でオーバーライドする必要があるので、次のことを行います

_if NOT #available(iOS 11.0, *) {
    override func draw(_ rect: CGRect) {
        let maskPath = UIBezierPath(roundedRect: self.contentView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 20.0, height: 20.0))
        let shapeLayer = CAShapeLayer()
        shapeLayer.frame = self.bounds
        shapeLayer.path = maskPath.cgPath
        view.layer.mask = shapeLayer
    }
}
_

もちろん、構文的には正しくありません。私は何をすべきか?

7
JGuo

iOS 11より前のバージョンをサポートする必要がある場合は、関数draw(rect:)内で#availableを使用し、elsepartを使用して以前のバージョンにロジックを適用します

override func draw(_ rect: CGRect) {
    if #available(iOS 11, *) {} else {
      let maskPath = UIBezierPath(roundedRect: self.contentView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 20.0, height: 20.0))
      let shapeLayer = CAShapeLayer()
      shapeLayer.frame = self.bounds
      shapeLayer.path = maskPath.cgPath
      view.layer.mask = shapeLayer
    }
 }
18
Suhit Patil