- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 NSCollectionView 和 NSCollectionViewItems。
我遇到了以下问题:如果我旋转其中一项的 NSImageView,然后调用 reloadData,更新的 View 会被搞砸。旋转会跳到下一个项目,角度会不同等等。
图片和代码如下:
旋转代码:
let collectionViewItem = collectionView.item(at: ip) as? LibraryViewItem
collectionViewItem?.imageView?.rotate(byDegrees: CGFloat(degree))
collectionViewItem?.model?.Rotation! += degree
collectionViewItem.reloadData()
型号:
class LibraryViewItem: NSCollectionViewItem {
// 1
var model: ImageModel? {
didSet {
guard isViewLoaded else {
print("asd")
return }
if let imageFile = model {
imageView?.image = imageFile.thumbnail
textField?.stringValue = imageFile.fileName
} else {
imageView?.image = nil
textField?.stringValue = ""
}
}
}
// 2
override func viewDidLoad() {
super.viewDidLoad()
view.wantsLayer = true
view.layer?.backgroundColor = NSColor.white.cgColor
// 1
view.layer?.borderWidth = 0.0
// 2
view.layer?.borderColor = NSColor.lightGray.cgColor
}
func setHighlight(_ selected: Bool) {
view.layer?.borderWidth = selected ? 5.0 : 0.0
}
委托(delegate)方法:
func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
let item = collectionView.makeItem(withIdentifier: "LibraryViewItem", for: indexPath)
guard let collectionViewItem = item as? LibraryViewItem else {return item}
let libraryModel = itemsToShow[indexPath.item]
collectionViewItem.model = libraryModel
if let selectedIndexPath = collectionView.selectionIndexPaths.first, selectedIndexPath == indexPath {
collectionViewItem.setHighlight(true)
} else {
collectionViewItem.setHighlight(false)
}
return item
}
最佳答案
NSCollectioViewItem
被重用以通过避免项目实例化来提高性能。
NSCollectioViewItem
有一个名为 prepareForReuse()
的方法在重新使用该项目之前调用。
要解决您的问题,请覆盖 prepareForReuse()
并在您的自定义实现中(重新)将图像旋转设置为零度。
此外,不要在旋转代码之后调用 collectionViewItem.reloadData()
。
关于swift - 重新加载数据后 NSCollectionViewItem 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42345912/
如何通过再次单击 NSCollectionViewItem 来取消选择它? 这是我用于选择和取消选择的代码: func collectionView(collectionView: NSCollect
我正在尝试设置一个 NSCollectionView,它在各个 NSCollectionViewItem View 中具有自定义绘图。我需要在每个 View 中绘制一个图像,但无法将该 View 链接
简单的问题,但我找不到任何答案...如何更改 NSCollectionViewItem 实例的角半径? 最佳答案 NSCollectionViewItem 的 view 默认没有图层。你需要设置wan
我有一个绑定(bind)到 NSCollectionView 的 NSArrayController。我的数据模型是一个类 Person。 Inside Person 是一个计时器,每秒都会更改 ag
我正在尝试为我的 NSCollectionViewItem 提供动态大小。我希望它们的大小由它们的内容和我定义的约束决定。 为此,我已将以下内容添加到包含 NSCollectionView 的 Vie
我在这里有点迷路:我创建了一个像 colorPicker 一样的按钮:单击它会在弹出窗口中显示一个 collectionView。我首先使用包含 View + collectionView(嵌入为 s
我想在 NSCollectionViewItem 的 View 中放置一个自定义控件。 假设我有一个名为 BoxesView 的自定义 NSView。BoxesView 只是一个在其 View 中绘制
我是 Cocoa 开发的新手,它的很多概念我都不清楚......我正在尝试构建一个简单的应用程序,它将使用 Flickr API 检索用户照片集并将其显示在 NSCollectionView 中,通过
我觉得这是一个简单的任务,但我似乎无法让它发挥作用。我正在尝试使用带有自定义项目的 NSCollectionView 。我向该项目的自定义 View 添加了另一个 NSImageView,并对该 Vi
我正在尝试创建一个 NSCollectionView,其中的项目适应可用空间,而不是为项目定义固定大小并相应地调整 NSCollectionView 的大小。 我无法找到使用 NSCollection
我正在尝试构建一个充满多个可编辑 TextView 的 NSCollectionView。 (Swift 中的 OS X 应用程序。)我的 NSCollectionViewItem 子类称为 Note
我正在尝试以编程方式创建一个简单的 NSCollectionView。我在 NSViewController 中设置它: class ViewController: NSViewController
我正在使用 NSCollectionView 和 NSCollectionViewItems。 我遇到了以下问题:如果我旋转其中一项的 NSImageView,然后调用 reloadData,更新的
我正在编写一个非常简单的 macOS 应用程序,我想在 Collection View 中显示一些图像。对于它们的显示方式,我不需要任何特殊行为。 docs for NSCollectionViewI
我有一个问题。如何将鼠标右键菜单添加到 NSCollectionViewItem。作为尝试,我还使用了 Apple 的演示应用程序 IconCollection。我尝试将 NSMenu 拖到 Icon
在我的设置中,我有一个连接到 Mac 的卷的 NSCollectionView。对于 NSCollectionViewItem 的 View ,我有一个 NSBox,其中有一个 NSTableView
我在 NSCollectionViewItem 的 View 上有一个 NSTextField。 当您单击 NSCollectionViewItem 时,该项目将被选中。 当您单击 NSTextFie
我一直在努力尝试创建一个 NSCollectionView,它具有一组带有自定义 View 的 NSCollectionViewItems。当项目 View 上的控件是标准 AppKit 控件时,代码
我的自定义 NSView 中有一个 NSTabView,用作 NSCollectionView 的原型(prototype)。在第二个选项卡中,我有 NSButton 按钮和 NSImageView
override func viewDidLoad() { super.viewDidLoad() // Do view setup here. let item = NSNi
我是一名优秀的程序员,十分优秀!