2016-12-07 8 views
11

質問:斜めの勾配でCAShapeLayerを塗りつぶす方法は?

私は勾配でと 45度の角度にCAShapeLayer()を埋めるにはどうすればよいですか?例えば

は、画像1に、以下のコードは、四角形を描画し、青色層(UIColor.blueColor().CGColor)を充填します。私は画像2UIColor.redColor().CGColorにすなわちUIColor.blueColor().CGColor)のように青から赤に45度の角度の勾配でそれを埋めるんか

しかし、?

コード:startPointendPoint特性を有するCAGradientLayerを使用しないのはなぜ

let path = UIBezierPath() 
path.moveToPoint(CGPoint(x: 0, y: 0)) 
path.addLineToPoint(CGPoint(x: 0, y: 100)) 
path.addLineToPoint(CGPoint(x: 100, y: 100)) 
path.addLineToPoint(CGPoint(x: 100, y: 0)) 
path.closePath() 

let shape = CAShapeLayer() 
shape.path = path.CGPath 
shape.fillColor = UIColor.blueColor().CGColor 

enter image description here

答えて

15

。あなたが行うことができます

import UIKit 
import PlaygroundSupport 

let frame = CGRect(x: 0, y: 0, width: 100, height: 100) 
let view = UIView(frame: frame) 

PlaygroundPage.current.liveView = view 

let path = UIBezierPath(ovalIn: frame) 

let shape = CAShapeLayer() 
shape.frame = frame 
shape.path = path.cgPath 
shape.fillColor = UIColor.blue.cgColor 

let gradient = CAGradientLayer() 
gradient.frame = frame 
gradient.colors = [UIColor.blue.cgColor, 
        UIColor.red.cgColor] 
gradient.startPoint = CGPoint(x: 0, y: 1) 
gradient.endPoint = CGPoint(x: 1, y: 0) 
gradient.mask = shape 

view.layer.addSublayer(gradient) 

enter image description here

注:それは正方形のためにマスクをせずに動作しますので、サークルのためのベジエパスを追加しました。

+1

私はコードと結果の画像を示す遊び場のスクリーンショットが好きです。ニースタッチ(投票)。なぜ、プレイグラウンドのコード全体を提供しないのですか?このようにして、読者は実行中のコードを単純なコピーペーストと期限切れで再現できます。 –

+0

私はそれについて考えましたが、これはアプリ用であると仮定し、アプリに貼り付ける部分を提供しました。 – Alistra

+0

SOの投稿は、元のSO以上のものに役立つことを覚えておいてください。他の人(私のような人)が来て、あなたが投稿したコードから作業する/学びたいと思っています。私は「Cool」と思っていました。グラデーションレイヤーを使った遊び場です。サークル内のグラデーションを回転させる回転アニメーションを追加するのは楽しいでしょう...」しかし、あなたのコードはテキストではなく画像でした。私はそのような多くの入力のように落ちなかったので、不器用な人への衝動は死んだ。 –

1

は、私はそれが左上にある第二の色に右下の最初の色である

shape.startPoint = CGPoint(x: 1.0, y: 0.0) 
shape.endPoint = CGPoint(x: 0.0, y: 1.0) 

、だと思います。あなたは右上と左下にある第二の色で最初の色をしたい場合は、右下の

shape.startPoint = NSMakePoint(x: 0.0, y: 1.0) 
shape.endPoint = NSMakePoint(x: 1.0, y: 0.0) 
の左上、第二の色で

shape.startPoint = CGPoint(x: 1.0, y: 1.0) 
shape.endPoint = CGPoint(x: 0.0, y: 0.0) 

まず色を持っている必要があります

左下の最初の色、右上の2番目の色

shape.startPoint = CGPoint(x: 0.0, y: 0.0) 
shape.endPoint = CGPoint(x: 1.0, y: 1.0) 
関連する問題