UIViewのborderColorをグラデーションにしたい。
10918 ワード
うまいやり方全然わかなないのでどなたか教えてください・・・
やったこと
①ViewのlayerにCAGradientLayerをMaskしたものを追加する
let color: [UIColor] = [.yellow, .cyan]
let gradientLayer = CAGradientLayer()
gradientLayer.bounds.size = CGSize(width: 200, height: 200)
gradientLayer.position = view.center
gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)
gradientLayer.colors = color.map { $0.cgColor }
view.layer.addSublayer(gradientLayer)
let maskLayer = CAShapeLayer()
maskLayer.fillRule = kCAFillRuleEvenOdd
let path = UIBezierPath(ovalIn: gradientLayer.bounds.insetBy(dx: 4, dy: 4))
path.append(UIBezierPath(ovalIn: gradientLayer.bounds))
maskLayer.fillColor = UIColor.red.cgColor
maskLayer.path = path.cgPath
path.fill()
gradientLayer.mask = maskLayer
viewDidLoadに貼るとこんな感じ。
今回は上記の円形だったのでこれで解決したがアニメーションつけたり長方形にしたりするには一手間かかりそう。
②グラデーションのUIColorを作成しViewのborderColorに指定する。
Sketchみたいにborder色に直接グラデーションの色指定できたら楽なので
そもそもUIColor.gradientみたいなものはないのかなーって調べたら
下記コードのようなものを発見した。
func colorWithGradient(size: CGSize, colors: [UIColor]) -> UIColor {
let backgroundGradientLayer = CAGradientLayer()
backgroundGradientLayer.frame = CGRect(origin: .zero, size: size)
backgroundGradientLayer.colors = colors.map { $0.cgColor }
UIGraphicsBeginImageContext(size)
backgroundGradientLayer.render(in: UIGraphicsGetCurrentContext()!)
let backgroundColorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return UIColor(patternImage: backgroundColorImage!)
}
let label = UILabel()
label.text = "gradation border"
label.textColor = .lightGray
label.textAlignment = .center
label.bounds.size = CGSize(width: 200, height: 40)
label.center = view.center
label.layer.borderColor = colorWithGradient(size: CGSize(width: 200, height: 40), colors: [.cyan, .magenta]).cgColor
label.layer.borderWidth = 2
label.layer.cornerRadius = 20
view.addSubview(label)
これとかちゃんと読めばわかるかもしれないけど、ちょっと時間かかりそう・・
Author And Source
この問題について(UIViewのborderColorをグラデーションにしたい。), 我々は、より多くの情報をここで見つけました https://qiita.com/abouch/items/4fe1657255b8d2aba0c0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .