gpt4 book ai didi

ios - UICollectionView 从 NSAttributedString 图像滚动时滞后/断断续续

转载 作者:行者123 更新时间:2023-11-28 06:03:35 34 4
gpt4 key购买 nike

我正在制作一个简单的应用程序,允许用户每天写一两句话来描述他们的一天。

我有一个 UICollectionView 将每一天显示为一个单元格。在该单元格中,有一个 UITextView,用户可以在其中输入文本。他们输入的文本保存在核心数据中。

每个单元格都使用用户输入的文本(从 Core Data 获取)填充 UITextView。但是,如果用户当天没有输入文本,则 UITextView 会填充一个 NSAttributedString,其中包含一个图像和一个字符串,以鼓励用户输入文本。

问题是带有 NSAttributedString 的单元格导致 CollectionView 滚动非常滞后和不稳定。

导致延迟的具体原因是 NSAttributedString 中的图像。图片来自xcassets。

那么我怎样才能在多个单元格上使用相同的图像(在 NSAttributedString 中)而不出现滚动延迟?

我遇到的可能的解决方案:

  1. 异步预取或加载图像 但是我的图像在 xcassets 中。当您从某处获取/下载图像时,异步加载不是吗?
  2. 缓存图像但是您将如何缓存来自 xcassets 的图像?

ViewController.swift

    override func viewWillAppear(_ animated: Bool) {
collectionView.delegate = self
super.viewWillAppear(animated)
collectionView.setNeedsLayout()
collectionView.layoutIfNeeded()
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return dates.count
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let cellSize = CGSize(width: round(UIScreen.main.bounds.width * 0.8125), height: 469)
return cellSize
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell
cell.fetchedResultsController = fetchedResultsController
cell.date = dates[indexPath.item]
return cell
}

CollectionViewCell.swift

    @IBOutlet var textView: UITextView!

var date = Date() {
didSet {
loadTextViewData()
}
}

required init?(coder decoder: NSCoder) {
super.init(coder: decoder)!
self.setNeedsLayout()
self.layoutIfNeeded()
}

func loadTextViewData(){
let entity = CoreDataMethods.fetchEntity(date: date)

if (entity != nil){
textView.attributedText = NSAttributedString(string:entity?.value(forKey: "textViewEntry") as! String)
} else {
loadPromptText()
}
}

func loadPromptText(){
let style = NSMutableParagraphStyle()
style.lineSpacing = 10
style.alignment = .center

textView.attributedText = NSAttributedString(string: "Tap here to enter!" , attributes: [NSAttributedStringKey.paragraphStyle : style, NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 16.0)!])

let attributedString = NSMutableAttributedString(attributedString:textView.attributedText )

let textAttachment = NSTextAttachment()
textAttachment.image = #imageLiteral(resourceName: "EditIcon")
textAttachment.image = UIImage(cgImage: textAttachment.image!.cgImage!, scale: CGFloat(7.0), orientation: .up)

let attrStringWithImage = NSAttributedString(attachment: textAttachment)
attributedString.append(attrStringWithImage)

textView.attributedText = attributedString;
}

最佳答案

我的 Collection View 也有同样的问题,我通过禁用 Storyboard中的 Collection View Prefetch 来修复它,就像这样 enter image description here

关于ios - UICollectionView 从 NSAttributedString 图像滚动时滞后/断断续续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48857435/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com