如何在拖动 UICollectionViewCell 时实现透明背景或圆角

2024-03-14

我确定有must这是一种简单的方法,但我已经花了很长时间在各种兔子洞里,到目前为止还没有成功。

我有一个支持拖放的集合视图。被拖动的单元格有一个UIImageView in the contentView,并且图像视图的背衬层应用了角半径。单元格中所有视图的背景颜色都是清晰的。

拖动时,单元格具有白色背景,显示在图像视图的角落周围:

有没有办法使整个可拖动视图四舍五入;或者将其背景设置为清除,以便看不到烦人的白色边框?

UPDATE

事实证明解决方案is简单得令人尴尬(假设UIBezierPaths符合您对简单的定义):

您需要覆盖collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath)的方法UICollectionViewDragDelegate协议,并返回UIDragPreviewParameters设置适当的 UIBezierPath:

func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters? {
    let previewParams = UIDragPreviewParameters()

    let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 140, height: 140), cornerRadius: 20)
    previewParams.visiblePath = path

    return previewParams
}

这是一个简单的实现,它对CGRect从中导出贝塞尔路径 - 这适用于我的场景,因为所有单元格的大小相同。更复杂的集合视图需要一些自定义计算。


我认为这比那更容易。如果你的cell已经有一个带有圆角UIImageView的清晰背景,你只需要设置backgroundColor as .clear for UIDragPreviewParameters.

func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters? {
  let params = UIDragPreviewParameters()
  params.backgroundColor = .clear
  return params
}

编辑:根据要求,这是单元格的精简版本

final class MyCell: UICollectionViewCell {
  // MARK: Constants

  private enum Constants {
    static let cornerRadius = CGFloat(8)
  }

  // MARK: Views

  private let imageView: UIImageView = {
    let imageView = UIImageView()
    imageView.contentMode = .scaleAspectFill
    imageView.layer.masksToBounds = true
    imageView.layer.cornerRadius = Constants.cornerRadius
    imageView.translatesAutoresizingMaskIntoConstraints = false
    return imageView
  }()

  // MARK: Lifecycle

