首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAShapeLayer -界

CAShapeLayer -界
EN

Stack Overflow用户
提问于 2016-05-31 13:27:48
回答 1查看 490关注 0票数 0

您必须设置CAShapeLayer的界限吗?

我正在创建一个形状层,并通过一个UIBezierPath为它分配一个路径,形状是视图大小的一个简单的圆圈。

我没有在层上设置任何positionbounds,这是错误的吗?

代码语言:javascript
复制
class View: UIView {
...

var backgroundLayer: CAShapeLayer!

func setup() {
    // call from init
    backgroundLayer = CAShapeLayer()
    backgroundLayer.strokeColor = UIColor.redColor()
    backgroundLayer.lineWidth = 3
    backgroundLayer.fillColor = UIColor.clearColor().CGColor
    layer.addSublayer(backgroundLayer)
    ...
}

override func layoutSubviews() {
    super.layoutSubviews()
    backgroundLayer?.path = circlePath(100)
    ...
}

func circlePath(progress: Int) -> CGPath {
    let path = UIBezierPath()
    let inverseProgress = 1 - CGFloat(progress) / 100
    let endAngleOffset = CGFloat(2 * M_PI) * inverseProgress
    path.addArcWithCenter(localCenter, radius: radius, startAngle: CGFloat(-M_PI), endAngle: CGFloat(M_PI) - endAngleOffset, clockwise: true)
    return path.CGPath
}

...
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 14:29:16

正如您已经看到的,即使没有设置界限,该层也会显示得很好。因此,您不必“必须”设置它,但是在执行布局或转换时,没有一个边界(或者有一个与路径的边界框不同的边界)有时会让人感到困惑。

当涉及布局、定位和转换时,需要考虑几个不同的坐标。

  1. 该层的位置相对于其父坐标系
  2. 路径相对于形状层的坐标系进行定位
  3. 路径中的每个点相对于路径的原点(0,0)。

形状层相对于其中心进行变换,形状层的位置也在其边界的中心。这意味着如果形状层没有边界(0×0)大小,那么任何转换(例如旋转)都发生在路径(0,0)的原点附近,而不是路径的中心。这也意味着当设置形状层的位置时,一个是在概念上定位路径的起源,而不是路径的中心。但是,如果路径的起源恰好是路径边界框的中心(例如,以(0,0)为中心的圆圈),那么这实际上不是一个问题。

因此,概括一下:您不需要设置界限,但有时(取决于路径)定位或转换在设置时可能会更清楚。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37547128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档