【发布时间】:2020-05-23 16:16:08
【问题描述】:
我知道有一些类似的问题,但就我而言,我想为我的图层设置cornerRadius = 8。
如果我设置:
shapeLayer.lineCap = CAShapeLayerLineCap.round
显示如下:
-> 与设计不符。
我的代码:
import Foundation
import UIKit
final class OnboardingCell: UICollectionViewCell {
@IBOutlet weak var boxView: UIView!
@IBOutlet weak var continueButton: UIButton!
@IBOutlet weak var progressView: UIView!
var onTap: (() -> Void)?
var levelProgress: CGFloat = 0.1 {
didSet {
fgLayer.strokeEnd = levelProgress
}
}
let bgLayer = CAShapeLayer()
let fgLayer = CAShapeLayer()
override func awakeFromNib() {
super.awakeFromNib()
setup()
configure()
}
override func layoutSubviews() {
super.layoutSubviews()
setupShapeLayer(shapeLayer: bgLayer)
setupShapeLayer(shapeLayer: fgLayer)
}
private func setup() {
bgLayer.lineWidth = 50
bgLayer.fillColor = nil
bgLayer.strokeStart = 470 / 1590 + 0.008
bgLayer.strokeEnd = 1
bgLayer.cornerRadius = 8
progressView.layer.addSublayer(bgLayer)
fgLayer.lineWidth = 50
fgLayer.fillColor = nil
fgLayer.strokeStart = 0
fgLayer.strokeEnd = 470 / 1590 - 0.008
progressView.layer.addSublayer(fgLayer)
}
private func configure() {
bgLayer.strokeColor = UIColor(rgb: 0xE3EDF7).cgColor
fgLayer.strokeColor = UIColor(rgb: 0x18D4F4).cgColor
}
private func setupShapeLayer(shapeLayer: CAShapeLayer) {
let linePath = UIBezierPath(arcCenter: CGPoint(x: progressView.bounds.midX, y: progressView.bounds.midY), radius: progressView.frame.height / 2, startAngle: 9/11 * CGFloat.pi, endAngle: 2/11 * CGFloat.pi, clockwise: true)
linePath.lineWidth = 10
shapeLayer.path = linePath.cgPath
}
override func draw(_ rect: CGRect) {
super.draw(rect)
boxView.addFloatEffect()
continueButton.addFloatEffectForButton()
bgLayer.addSankEffect()
fgLayer.addFloatEffect()
}
@IBAction func continueButtonTapped(_ sender: UIButton) {
onTap?()
}
}
【问题讨论】:
-
请分享您的代码
-
我刚刚更新了。
-
添加
bgLayer.masksToBounds = true -
我试过了,不行
标签: ios swift uibezierpath