SwiftUI:ViewModifier,其中内容是图像

2024-01-08

我收到错误“Type 'PlayButtonModifier' does not conform to protocol 'ViewModifier'“我不明白为什么,更重要的是,我不明白如何正确地做到这一点。

我只是尝试创建一个ViewModifier for an Image,这样我就可以使用例如.resizable()其上,仅定义于Image

In the ViewModifier协议,有一个Typealias for Content定义的。我天真的想法是这应该有效:

struct PlayButtonModifier: ViewModifier {
    typealias Content = Image

    func body(content: Content) -> some View {
        content
    }
}

嗯,不。太容易了。结构的隐式类型别名也会发生同样的情况:

struct PlayButtonModifier: ViewModifier {
    func body(content: Image) -> some View {
        content
    }
}

同样的错误。

这里有什么问题吗?怎样才算正确呢?


在这种情况下,修改特定于特定视图类型,Image比如说,您可以直接在该视图类型上添加扩展:

extension Image {
    func myImageModifier() -> some View {
        self
            .resizable()
            .aspectRatio(1.0, contentMode: .fit)
            .clipShape(Circle())
   }
}

下面是完整的操场文本示例。如果您在游乐场“资源”文件夹中添加名为“Otter.png”的可爱水獭图片,您会得到更漂亮的结果:)

import PlaygroundSupport
import SwiftUI

let image = (UIImage(named: "Otter.png") ?? UIImage(systemName: "exclamationmark.square")!)

struct ContentView: View {
    var body: some View {
        VStack {
            Text("hello world")
            Image(uiImage: image)
                .myImageModifier()
        }
    }
}

extension Image {
    func myImageModifier() -> some View {
        self
            .resizable()
            .aspectRatio(1.0, contentMode: .fit)
            .clipShape(Circle())
    }
}

PlaygroundPage.current.liveView = UIHostingController(rootView: ContentView())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI:ViewModifier,其中内容是图像 的相关文章

随机推荐

  • 如何等待 Angular2 处理动态多个 Http 请求?

    我知道你可以通过调用 forkJoin 方法来使用 Observable 来等待多个 http 请求完成 如下所示 getBooksAndMovies Observable forkJoin this http get app books
  • 从 HTML 横向打印

    我有一个 HTML 报告 由于列很多 需要横向打印 有没有办法做到这一点 而无需用户更改文档设置 浏览器有哪些选项 在 CSS 中 您可以设置 page 属性 如下所示 media print page size landscape pag
  • 如何将存储过程中的大量参数从代码传递到 SQL Server

    如何从代码中将大量参数 比如 20 传递给存储过程 就像我们可以将所有参数分组在一个类对象中然后将其传递一样 但是在存储过程的情况下如何实现这样的 this 目前我必须创建 20 多个变量来传递参数 谢谢 阿什瓦尼 如果您使用的是 SQL
  • 宏 if 语句返回错误:运算符“&&”没有正确的操作数

    我在许多 Linux 机器上编译代码 在特定机器上 我收到以下错误 error operator has no right operand 宏代码为 if LINUX VERSION CODE KERNEL VERSION 3 12 49
  • Perl Moose:仅在 BUILD 子例程中提到时才设置属性

    我正在构建一个脚本 该脚本以递归方式构建目录的子目录 文件的名称以及这些子目录中的文件的名称作为对象 package Dir use Moose use Modern Perl use File use strict use warning
  • numpy 与 python:将 3d 数组转换为 2d

    假设我有一张彩色图像 自然地 这将由 python 中的 3 维数组表示 例如形状 n x m x 3 并称之为 img 我想要一个新的二维数组 将其称为 narray 其形状为 3 nxm 这样该数组的每一行分别包含 R G 和 B 通道
  • 我是 python 新手,我不知道这是否有效[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions import time varthi
  • 需要更好的模板语言[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对我知道那个this https stackoverflow com questions 3793880 lightweight temp
  • HXT 获取第一个元素:重构奇怪的箭头

    我需要先获取文本内容 p 这是的孩子 p div class about 写了如下代码 tagTextS IOSArrow XmlTree String tagTextS getChildren gt gt gt getText gt gt
  • Apache Spark:如何取消代码中的作业并终止正在运行的任务?

    我正在 Hadoop 集群上运行 Spark 应用程序 版本 1 6 0 并在客户端模式下使用 Yarn 版本 2 6 0 我有一段运行长时间计算的代码 如果它花费的时间太长 我想杀死它 然后运行一些其他函数 这是一个例子 val conf
  • Google Drive API 和从浏览器上传文件

    我正在尝试使用 Google Drive api 上传文件 并且元数据正确 并且我想确保实际的文件内容已存在 我有一个简单的页面设置 如下所示 div h6 File Upload Operations h6 div
  • 来自 Python 的 Win32 长路径

    注意 这个问题是关于新支持的win32长路径 https superuser com questions 1119883 windows 10 enable ntfs long paths policy option missing 自 W
  • 如何确定哪个 Windows 进程是管理当前进程输出的“音频会话”?

    我碰巧在这里使用 Python 绑定 但我怀疑这个问题和最终的答案并不是 Python 特有的 在 Windows 10 上 使用Python 绑定到 Windows 的 Core Audio 库 https github com Andr
  • 限制单个 RDD 的最大并行度而不减少分区数量

    是否可以在不改变实际分区数量的情况下限制RDD级别的最大并发任务数 用例是在不减少分区数量的情况下 不要因过多的并发连接而压垮数据库 减少分区数量会导致每个分区变得更大并最终难以管理 我将其重新发布为 答案 因为我认为这可能是最不肮脏的黑客
  • 使用 MSBuild FileUpdate 任务仅更改 AssemblyInfo.cs 中的修订号

    我只需要更改版本号AssemblyInfo cs文件 版本号的格式为主要 次要 构建 修订 e g 1 4 6 0 目前我用以下命令更改版本FileUpdate任务 来自MSBuild 社区任务项目 http msbuildtasks ti
  • 将 JUNG 移植到 GWT [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有一个非常好的java图形库JUNG http jung sourceforge net 我想知道是否存在任何 GWT 库可以完成 JUN
  • 无法更新 Xcode 11 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 尝试从 Xcode 11 GM 更新到 11 1 总是失败 我首先尝试移动 Applications Xcode app 没有任何效果 这
  • 无法关闭 CFMX 8 中的持久跟踪 cookie

    CFMX 8 企业版 我已打开 内存变量 下的 使用 J2EE 会话变量 设置 因为安全要求规定不能使用持久 cookie 我知道打开此设置将告诉 CF 仅创建和使用 JSESSIONID 会话 cookie 然而 我的服务器似乎仍在创建和
  • 如何在 rxjs 管道中有条件地执行某些操作?

    有人可以告诉我带有条件操作的 rxjs 管道的正确语法是什么吗 在这种情况下 如果环境名称数组长度不为 1 我想使用过滤器进行映射 如何使用不返回的 if 语句 是否有任何 rxjs 运算符 environmentName env1 env
  • SwiftUI:ViewModifier,其中内容是图像

    我收到错误 Type PlayButtonModifier does not conform to protocol ViewModifier 我不明白为什么 更重要的是 我不明白如何正确地做到这一点 我只是尝试创建一个ViewModifi