[注: Swift 2.2 および Swift 3 に更新]
簡単な答え: CALayer を使用する
CAShapeLayer Class Referenceで説明されているように、 aCAShapeLayer
はカスタム パスを使用してシェイプを描画するために使用されます。画像をそのcontents
ように設定しても、単に無視されます。
レイヤーに画像を表示したいだけの場合 (ファイルの名前が だとしましょうimage.png
)、 を使用してCALayer
そのcontents
プロパティを設定しCGImage
、画像の表現を参照するようにします。
スウィフト 2.2:
let layer = CALayer()
layer.contents = UIImage(named: "image")?.CGImage
スウィフト 3:
let layer = CALayer()
layer.contents = UIImage(named: "image")?.cgImage
より長い答え: CAShapeLayer を使い続ける
OP が具体的に について尋ねたので、CAShapeLayer
質問は「を使用して特定の形状に画像をトリミングするにはどうすればよいCAShapeLayer
ですか?」のように読むことができます。
試してみることをお勧めする解決策が 2 つあります。
1) マスキング
法線CALayer
を作成し、イメージをその として設定しますcontents
。次に、CAShapeLayer
好きなパスで を作成し、最初のレイヤーの として使用しますmask
。
スウィフト 2.2:
let imageLayer = CALayer()
imageLayer.contents = UIImage(named: "image")?.CGImage // Assign your image
imageLayer.frame = ... // Define a frame
let maskPath = UIBezierPath(...) // Create your path
let maskLayer = CAShapeLayer()
maskLayer.path = maskPath.CGPath
imageLayer.mask = maskLayer // Set the mask
スウィフト 3:
let imageLayer = CALayer()
imageLayer.contents = UIImage(named: "image")?.cgImage // Assign your image
imageLayer.frame = ... // Define a frame
let maskPath = UIBezierPath(...) // Create your path
let maskLayer = CAShapeLayer()
maskLayer.path = maskPath.cgPath
imageLayer.mask = maskLayer // Set the mask
適切なフレームとパスを設定することを忘れないでください。そうすれば、必要な効果が得られるはずです。
2) 塗りつぶし色
CAShapeLayer
好きなパスで を作成し、イメージを として使用しますfillColor
。
スウィフト 2.2:
let path = UIBezierPath(...) // Create your path
let layer = CAShapeLayer()
layer.path = path.CGPath
let image = UIImage(named: "image") // Assign your image
layer.fillColor = UIColor(patternImage: image!).CGColor
スウィフト 3:
let path = UIBezierPath(...) // Create your path
let layer = CAShapeLayer()
layer.path = path.cgPath
let image = UIImage(named: "image") // Assign your image
layer.fillColor = UIColor(patternImage: image!).cgColor
最初はこのアプローチの方が簡単だと思うかもしれませんが、画像がシェイプを塗りつぶす方法を制御することは簡単ではありません。