4 가지 색상으로 그라디언트 레이어를 만들고 싶습니다. 그라디언트에 대한 스케치 파일이 있습니다. 색상 멈춤 좌표가 있습니다. CAGradientLayer의 시작점과 끝점에 대한 정규화 된 좌표를 계산했습니다. 또한 색상이 서로 바뀌는 위치를 계산했습니다. 여전히 레이어가 스케치 이미지와 일치하지 않습니다. 잘못 될 수있는 일을 도와 주실 수 있습니까? 레이어를 애니메이션으로 다른 그라디언트 위치로 변경해야하기 때문에 내 보낸 이미지의 사용은 옵션이 아닙니다.CAGradientLayer로 스케치 그라디언트를 재현하는 올바른 방법
let imageWidth: CGFloat = 375.0
let imageHeihgt: CGFloat = 293.0
class ViewController: UIViewController {
let homeColors: [UIColor] = [UIColor(red: 62/255, green: 131/255, blue: 255/255, alpha: 1.0),
UIColor(red: 99/255, green: 22/255, blue: 203/255, alpha: 1.0),
UIColor(red: 122/255, green: 5/255, blue: 239/255, alpha: 1.0),
UIColor(red: 122/255, green: 5/255, blue: 240/255, alpha: 1.0)]
let startPoint: CGPoint = CGPoint(x: -0.225/imageWidth*UIScreen.main.bounds.width, y: -0.582*imageHeihgt/UIScreen.main.bounds.height)
let endPoint: CGPoint = CGPoint(x: 1.088/imageWidth*UIScreen.main.bounds.width, y: 1.01*imageHeihgt/UIScreen.main.bounds.height)
let locations: [NSNumber] = [0.0, 0.734, 0.962, 1.0]
var subview: UIView!
override func viewDidLoad() {
super.viewDidLoad()
subview = UIView(frame: CGRect(x: 0, y: 20, width: imageWidth, height: imageHeihgt))
view.addSubview(subview)
view.sendSubview(toBack: subview)
addGradientLayer()
}
func addGradientLayer() {
let gradient = CAGradientLayer()
gradient.frame = subview.bounds
gradient.colors = homeColors.map { $0.cgColor }
gradient.startPoint = startPoint
gradient.endPoint = endPoint
gradient.locations = locations
subview.layer.insertSublayer(gradient, at: 0)
}
}
차이점을 명확히하기 위해 몇 가지 스크린 샷을 첨부했습니다. 여전히 큰 차이는 아니지만 여전히 그렇습니다.
CAGradientLayer의 끝점이 스케치의 끝점과 일치하지 않는 것처럼 보입니다. CAGradientLayer에 대한 교육을받지 못했기 때문에 가능한지 또는 레이어 바깥으로 이동하지 말아야합니까? – yano