添加自定义 UIView class 到自定义 UICollectionViewCell 有不同的结果
Adding custom UIView class to custom UICollectionViewCell have different results
这可能不是最好的实施方式,所以我愿意接受其他建议。
我想创建一个 UICollectionView
,它有一个自定义的 UIView
画一个圆(类似于手表的 Activity 圆。我遇到的问题是,在每个 cell
在第一个显示的(必须滚动)之后,圆圈被绘制在左上角的圆圈而不是居中,大小错误,我不确定我需要更改什么。
UIView
class
let shapeLayer = CAShapeLayer()
override func draw(_ rect: CGRect) {
var path = UIBezierPath()
path = UIBezierPath(arcCenter: self.center, radius: (self.frame.height / 2)-10, startAngle: -CGFloat.pi / 2, endAngle: (2 * CGFloat.pi - CGFloat.pi / 2), clockwise: true)
shapeLayer.path = path.cgPath
shapeLayer.lineWidth = 6
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.lineCap = .round
shapeLayer.strokeEnd = 0
self.layer.addSublayer(shapeLayer)
}
func setProgress(progress: NSNumber) {
let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
basicAnimation.toValue = progress
basicAnimation.duration = 1
basicAnimation.fillMode = .forwards
basicAnimation.isRemovedOnCompletion = false
shapeLayer.add(basicAnimation, forKey: "setProgress")
}
func setColor(color: UIColor) {
shapeLayer.strokeColor = color.cgColor
}
UICollectionViewCell
@IBOutlet weak var view: CustomViewClass!
var key: String!
我使用故事板将 CustomViewClass
连接到 UIView。
您正在 override func draw(_ rect: CGRect) {
中绘制圆,在创建或显示视图时调用一次。那时框架(原点,大小)还没有通过自动布局计算出来。
在 cell for row atIndex
中设置单元格时需要再次 re-draw 圆圈。
这可能不是最好的实施方式,所以我愿意接受其他建议。
我想创建一个 UICollectionView
,它有一个自定义的 UIView
画一个圆(类似于手表的 Activity 圆。我遇到的问题是,在每个 cell
在第一个显示的(必须滚动)之后,圆圈被绘制在左上角的圆圈而不是居中,大小错误,我不确定我需要更改什么。
UIView
class
let shapeLayer = CAShapeLayer()
override func draw(_ rect: CGRect) {
var path = UIBezierPath()
path = UIBezierPath(arcCenter: self.center, radius: (self.frame.height / 2)-10, startAngle: -CGFloat.pi / 2, endAngle: (2 * CGFloat.pi - CGFloat.pi / 2), clockwise: true)
shapeLayer.path = path.cgPath
shapeLayer.lineWidth = 6
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.lineCap = .round
shapeLayer.strokeEnd = 0
self.layer.addSublayer(shapeLayer)
}
func setProgress(progress: NSNumber) {
let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
basicAnimation.toValue = progress
basicAnimation.duration = 1
basicAnimation.fillMode = .forwards
basicAnimation.isRemovedOnCompletion = false
shapeLayer.add(basicAnimation, forKey: "setProgress")
}
func setColor(color: UIColor) {
shapeLayer.strokeColor = color.cgColor
}
UICollectionViewCell
@IBOutlet weak var view: CustomViewClass!
var key: String!
我使用故事板将 CustomViewClass
连接到 UIView。
您正在 override func draw(_ rect: CGRect) {
中绘制圆,在创建或显示视图时调用一次。那时框架(原点,大小)还没有通过自动布局计算出来。
在 cell for row atIndex
中设置单元格时需要再次 re-draw 圆圈。