  override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
  }

  required init?(coder: NSCoder) {
    super.init(coder: coder)
    setup()
  }

  override func prepareForReuse() {
    super.prepareForReuse()
    imageView.image = nil
  }

  // MARK: Public

  func update(with image: UIImage) {
    imageView.image = image
  }

  // MARK: Private

  private func setup() {
    contentView.backgroundColor = .clear

    contentView.addSubview(imageView)

    NSLayoutConstraint.activate([
      imageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
      imageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
      imageView.topAnchor.constraint(equalTo: contentView.topAnchor),
      imageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
    ])
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在拖动 UICollectionViewCell 时实现透明背景或圆角 的相关文章

随机推荐

  • 共享存储库错误组

    我使用一个裸存储库 多个开发人员可以在其中推送 按照建议 我用了sharedRepository true告诉 git 给一组用户推送的权限 当我想添加推送者时 我只需将它们添加为所需的组作为辅助组 sudo adduser the pus
  • Tkinter,Windows:如何查看Windows任务栏中没有标题栏的窗口?

    我创建了一个窗口 root Tk 并删除了标题栏 root overrideredirect True 现在该窗口不在Windows 的任务栏上 如何在任务栏中显示它 如果其他窗口在我的上面 我只想将我的窗口放在前面 Tk 没有提供一种方法
  • PowerShell 找不到项目 - 带空格的路径 IOException

    ScriptingGamesBeginnerEvent8 PS1 ps1 ed wilson msft 8 21 2009 PS1 version of HSG 08 19 09 http bit ly 1d8Rww Param strin
  • 使用 MinGW 为 Windows 构建 Cairo(链接 libpng 的问题)

    我正在尝试建立cairo http www cairographics org 在 Windows 上使用 MinGW 和 MSYS 我正在按照说明进行操作为 Windows 编译 GTK 2 16 4 http kemovitra blo
  • 应用内购买陷入“缺少元数据”状态

    我正在尝试设置应用内购买 但我不知道如何摆脱如下所示的 丢失元数据 我从页面上看到的唯一黄点是 本地化 部分 但我完成了 显示名称 和 描述 我不知道我还能做什么或者我做错了什么 在此处添加应用程序的任何类型的屏幕截图 然后保存并提交 它应
  • PHP 中保持登录状态或用户登录时记住我的代码是什么

    我不知道如何编写 php 代码保持登录状态或记住我当用户登录时检查选项 我想让用户保持登录状态至少 60 分钟 直到用户关闭浏览器 PHP 中的代码是什么 如果您正在使用session http www php net manual en
  • Safari 的媒体记录 API 替代方案

    我需要通过浏览器从相机录制视频 我已经使用媒体记录 API 为 Chrome 和 Firefox 完成了此操作 var options mimeType video webm codecs vp9 mediaRecorder new Med
  • 将我的日历应用程序与其他日历同步

    我希望我的日历应用程序与其他日历应用程序 雅虎日历 Google 日历 iCloud 日历 Microsoft Exchange 和 Microsoft Outlook 实时同步 有什么办法可以做到吗 我知道我们可以为谷歌日历做到这一点 但
  • 创建 C++ 枚举和依赖数据结构时如何避免重复? [复制]

    这个问题在这里已经有答案了 可能的重复 枚举到字符串 如果无效 未找到 则返回枚举整数值 https stackoverflow com questions 10175260 enum to string return the enum i
  • 如何对数组进行分组

    我正在尝试使用相同的标签对相似的对象进行分组 目前 这是我收到的 JSON const sizes id value 2496 label XS value 2499 label S type First Size id value 286
  • 如何通过后台服务在android中每天的特定时间重复通知

    您好 我正在开发应用程序 我通过后台服务设置了用户输入日期和时间的通知 现在我想设置每天下午 6 点的通知 闹钟 询问用户是否要添加另一个条目 我怎样才能实现这个目标 我应该使用相同的后台服务还是广播接收器 请给我更好的解决方案 教程将是个
  • 如何在不配置浏览器的情况下构建本地 Web 代理

    Netnanny 或 k9 Web Protection 如何在不配置浏览器的情况下设置 Web 代理 如何做呢 直接使用WinSock 或者在NDIS http en wikipedia org wiki Network Driver I
  • ARM 模板数组参数

    我有一个带有 Web 应用程序警报规则的 ARM 模板 我希望能够在其中配置哪些电子邮件收到警报 电子邮件警报操作的片段如下 action odata type Microsoft Azure Management Insights Mod
  • 检测到可能存在 DNS 欺骗。远程主机标识已更改

    我最近更换了服务器 因此我有了一个新的 IP 地址 当我尝试使用时git fetch remote repository 我明白了 gt C Users path app gt git fetch remote repository gt
  • Java RMI 和 RPC 有什么区别?

    Java RMI 和 RPC 之间的实际区别是什么 我在一些地方读到 RMI 使用对象 RPC是基于C的 因此它具有结构化编程语义 另一方面 RMI是基于Java的技术 并且是面向对象的 通过 RPC 您可以调用导出到服务器中的远程函数 在
  • 检测麦克风是否打开

    有没有办法以编程方式检测 Windows 上的麦克风是否打开 不 麦克风不会告诉您它们是否 打开 或者特定的声道是否已连接到麦克风设备 您能做的最好的事情就是从您怀疑是麦克风的输入通道 例如Windows默认输入设备 通道 读取音频数据 并
  • 如何获取数据列表的更改事件?

    我正在使用数据列表 需要检测用户何时从下拉列表中选择某些内容 类似的问题已被问到 https stackoverflow com questions 16027746 jquery event when html5 datalist opt
  • 将 SVG 图像转换为 png 以供不支持的浏览器使用 - 后备 - Modernizer.js(?) [重复]

    这个问题在这里已经有答案了 我正在考虑转几个SVG我的网站上的图像PNG对于不支持的浏览器SVG适当地 我主要对显示的基于文本的问题有疑问IE 显示的字体完全错误 所以我想我应该创建一个后备PNG 我已经尝试为此寻找一个很好的演练 我自认是
  • 使用函数式编程有效地计算素数

    通过回顾 Project Euler 并解决一些问题 我逐渐熟悉了 F 许多早期问题都由素数组成 环顾四周后 我想出了以下解决方案 let primesL let rec prim n sofar seq if sofar gt List
  • 如何在拖动 UICollectionViewCell 时实现透明背景或圆角

    我确定有must这是一种简单的方法 但我已经花了很长时间在各种兔子洞里 到目前为止还没有成功 我有一个支持拖放的集合视图 被拖动的单元格有一个UIImageView in the contentView 并且图像视图的背衬层应用了角半径 单