如果我想实现iPhone类型的图标管理,大小图标都可以拖动和删除,我应该怎么做?我试过使用UICollectionview,但似乎没有达到预期的效果。因为这些图标大小不一,应该用什么布局?当大图标向小图标移动时,如何计算周围的小图标,并将四个小图标的位置与大图标交换?
e5njpo681#
您可以通过UICollectionview实现图标管理,具体操作如下:
1.使用UICollectionview显示图标。1.由于图标的大小不同,因此可以使用UICollectionviewFlowLayout来排列图标。UICollectionviewFlowLayout使您可以在网格布局中对齐图标。1.当一个大图标移向小图标时,需要计算周围的小图标并交换它们的位置。实现UICollectionviewDelegate的collectionView(_:moveItemAt:to:)方法来交换大图标和小图标的位置。更新显示以反映更改后的图标排列。1.要实现拖拽删除功能,需要开启UICollectionview的dragInteractionEnabled属性,并实现collectionView(_:itemsForBeginning:at:)方法,指定可以拖拽删除的图标,指定好要拖拽删除的图标后,再对拖拽的图标进行相应的删除处理。通过遵循上述步骤,您可以使用UICollectionview实现图标管理。
v2g6jxz62#
您可以通过使用UICollectionView来实现您的目标。但是,Compositional Layout可能更容易使用(而不是流布局)因为它不需要你提供视图中每个图标的确切大小。你可以提供估计值。你可能也会发现this library很有用,因为它进一步简化了组合布局的实现。你可以通过创建一个枚举来使用这个库,并定义像这样的例子:
import UIKitimport Composureenum LayoutSections: Int, CaseIterable, DefinesCompositionalLayout { //list the number of sections in your layout. in this example //there are 2 sections with different layout requirements. case section1 case section2 func layoutInfo(using layoutEnvironment: NSCollectionLayoutEnvironment) -> CompositionalLayoutOption { switch self { case .section1: return .fixedWidthDynamicHeight(fixedWidth: 180, estimatedHeight: 75) case .section2: return .dynamicWidthDynamicHeight(estimatedWidth: 150, estimatedHeight: 150) } }}
import UIKit
import Composure
enum LayoutSections: Int, CaseIterable, DefinesCompositionalLayout {
//list the number of sections in your layout. in this example
//there are 2 sections with different layout requirements.
case section1
case section2
func layoutInfo(using layoutEnvironment: NSCollectionLayoutEnvironment) -> CompositionalLayoutOption {
switch self {
case .section1:
return .fixedWidthDynamicHeight(fixedWidth: 180, estimatedHeight: 75)
case .section2:
return .dynamicWidthDynamicHeight(estimatedWidth: 150, estimatedHeight: 150)
}
字符串然后在集合视图所在的视图控制器中,您将生成如下布局:
import UIKitimport Composureclass MyViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //... //generate the compositional layout with one line of code collectionView.collectionViewLayout = generateCompositionalLayout(with: LayoutSections.allCases) }}
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//...
//generate the compositional layout with one line of code
collectionView.collectionViewLayout = generateCompositionalLayout(with: LayoutSections.allCases)
型如果要对集合视图中的项进行重新排序,则数据源必须实现collectionView(_:moveItemAt:to:)。如文档所述,如果不实现此方法,则无法对集合视图中的项进行重新排序。最后,如果你想在集合视图中支持拖放效果,你必须实现UICollectionViewDragDelegate协议中指定的函数。
2条答案
按热度按时间e5njpo681#
您可以通过UICollectionview实现图标管理,具体操作如下:
1.使用UICollectionview显示图标。
1.由于图标的大小不同,因此可以使用UICollectionviewFlowLayout来排列图标。UICollectionviewFlowLayout使您可以在网格布局中对齐图标。
1.当一个大图标移向小图标时,需要计算周围的小图标并交换它们的位置。实现UICollectionviewDelegate的collectionView(_:moveItemAt:to:)方法来交换大图标和小图标的位置。更新显示以反映更改后的图标排列。
1.要实现拖拽删除功能,需要开启UICollectionview的dragInteractionEnabled属性,并实现collectionView(_:itemsForBeginning:at:)方法,指定可以拖拽删除的图标,指定好要拖拽删除的图标后,再对拖拽的图标进行相应的删除处理。
通过遵循上述步骤,您可以使用UICollectionview实现图标管理。
v2g6jxz62#
您可以通过使用UICollectionView来实现您的目标。但是,Compositional Layout可能更容易使用(而不是流布局)因为它不需要你提供视图中每个图标的确切大小。你可以提供估计值。你可能也会发现this library很有用,因为它进一步简化了组合布局的实现。你可以通过创建一个枚举来使用这个库,并定义像这样的例子:
字符串
然后在集合视图所在的视图控制器中,您将生成如下布局:
型
如果要对集合视图中的项进行重新排序,则数据源必须实现collectionView(_:moveItemAt:to:)。如文档所述,如果不实现此方法,则无法对集合视图中的项进行重新排序。
最后,如果你想在集合视图中支持拖放效果,你必须实现UICollectionViewDragDelegate协议中指定的函数。