ViewModifier/视图修饰符, ButtonStyle/按钮样式 的使用

news2025/1/18 3:24:20

1. ViewModifier 视图修饰符

  1.1 创建默认按钮视图修饰符 ViewModifierBootcamp.swift

import SwiftUI

/// 默认按钮修饰符
struct DefaultButtonViewModifier: ViewModifier{
    let bcakgroundColor: Color
    func body(content: Content) -> some View {
        content
            .foregroundColor(.white)
            .frame(height: 55)
            .frame(maxWidth: .infinity)
            .background(bcakgroundColor)
            .cornerRadius(10)
            .shadow(radius: 10)
    }
}

// 扩展 View
extension View {
    func withDefaultButtonFormatting(backgroundColor: Color = .blue) -> some View{
        modifier(DefaultButtonViewModifier(bcakgroundColor: backgroundColor))
    }
}

/// 视图修饰符
struct ViewModifierBootcamp: View {
    var body: some View {
        VStack(spacing: 10) {
            Text("Hello,world!")
                .font(.headline)
                .withDefaultButtonFormatting(backgroundColor: .orange)
            
            Text("Hello,everyone!")
                .font(.subheadline)
                .withDefaultButtonFormatting()
            
            Text("Hello !!!")
                .font(.title)
                .withDefaultButtonFormatting(backgroundColor: .red)
        }
        .padding()
    }
}

struct ViewModifierBootcamp_Previews: PreviewProvider {
    static var previews: some View {
        ViewModifierBootcamp()
    }
}

  1.2 效果图:

2. ButtonStyle 自定义按钮样式

  2.1 创建按下按钮样式,ButtonStyleBootcamp.swift

import SwiftUI

///  按下按钮样式
struct PressableButtonStyle: ButtonStyle{
    let scaledAmount: CGFloat
    
    init(scaledAmount: CGFloat) {
        self.scaledAmount = scaledAmount
    }
    
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
        // 缩放
            .scaleEffect(configuration.isPressed ? scaledAmount : 1.0)
        // 点亮度
        //.brightness(configuration.isPressed ? 0.05 : 0)
            .opacity(configuration.isPressed ? 0.86 : 1)
    }
}

/// 扩展 View
extension View{
    /// 按钮的样式
    func withPressableStyle(scaledAmount: CGFloat = 0.9) -> some View{
       buttonStyle(PressableButtonStyle(scaledAmount: scaledAmount))
    }
}

/// 按钮样式
struct ButtonStyleBootcamp: View {
    var body: some View {
        Button {
            
        } label: {
            Text("Click Me")
                .font(.headline)
                .withDefaultButtonFormatting()
        }
        .withPressableStyle(scaledAmount: 0.86)
        .padding(40)
    }
}

struct ButtonStyleBootcamp_Previews: PreviewProvider {
    static var previews: some View {
        ButtonStyleBootcamp()
    }
}

  2.2 效果图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1081074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何去图片水印?这些方法解决你的问题

当我们希望更新自己的头像时,经常会发现网上有许多精彩的图片,但它们通常带有水印,使我们无法轻松使用这些照片。这个情况大家应该都有遇到过吧?那么,如何去除图片上的水印呢?接下来,我们将分享…

选择适合变更管理的产品开发工具的要点和建议

什么是变更管理? 变更管理是指导组织改进的学科。由于可观察到的行为变化,它会导致永久性变化。它确保您的组织以彻底、有序和可持续的方式学习和改进。成功的改进项目需要个人和团队保持一致,他们有共同的愿景,他们知道如何定义…

大麦网回流票监控,sing参数分析

最近演唱会增多,总是抢不到票,所以想从回流票入手,做一个某麦网的演唱会回流票的监控。 最简单的方向就是从网页端入手。 在演唱会页面看到网页端不支持购买,不慌,咱只是看看有没有票不购买,直接抓包随便一…

营销科学中的边际ROI计量随笔记

主要是读这篇基于AB实验的边际ROI增长分析实践 的随笔记。 传统ROI计量 一些营销活动中的传统的ROI的计算方式是: 拉新ROI LTV / CAC 用户生命周期价值/平均获客成本 买量类拉新策略评估使用。 促活ROI GMV / RotalRecallCost 促销活动期间的总销售额/促销活…

#IIC 通信协议

