IOS开发基础 · SwiftUI · CS193p Lecture1-2

news2024/9/20 0:59:34

IOS开发

  • Lecture 1
    • Text
    • RoundedRectangle
    • Zstack
  • Lecture 2
    • HStack
    • struct整合组件
    • ContentView
    • struct 中创建变量
    • var&let
    • SwiftUI刷新重建
    • 点击效果
    • Array
    • Foreach
    • Button
    • Spacer
    • var整合小组件
    • SF-symbol
    • 上下界限制
    • 简化Button

Lecture 1

Text

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, ZHJ").foregroundColor(Color.orange).padding()
        //return Text()
        //Text(string: "xxx")
        //全写:foregroundColor(color: Color.orange)或者甚至直接简写成
        //foregroundColor(.orange)
        //padding()边框大小
    }
}

在这里插入图片描述

RoundedRectangle

import SwiftUI

struct ContentView: View {
    var body: some View {
        RoundedRectangle(cornerRadius: 25.0)//圆角度数
    }
}

在这里插入图片描述

import SwiftUI

struct ContentView: View {
    var body: some View {
        RoundedRectangle(cornerRadius: 20).stroke(lineWidth: 5).padding(.horizontal)
    }
}

在这里插入图片描述
在这里插入图片描述

import SwiftUI

struct ContentView: View {
    var body: some View {
        RoundedRectangle(cornerRadius: 20)
            .stroke(lineWidth: 5)
            .padding(.horizontal)
            .foregroundColor(.red)
    }
}

在这里插入图片描述

Zstack

import SwiftUI

struct ContentView: View {
    var body: some View {
        ZStack(content: {
            RoundedRectangle(cornerRadius: 20)
                .stroke(lineWidth: 5)
                .padding(.horizontal)
                .foregroundColor(.red)
            Text("Hello, ZHJ")
                .foregroundColor(Color.orange)
                .padding()
        })
    }
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import SwiftUI

struct ContentView: View {
    var body: some View {
        ZStack(alignment: .top, content:  {
            RoundedRectangle(cornerRadius: 20)
                .stroke(lineWidth: 5)
            Text("Hello, ZHJ")
                .foregroundColor(.orange)
        })
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}

在这里插入图片描述

import SwiftUI

struct ContentView: View {
    var body: some View {
    	//将整个{}中的东西不作为最后一个参数,而是直接提炼出来
        ZStack(alignment: .center) { 
            RoundedRectangle(cornerRadius: 20)
                .stroke(lineWidth: 5)
            Text("Hello, ZHJ")
        }
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}
import SwiftUI

struct ContentView: View {
    var body: some View {
    	//如果采用默认居中的话,可以省略()
        ZStack{
            RoundedRectangle(cornerRadius: 20)
                .stroke(lineWidth: 5)
            Text("Hello, ZHJ")
        }
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}

在这里插入图片描述

Lecture 2

HStack

横向排开的列

import SwiftUI

struct ContentView: View {
    var body: some View {
        HStack{
            ZStack{
                RoundedRectangle(cornerRadius: 20)
                    .stroke(lineWidth: 5)
                Text("Hello, ZHJ")
            }
            ZStack{
                RoundedRectangle(cornerRadius: 20)
                    .stroke(lineWidth: 5)
                Text("Hello, ZHJ")
            }
            ZStack{
                RoundedRectangle(cornerRadius: 20)
                    .stroke(lineWidth: 5)
                Text("Hello, ZHJ")
            }
            ZStack{
                RoundedRectangle(cornerRadius: 20)
                    .stroke(lineWidth: 5)
                Text("Hello, ZHJ")
            }
        }
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}

在这里插入图片描述

struct整合组件

进一步抽象出类

import SwiftUI

struct ContentView: View {
    var body: some View {
        HStack{
            CardView()
            CardView()
            CardView()
            CardView()
        }
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}

struct CardView: View{
    var body: some View{
        ZStack{
            RoundedRectangle(cornerRadius: 20)
                .stroke(lineWidth: 5)
            Text("Hello, ZHJ")
        }
    }
}

在这里插入图片描述

import SwiftUI

struct ContentView: View {
    var body: some View {
        HStack{
            CardView()
            CardView()
            CardView()
            CardView()
        }
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}

struct CardView: View{
    var body: some View{
        ZStack{
            RoundedRectangle(cornerRadius: 20)
                .stroke(lineWidth: 5)
            Text("🖨️").font(.largeTitle)
        }
    }
}

在这里插入图片描述

ContentView

在这里插入图片描述
放置两个预览器
在这里插入图片描述
Zstack是纵向堆叠
一个用于堆叠边框
一个用于堆叠背景色

struct CardView: View{
    var body: some View{
        ZStack{
            RoundedRectangle(cornerRadius: 20)
                .stroke(lineWidth: 5)
            RoundedRectangle(cornerRadius: 20)
                .fill()
                .foregroundColor(.white)
            Text("🖨️")
                .font(.largeTitle)
        }
    }
}

在这里插入图片描述

struct 中创建变量

struct CardView: View{
	//变量必须具有有效值,这里使用{}作为一个函数给他一个初始值
    var isFaceUp: Bool{ return false }
    
