我在处理自定义日历时遇到了困难。每天都在一个内Array
,然后放入定制CollectionViewCells
中。
在当天的单元格内,我想放置一种“标记”(我UIProgressBar
为此使用 a)来显示当天的进度。表示在今天中午,UIProgressBar
应该是 0.5 等等。
为了处理这个问题,我有以下函数,它返回一个带一位小数的浮点数,以便在UIProgressBar
:
func getPercentage() -> Float {
var cal = Calendar(identifier: .gregorian)
cal.timeZone = TimeZone(abbreviation: "UTC")!
let hours = cal.component(.hour, from: Date())
let minutes = cal.component(.minute, from: Date())
let allHours = Float(hours) + (Float(minutes) / 60)
let result = round((allTimeInHours / 24) * 10) / 10
return allTimeInPercent
}
在cellForItemAt indexPath
即时消息中检查单元格是否是今天的单元格,如果是这种情况,我将调用该getPercentage()
方法以相应地UIProgressBar
在单元格内设置:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MyCollectionViewCell.identifier, for: indexPath) as! MyCollectionViewCell
//other functionality + cell-setup
if dateArray[indexPath.item] == todayAsDate() {
cell.progressBar.isHidden = false
cell.progressBar.progress = getPercentageOfDay()
} else {
cell.progressBar.isHidden = true
}
return cell
}
到目前为止一切正常,看起来像这样:
但是,每当我转到主屏幕然后返回应用程序时,UIProgressBar
总是设置为 1.0。
通过 AppSwitcher 完全关闭应用程序并重新启动应用程序后,一切正常。
我猜有一个问题,因为我使用dequeueReusableCells
但我并没有真正落后。我不知道 1.0UIProgressBar
来自哪里,即使我更改了情节提要中的默认值,结果也是一样的。
此外,如果有人建议使用其他东西,而不是UIProgressBar
我对任何想法持开放态度。实际上,我更愿意让垂直线根据一天中的时间从左到右移动。
我几乎是一个初学者,很高兴有任何提示!:)