IIC简介 I2C 通讯协议 (Inter - Integrated Circuit) 是由 Phiilps 公司开发的 物理层 它的物理层有如下特点: (1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支…

草柴APP如何领取淘宝内部隐藏优惠券拿淘宝返利?

什么是草柴APP? 草柴APP是一款购物省钱工具。草柴APP现已支持淘宝、天猫、京东等知名电商平台,通过草柴APP查询领取内部隐藏大额优惠券,确认收货后拿购物返利;让您与别人购买相同的商品,不求比别人花的少,…

零样本异常分割SAA+

文章目录 一、测试效果展示二、相关链接三、优点总结四、SAA vs SAA4.1 SAA4.2 SAA 五、SAA结构5.1 专家领域知识(Domain Expert Knowledge)5.2 目标图片上下文信息(Target Image Context) 六、How to use 最近在做缺陷检测&#…

Qt打开ui文件经常报错

报错如下: 解决方法: 最后设置成默认值 即可

国标28181 开源WVP-PRO项目部署

感谢大牛的开源框架 https://doc.wvp-pro.cn/#/ 一.直接使用源码部署(在linux) -- 安装环境 yum install -y java-1.8.0-openjdk.x86_64 git maven nodejs npm -- 下载源码-wvp项目 git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git ---…

Linux系统编程:UDP协议和TCP协议

目录 一. 对于端口号的理解 1.1 网络通信五元组 1.2 端口号的划分策略 二. 网络通信中常用的指令 2.1 netstat指令 2.2 pidof指令 三. udp协议 3.1 udp的概念及特点 3.2 udp协议端格式 3.3 对于面向数据报及应用层发送与读取数据的理解 四. tcp协议的概念及特点 五.…

怎么把视频转换成mp4格式?

怎么把视频转换成mp4格式?如果你经常在网上下载视频的话,那么应该知道视频文件的格式种类非常的多,不同网站下载到的视频格式各不相同,除了最常见的mp4格式外,其它视频格式基本上都存在着兼容问题,如果格式…

Qt creator下载安装

版本问题: Qt4的开发环境包括3个基本部分:Qt Framework(Qt库)、QtCreator(IDE)和MinGW(编译调试),都要分别下载安装并配置,比较麻烦。 Qt5之后,…

Vuex->vuex获取值以及改变值,vuex异步请求

vuex获取值以及改变值vuex异步请求 1.vuex获取值以及改变值 Vuex分成五个部分: 1.State:单一状态树 2.Getters:状态获取 3.Mutations:触发同步事件 4.Actions:提交mutation,可以包含异步操作 5.Module&…

2023云栖大会即将开幕,速来免费预约!

2023云栖大会 500热点话题 1000行业实干家 现场实操 即学即用 40000平米科技展 3000前沿展品 72小时沉浸式科技体验 与数字人李白共吟盛唐诗歌 视频云边缘云云通信 深入3大Tech领域,覆盖20话题演讲 虚拟演播室、智能全景声 AIGC与数字人的一站式制作 “AI更…

重温mybatis之一篇带你入门Mybatis

一.前言 我是一个五年得java开发工程师,在印象里,从第一年我就会使用mybatis了,从最开始得xml配置,到spring整合,再到springboot。无非就是写个mapper抽象类,写个mapper.xml方法。就这么一直用着。期间也想…

ASP.Core3.1 WebAPI 发布到IIS

本篇文章简述如何在IIS中发布你的.Core 程序 1.打包 首先你要打包好你程序,如果你是Visual Studio开发的程序,那你右击你的项目点击发布 如果你是Visual Code 开发的,那你在你的终端切换到你的目录然后执行命令 dotnet publish --config…

mysql面试题43:MySQL自增主键用完了怎么办?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL自增主键用完了怎么办? 当MySQL中的自增主键用完了(…

Python数组删除元素pop与remove对比

pop()和remove()函数都可以用来删除列表中的函数,pop()是按索引来删除的,remove()是按元素来删除的。 1、pop()默认删除列表中最后一个元素,而且会返回删除的元素。此时的时间复杂度为O(1) 下面的例子中,…

pdf怎么合并在一起?

pdf怎么合并在一起?对于pdf合并这个问题,有的小伙伴想很简单,只需要将文件直接复制再其中的一个后面不就完事了吗。其实不然,因为我们如果要是需要将很多文件进行合并的话,就会产生很多问题的。总之,在现在…

搭建一个自己的学术语音助手(1)

背景: 大模型出来后语音助手借着LLM的语义理解、知识组织能力的提升,升级了一波buffer。然后在使用这些语音助手的时候总觉得缺了点什么,但也讲不出来具体缺了什么。这几天的思考突然有了灵感,其实缺的就是自己的知识内容如何变成…