iOS - 将 CAGradientLayer 集中到父 UIView
Posted
技术标签:
【中文标题】iOS - 将 CAGradientLayer 集中到父 UIView【英文标题】:iOS - centralizing CAGradientLayer into parent UIView 【发布时间】:2017-06-29 19:25:04 【问题描述】:我有一个bgLayer: CAGradientLayer
尺寸更大然后它是父视图bgView
。使用bgView.layer.insertSublayer
正确插入了图层,但我无法使用较小的bgView
集中创建bgLayer
的框架。
如何将我的bgLayer
集中到我的bgView
中?
【问题讨论】:
【参考方案1】:我相信这就是你的意思......
以较小的 UIView 为中心的较大渐变视图。第一张图片是.clipsToBounds = true
,第二张图片是.false.
:
两个图像使用相同的视图大小:100 x 100
和相同的渐变大小:150 x 150
。您可以将此代码粘贴到 Playground 页面中以查看其工作原理。
import UIKit
import PlaygroundSupport
let container = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
container.backgroundColor = UIColor(red: 0.3, green: 0.5, blue: 1.0, alpha: 1.0)
PlaygroundPage.current.liveView = container
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
// 150 x 150 frame for the gradient layer
let gFrame = CGRect(x: 0, y: 0, width: 150, height: 150)
// 100 x 100 frame for the View
let vFrame = CGRect(x: 100, y: 100, width: 100, height: 100)
let v = UIView(frame: vFrame)
self.view.addSubview(v)
// add a border to the UIView so we can see its frame
v.layer.borderWidth = 2.0
// set up the Gradient Layer
let gradient = CAGradientLayer()
gradient.colors = [UIColor.red.cgColor,UIColor.yellow.cgColor]
gradient.locations = [0.0, 1.0]
gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
gradient.endPoint = CGPoint(x: 1.0, y: 1.0)
// set the initial size of the gradient frame
gradient.frame = gFrame
// center the gradient frame over (or inside, if smaller) the view frame
gradient.frame.origin.x = (v.frame.size.width - gradient.frame.size.width) / 2
gradient.frame.origin.y = (v.frame.size.height - gradient.frame.size.height) / 2
// add the gradient layer to the view
v.layer.insertSublayer(gradient, at: 0)
// set to true to clip the gradient layer
// set to false to allow the gradient layer to extend beyond the view
v.clipsToBounds = true
let vc = ViewController()
container.addSubview(vc.view)
【讨论】:
太棒了!我对将它们都居中的公式感到困惑。以上是关于iOS - 将 CAGradientLayer 集中到父 UIView的主要内容,如果未能解决你的问题,请参考以下文章
CAGradientLayer:其他 UIObjects 没有出现
如何在 iOS swift 运行时更新 CAGradientLayer 颜色?
使用编程约束时如何将 CAGradientLayer 添加到 UIView