    var body: some View{
        ZStack{
            if isFaceUp{
                RoundedRectangle(cornerRadius: 20)
                    .stroke(lineWidth: 5)
                RoundedRectangle(cornerRadius: 20)
                    .fill()
                    .foregroundColor(.white)
                Text("🖨️")
                    .font(.largeTitle)
            }else{
                RoundedRectangle(cornerRadius: 20)
                    .fill()
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述

//采用这种变量赋值方法也可以
var isFaceUp: Bool = true

或者在调用View时给一个值

import SwiftUI

struct ContentView: View {
    var body: some View {
        HStack{
            CardView(isFaceUp: true)
            CardView(isFaceUp: false)
            CardView(isFaceUp: true)
            CardView(isFaceUp: false)
        }
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}

struct CardView: View{
    var isFaceUp: Bool
    //这里也可以把默认值定义上,之后如果有参数传进来就会覆盖默认值
    //var isFaceUp: Bool = true
    
    var body: some View{
        ZStack{
            if isFaceUp{
                RoundedRectangle(cornerRadius: 20)
                    .stroke(lineWidth: 5)
                RoundedRectangle(cornerRadius: 20)
                    .fill()
                    .foregroundColor(.white)
                Text("🖨️")
                    .font(.largeTitle)
            }else{
                RoundedRectangle(cornerRadius: 20)
                    .fill()
            }
        }
    }
}

在这里插入图片描述
每种类型中也能创建局部变量shape
这样可以使进一步简化重复的代码

struct CardView: View{
    var isFaceUp: Bool
    
    var body: some View{
        ZStack{
            var shape = RoundedRectangle(cornerRadius: 20)
            if isFaceUp{
                shape.stroke(lineWidth: 5)
                shape.fill().foregroundColor(.white)
                Text("🖨️").font(.largeTitle)
            }else{
                shape.fill()
            }
        }
    }
}

var&let

var变量
let常量

SwiftUI刷新重建

UI在创建后便不能够在改变
在这里插入图片描述
View这个struct在创建后不能够被修改、但是我们可以使用@State的方法,让后面的变量指向内存中一个变量,然后后面我们可以修改这个内存信息,达到修改struct的效果。
这种方法不常用

struct CardView: View{
    @State var isFaceUp: Bool
    
    var body: some View{
        ZStack{
            let shape = RoundedRectangle(cornerRadius: 20)
            if isFaceUp{
                shape.stroke(lineWidth: 5)
                shape.fill().foregroundColor(.white)
                Text("🖨️").font(.largeTitle)
            }else{
                shape.fill()
            }
        }
        .onTapGesture {
            isFaceUp = !isFaceUp
        }
    }
}

点击效果

struct CardView: View{
    @State var isFaceUp: Bool
    
    var body: some View{
        ZStack{
            let shape = RoundedRectangle(cornerRadius: 20)
            if isFaceUp{
                shape.stroke(lineWidth: 5)
                shape.fill().foregroundColor(.white)
                Text("🖨️").font(.largeTitle)
            }else{
                shape.fill()
            }
        }
        .onTapGesture {
            isFaceUp = !isFaceUp
        }
    }
}

在这里插入图片描述
在这里插入图片描述

Array

在这里插入图片描述

var emojis: Array<String> = ["🚀", "🚁", "🛺", "🚟"]
//由Swift自动识别类型
var emojis = ["🚀", "🚁", "🛺", "🚟"]

按option点击array提示识别的类型
在这里插入图片描述

在这里插入图片描述

struct ContentView: View {
    var emojis = ["🚀", "🚁", "🛺", "🚟"]
    
    var body: some View {
        HStack{
            CardView(content: emojis[0])
            CardView(content: emojis[1])
            CardView(content: emojis[2])
            CardView(content: emojis[3])
        }
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}

Foreach

这样写会使得相同的元素在点击时一起改变,这个问题先不考虑
在这里插入图片描述

struct ContentView: View {
    var emojis = ["🚀", "🚁", "🛺", "🚟", "🚟"]
    
    var body: some View {
        HStack{
            ForEach(emojis, id: \.self, content: { emoji in
                CardView(content: emoji)
            })
           
        }
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}

content作为最后一个元素,同时是个函数,我们可以省略一部分内容

struct ContentView: View {
    var emojis = ["🚀", "🚁", "🛺", "🚟", "🚟"]
    
    var body: some View {
        HStack{
            ForEach(emojis, id: \.self) { emoji in
                CardView(content: emoji)
            }
        }
        .padding(.horizontal)
        .foregroundColor(.pink)
    }
}

数组复选

emojis[0...6] //包括6,既0-6,共7个
emojis[0..<6] //不包括6,既0-5,共6个

将最大值设置为变量
在这里插入图片描述

Button

在这里插入图片描述
纵向排版
在这里插入图片描述
label里可以是任意的View

Spacer

尽可能多的填充空间
在这里插入图片描述

var整合小组件

在这里插入图片描述

SF-symbol

下载SF-symbol来查找symbol
Apple官网SF-symbol下载地址
在这里插入图片描述
调用时使用

Image(systemName: "plus.circle")

在这里插入图片描述
给整个HStack使用,改变内部所有字体
在这里插入图片描述

上下界限制

在这里插入图片描述

简化Button

    var remove:some View{
        Button {
            if emojiCount > 1 {
                emojiCount -= 1
            }
        } label: {
            Image(systemName: "minus.circle")
        }
    }
    var add:some View{
        Button{
            if emojiCount < emojis.count{
                emojiCount += 1
            }
        } label: {
            Image(systemName: "plus.circle")
        }
    }

在这里插入图片描述

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

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

相关文章

Node.js 中 cookie的验证登录

认识 cookie 在讲cookie的登录验证之前&#xff0c;先来了解一下cookie是什么&#xff1f;cookie本质是存储在浏览器中的一小段文本信息&#xff08;不超过4kb&#xff09;&#xff0c;是由服务器生成发送到浏览器&#xff08;客户端&#xff09;&#xff0c;浏览器将其保存在…

虚拟化技术学习笔记2

1、虚拟机与容器对比&#xff1a; 2、Hypervisor管理工具对比&#xff1a; 3、QEMU&#xff1a; 软件模拟虚拟化、可以模拟多种硬件&#xff0c;包括X86架构处理器、AMD64架构处理器、ARM、SPARC与PowerPC、AIX架构等&#xff0c;效率低、一般用于研究测试场景。QEMU可以模拟一…

偏微分题目的解法

介绍偏微分是考研数学里的小重点&#xff0c;通常在题干中就能很明显看到偏导数。这种题目一般会有两个小题&#xff0c;且第一题往往送分题&#xff0c;通常是求某个复合函数的偏导&#xff0c;直接用复合函数的求导法则即可得到答案。第二题通常是求原函数&#xff0c;一般来…

NVIDIA 在 WeNet 中开源 Noisy Student Training 方案

为了改进 Noisy Student Training 在非目标领域 ASR 上的性能&#xff0c;英伟达提出新型数据筛选方法 LM Filter。其利用不同解码方式的识别文本之间的差异来作为数据筛选条件&#xff0c;是一个完全无监督的筛选过程。在 AIShell-1 上与无数据筛选的基线相比可以有 10.4% 的性…

PYNQ-Z2 开发板

1. 官方手册写的挺全&#xff0c;了解一下PYNQ-Z2 设置指南 https://pynq.readthedocs.io/en/latest/getting_started/pynq_z2_setup.htmlPYNQ-Z2 Reference Manual v1.0 https://www.mouser.com/datasheet/2/744/pynqz2_user_manual_v1_0-1525725.pdfpynq&#xff08;Python O…

单分散PEG之Amino-PEG24-acid;CAS:196936-04-6氨基-二十四聚乙二醇-羧酸

Amino-PEG24-acid氨基-二十四聚乙二醇-羧酸196936-04-6 中文名称&#xff1a;氨基-二十四聚乙二醇-羧酸 英文名称&#xff1a;Amino-PEG24-acid 分子式&#xff1a;C51H103NO26 分子量&#xff1a;1146.35 CAS&#xff1a;196936-04-6 外观&#xff1a;粘稠液体或者固体粉末&a…

数据的存储(3)浮点数的存储

tips 1. 2. 浮点数内存存储方式与整型是截然不同&#xff0c;不可被整型思维带偏了 我用一个例子来理解浮点数在内存当中的表示方法&#xff0c;先上一个十进制浮点数13.5 1. 利用二进制的权重化为二进制浮点数 二进制权重表小数部分如下&#xff1a; 那么13.5&…

Vue好难理解怎么办?

Vue学习笔记分享给你&#xff0c;希望对你有些帮助&#xff0c;另外推荐2个安装 VScode 中的 Vue 插件 Vue 3 Snippets Vue 3 Snippets - Visual Studio Marketplace 这个插件包含了所有的 Vue.js 2 和 Vue.js 3 的 api 对应的代码片段。插件的代码片段如下表格所示&#xff0…

Jetson nano 入手系列之4—外围设备:开机键+PWM风扇

Jetson nano 入手系列之4—外围设备&#xff1a;开机键PWM风扇1.外接按键开机2.PWM可调速风扇2.1 jtop工具2.2 PWM风扇2.3 PWM风扇的控制2.3.1 手动控制2.3.2 自动控制参考文献本系列针对亚博科技jetson nano开发板。 Jetson nano 入手系列&#xff1a; Jetson nano 入手系列之…

《MySQL系列-InnoDB引擎11》InnoDB关键特性-刷新邻接页

InnoDB 关键特性 InnoDB存储引擎的关键特性包括&#xff1a; Insert Buffer (插入缓冲)Double Write (两次写)Adaptive Hash Index (自适应哈希索引)Async IO (异步IO)Flush Neighbor Page (刷新领接页) 这些特性为InnoDB存储引擎带来了更好的性能以及更高的可靠性。 刷新邻接…

极光笔记 | 当前最佳实践:Header Bidding 与瀑布流混合请求技术

通过这篇文章您讲将了解&#xff1a;Header Bidding 的发展史Waterfall、Header Bidding 的逻辑及优劣势为什么说 Header Bidding 与瀑布流混合请求技术是当前最佳实践PART 01、Header Bidding 的起源Header Bidding&#xff08;头部竞价&#xff0c;又称 Pre-Bidding 或 Advan…

PaddleSports:“AI+体育”端到端开发套件及落地实践

本系列根据WAVE SUMMIT2022深度学习开发者峰会「开源开放 生态共建」论坛嘉宾分享整理。本文整理自「开源开放 生态共建」百度研究院的资深研究员卢飞翔的主题演讲——PaddleSports&#xff1a;“AI体育”端到端开发套件及落地实践。百度3DAI智慧体育团队针对数据、算法、产品三…

C++语法基础课 习题5 —— 字符串

文章目录例题1. 760.字符串的长度(fgets函数)重点&#xff01;2. 761.字符串中数字的个数3. 763.循环相克令4. 765.字符串加空格(getline函数auto用法)重点&#xff01;5. 769.替换字符 重点&#xff01;6. 773.字符串的插入(substr函数)重点!7. 772.只出现一次的字符(难题)习题…

Python逆向进阶教程笔记(1)

视频地址&#xff1a;Day1初识JS逆向 混淆与无混淆数据加密方案解析实战-36Kr数据加密解析 (AES数据逆向)_哔哩哔哩_bilibili 未完待续 一、排错 1.1&#xff09; 目的&#xff1a;抓页面借口&#xff0c;简单请求会被拦截 1.2&#xff09; 网址&#xff1a;乌海市公共资源…

OSPF-MGRE实验(1.3)

要求&#xff1a; 1、首先为每个路由器配置接口ip和环回ip实现第一个目标 r1&#xff1a; [r1]interface GigabitEthernet 0/0/0 [r1-GigabitEthernet0/0/0]ip add 16.1.1.1 24 [r1-GigabitEthernet0/0/0]int gi0/0/1 [r1-GigabitEthernet0/0/1]ip add 61.1.1.1 24 [r1-Gigab…

java File类详细

目录 File创建 1.File&#xff08;String pathname&#xff09; 2. File&#xff08;String parent,String child&#xff09; 3.File(File f,String child) file类的使用 基本操作&#xff1a; 文件夹的操作 File创建 1.File&#xff08;String pathname&#xff09; …

一起快速了解单片机入门知识吧!

从事计算机和电子信息技术行业的都熟知单片机一词&#xff0c;但是你真的了解单片机吗&#xff1f;单片机的种类有哪些&#xff1f;单片机有什么特点&#xff1f;单片机的工作原理是什么&#xff1f;下面一起来了解单片机知识吧&#xff01;在学习单片机知识前&#xff0c;我们…

多数据库学习之SQL Server查询表自增主键字段信息SQL

多数据库学习之SQL Server查询表自增主键字段信息SQL前言概念SQL样例方式一&#xff1a;系统内置存储过程查找方式二&#xff1a;通过INFORMATION_SCHEMA模式下系统视图获取方式三&#xff1a;通过sys模式下系统视图获取参考链接前言 Microsoft SQL Server简介 Microsoft SQL S…

Zookeeper详解(三)——开源客户端curator

开源客户端curator (true re de) curator是Netflix公司开源的一个zookeeper客户端&#xff0c;后捐献给apache&#xff0c;curator框架在zookeeper原生API接口上进行了包装&#xff0c;解决了很多zooKeeper客户端非常底层的细节开发。提供zooKeeper各种应用场景(比如&#xf…

CSS3 动画案例

文章目录变形效果案例照片墙过渡效果案例鼠标移动显示内容图片文字滑动效果白光闪过效果手风琴效果动画案例脉冲动画loading效果灯光闪烁动画代码变形效果案例 照片墙 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>&…