CAShapeLayer 中图像的 StackView
StackView of images in CAShapeLayer
我正在尝试构建一个有点圆形的图像路径(类似于下面发布的图像)。我不确定如何处理这个问题,我最初的想法是使用 CAShapeLayer 绘制圆形部分,但不确定如何处理图像。有没有更简单的方法来实现椭圆形?
好吧,一种方法是使用小三角。基本上,我们会制作一个大圆圈以供参考,并在圆周上放置一些较小的圆圈,等距放置在我们选择的给定开始和结束角度之间,这样它们就会按照我们喜欢的方式散开。
这里有一些可以帮助您入门的内容:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let c = UIView(frame: CGRect(x: 0, y: 0, width: 600, height: 600))
let radius = c.bounds.width/2
c.layer.cornerRadius = radius
c.backgroundColor = .darkGray
self.view.addSubview(c)
c.center = CGPoint(x: 0, y: self.view.bounds.midY)
let startAngle: CGFloat = 50
let endAngle = 180 - startAngle
let n = 6
let delta = (endAngle-startAngle)/CGFloat(n-1)
var degrees: CGFloat = startAngle
degrees -= delta
for _ in 0..<n {
degrees += delta
let v = UIView(frame: CGRect(x: 0, y: 0, width: 60, height: 60))
v.layer.cornerRadius = v.bounds.width/2
v.backgroundColor = UIColor.green.withAlphaComponent(0.5)
c.addSubview(v)
v.center = CGPoint(x: c.bounds.midX, y: c.bounds.midY)
v.center.y -= radius*cos(degrees*CGFloat.pi/180)
v.center.x += radius*sin(degrees*CGFloat.pi/180)
}
}
}
如果你想要更椭圆的形状,可以使用更大的参考圆,并将角度范围调整得更窄。并添加此代码以定位参考圆:
let d = radius - self.view.bounds.width
let padding: CGFloat = 50
if d > 0 {
c.frame.origin.x -= d+padding
}
像这样:
这是您的设计,其中包含以上 2 张图片,以显示曲线的差异。每个图像的第一个和最后一个圆圈都在同一个位置,但曲线路径不同。您的设计在这两者之间有一条曲线路径,因此使用正确的参考圆尺寸,您可以获得几乎精确的曲线路径。
我正在尝试构建一个有点圆形的图像路径(类似于下面发布的图像)。我不确定如何处理这个问题,我最初的想法是使用 CAShapeLayer 绘制圆形部分,但不确定如何处理图像。有没有更简单的方法来实现椭圆形?
好吧,一种方法是使用小三角。基本上,我们会制作一个大圆圈以供参考,并在圆周上放置一些较小的圆圈,等距放置在我们选择的给定开始和结束角度之间,这样它们就会按照我们喜欢的方式散开。
这里有一些可以帮助您入门的内容:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let c = UIView(frame: CGRect(x: 0, y: 0, width: 600, height: 600))
let radius = c.bounds.width/2
c.layer.cornerRadius = radius
c.backgroundColor = .darkGray
self.view.addSubview(c)
c.center = CGPoint(x: 0, y: self.view.bounds.midY)
let startAngle: CGFloat = 50
let endAngle = 180 - startAngle
let n = 6
let delta = (endAngle-startAngle)/CGFloat(n-1)
var degrees: CGFloat = startAngle
degrees -= delta
for _ in 0..<n {
degrees += delta
let v = UIView(frame: CGRect(x: 0, y: 0, width: 60, height: 60))
v.layer.cornerRadius = v.bounds.width/2
v.backgroundColor = UIColor.green.withAlphaComponent(0.5)
c.addSubview(v)
v.center = CGPoint(x: c.bounds.midX, y: c.bounds.midY)
v.center.y -= radius*cos(degrees*CGFloat.pi/180)
v.center.x += radius*sin(degrees*CGFloat.pi/180)
}
}
}
如果你想要更椭圆的形状,可以使用更大的参考圆,并将角度范围调整得更窄。并添加此代码以定位参考圆:
let d = radius - self.view.bounds.width
let padding: CGFloat = 50
if d > 0 {
c.frame.origin.x -= d+padding
}
像这样:
这是您的设计,其中包含以上 2 张图片,以显示曲线的差异。每个图像的第一个和最后一个圆圈都在同一个位置,但曲线路径不同。您的设计在这两者之间有一条曲线路径,因此使用正确的参考圆尺寸,您可以获得几乎精确的曲线路径。