经验分享 未读
Sketch教程:自定义Library中的缩略图Sketch教程:自定义Library中的缩略图有的时候为了更加快捷方便的区分多个组件库真的是煞费苦心。当你的组件库是多人合作的时候,美观的缩略图必不可少。
如果要为“库”创建自定义预览,请在文档中的某个位置创建一个新的1:1(正方形)画板,并将其命名为“Library Preview”。
经验分享 未读
全平台TNT!一个顶N个必备高效工具箱
大家好,我是张洪,欢迎来到我的频道。我会做一些关于软件体验和设计相关的视频。
在Windows上我们习惯了从凌乱的桌面图标上选择我们需要的程序,在mac上我们会从启动台里大量的图标里摸索。我们在网上冲浪的时候会从网址导航或者搜索引擎中开始。在这个视频中,我来给大家推荐一个软件叫utools,他是一个支持多平台快速直达的免费软件。在这期视频你能看到
如何下载和安装
基础设置以及如何安装插件
通过网页快开添加搜索引擎
ocr与翻译的配合
利用快捷命令插件
利用自动化插件
TNT功能
应用联动:自动切换输入法
经验分享 未读
Sketch教程:将作为组件的画板移动到独立的组件页面、自定义组件页面将Symbol发送到Symbols页面可以帮助使事情井井有条,特别是在复杂的设计中。它还有助于减少使用符号母版或实例之间的混淆。
要手动将一个组件移到组件页面,在图层列表拖动组件的标题,或右键单击并选择发送到“符号”页面。
将其他页面作为组件页面只需要更改名字就可以了。将页面的名称更改为「Symbols」(英文)「组件」(中文)即可。
经验分享 未读
快速用Ps做班级毕业照
素材下载收集了一些可以使用的学士服素材,大家可以点此下载
引用站外地址,不保证站点的可用性和安全性
学士服素材.zip
蓝奏云
以下是文字版内容:大家好,我是张洪,欢迎来到我的频道。我准备接下来做一些关于软件体验和设计相关的视频。到了毕业季,今年毕业生真的拍毕业照真的太难了。我想用最短的时间让大家能够从无到有的用photoshop做一个简单毕业照。
ps并不难,对于不需要做设计师的人来说,ps不需要学习非常多的理论知识,日常P图涉及到的功能也非常少。所以只是应用于做毕业照来讲,总共就是两步:1.抠图、2.拼素材。
使用ps之前需要你有ps,如果你只是用这一次的话adobe提供了试用,你可以在官网进行下载并试用,用完卸载就可以。或者可以通过其他的路子找一些和谐版。有了ps之后我们就开始吧!
ps的核心是三个概念:图层、选区、蒙板。知道这三个就可以直接上手了!
图层我们可以想象成一个个堆叠的纸片,上面的纸片会遮住下面的纸片。 ...
经验分享 未读
我是如何在Mac上搭建一个本地音乐库
大家好,我是张洪,欢迎来到我的频道。我会做一些关于软件体验和设计相关的视频。
将喜欢的音乐下载到本地,想听的时候随时听,即使网络卡的时候或者下载小视频的时候你都可以听上无损音质并且好不卡顿。很多人有收集整理音乐文件的习惯,在Mac上使用iTunes也就是音乐app管理音乐是最好不过的了。没有营销广告、没有冗余的功能,还支持和你的iPhone同步。做一个本地播放器简直是再好不过了。
但是音乐app有很多非常反逻辑的设置,对于音乐文件要求的质量很高。所以这个视频主要就来介绍我的本地音乐从一个歌名到我的手机上的整个历程。可以给有同样兴趣做自己本地音乐库的小伙伴们一个参考的方向。好了,话不多说,我们直接开始!
下载音乐的渠道目前国内主流的音乐平台都是在网易云和腾讯音乐上,你可以花钱开通会员来下载音乐,在不纠结其他没用的花哨功能的话每个月16元就足够了。当然,你也可以在某网盘或者其他网站找无损资源,下载好flac格式的音乐后,你的第一步就完成了!
通过XLD转换音乐因为mac不支持flac格式,所以需要用到软件将音乐转换为支持的音频格式,这里推荐软件叫【XLD】这款软件可以将flac格式的 ...
经验分享 未读
高中毕业应该购买一台什么样的电脑
又是毕业季,刚高考完毕的准大学生应该已经迫不及待的想拥有第一台完全属于自己的电脑了把。那么如何给自己选购一台电脑?我应该拥有一台什么样的电脑?这个视频帮大家理清一下思路,适合是第一个看的视频,给还没有购买电脑的你一点参考。
笔记本?Mac?iPad?台式机?首先要跟大家说的是,推荐大家第一个上手的电脑是这四个中的一个,这四个都有自己各自的好处。先说第一个,iPad。
iPad你们肯定都知道苹果想要把iPad作为生产力工具,而这个生产力工具却是心有余而力不足,没有足够的专业级别软件,并且价格可以与笔记本相当,大多UP都将它作为第二设备来推荐的。但是iPad有它自己独立的优势。
在入学之前你需要问一下你们专业的学长学姐,是否允许大一携带电脑。很多大学的很多专业是不允许大一的同学或者大一上学期的同学携带电脑的,但是写文档、写PPT、或者自己做一些研究创业都免不了需要一台方便的记录设备,那么配备了一个键盘的iPad几乎是你最好的选择。iPad虽然没有很多的专业级别软件,但是对于文字处理还有PPT等都足以应付。并且刚上大学的人总是躁动不安,买一台爱奇艺设备刷剧看B站也未尝不是一种好的选择。 ...
经验分享 未读
SwiftUI 学习笔记 65:项目 11-1关于数据存储相关的。是一个图书app。
关于 @Banding1234567891011121314151617181920212223242526272829303132333435363738394041import SwiftUIstruct TestButton: View { let ---title: String var colorOn = [Color.white, Color.orange] var colorOff = [Color.gray, Color.black] @Binding var toState: Bool var body: some View { Button(action: { self.toState.toggle() }) { Text(title) } .padding() .background(LinearGradient(gradient: ...
经验分享 未读
关于 CoreData 在 SwiftUI 中的最简单使用将这部分单独作为一个博文来专门书写。
创建一个App项目,选中CoreData
添加一个简单的数据结构这里创建了一个Student,里面有两个属性,id: UUID, name: String
保存按 Command+S
添加读取CoreData的变量1@FetchRequest(entity: Student.entity(), sortDescriptors: []) var students: FetchedResults<Student>
使用List来调取所有的Student12345var body: some View { List (students, id: \.id){ student in Text(student.name ?? "unknown") } }
创建一个环境属性用来分配CoreData的属性1@Environment(\.managedObjectContext) var moc
创建一个添加数据的按钮123456 ...
经验分享 未读
SwiftUI 学习笔记 64:Swift基础复习(四)Swift知识基础复习最后一章
类的闭包初始化器{}()123456789import Cocoaclass A { var age: Int = { var a = 10 var b = 20 return a + b }()}
反初始化器deinit被销毁时运行的初始化器
12345678910111213141516171819202122232425262728293031323334353637import Cocoaclass A { var name: String init(name: String) { self.name = name } deinit { print("\(self.name)被销毁") }}var t1: A? = A(name: "hello")var t2 = t1var t3 ...
经验分享 未读
SwiftUI 学习笔记 63:Swift基础复习(三)补充一下Swift的相关知识。
属性观察器 willSet , didSet1234567891011121314151617181920import Cocoastruct Person { var name: String = "unknown"{ willSet(new_Value){ //不设置变量时会有一个默认的变量为 newValue print("new value is \(new_Value)") }didSet(old_Value){ //不设置变量时会有一个默认的变量为 oldValue print("old value is \(old_Value)") } }}var a = Person(name: "Bob")a.name = "XiaoMing"/* new value is Xi ...
经验分享 未读
SwiftUI 学习笔记 62:Swift基础复习(二)补充一下Swift的相关知识。
关于数组的一些操作123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119import Cocoa//创建一个数组的几种方式var a = [1,2,3]var b: [Int] = [3,4,5]var c: Array<Int> = [6,7,8]var d = Array(repeating: -1, count: 3) //利用Array初始化器生成值为-1,数量为3的数组print(d)/* [-1, -1, -1] *///数组的添加d += [7,8,9] //可以直接用加号连接两个数组d = ...
经验分享 未读
SwiftUI 学习笔记 61: Swift基础复习(一)补充一下Swift的相关知识。
字符型字符型只能包含一个字符
1var f: Character = "A"
查看变量的类型1type(of: a)
单行注释和多行注释123456//单行注释/*多行注释多行注释*/
可选类型1var a: Int? = 2
类型转换在类型转换的时候可能会出现Optional类型,解决的方法为使用??语法,如果确定有值的时候可以使用!
1234print(Int("123123")) -> Optional(123123)print(Int("123123") ?? 10) -> 123123print(Int("hello") ?? 10) -> 10print(Int("12")!) -> 12
例:
123456789var a: Int? = 2if a == nil { print("a没有值")}else{ print("a的值为:\(a ...
经验分享 未读
SwiftUI 学习笔记 60:使用if语句进行页面切换另一种页面切换的方法
使用if语句加载视图12345@State var showContant = falseif showContant { ContentView()}
添加转场动画12.transition(.move(edge: .top))//.animation(.spring(response: 0.6, dampingFraction: 0.8, blendDuration: 0))
SF symbols 调用时调节粗细(字重)12Image(systemName: "xmark") .font(.system(size: 18, weight: .bold))
经验分享 未读
SwiftUI 学习笔记 59:添加动画/样式/自定义字体针对昨天圆环的动画和一些基础知识。
缓入缓出动画1.animation(.easeInOut)
动画延迟动画延迟子视图优先于父视图
1.animation(Animation.easeInOut.delay(0.3))
文本中字符串换行1Text("12 of 12 sections completed\n10 hours spent so far")
@Binding情况下直接添加变量的结果在使用@Binding时无论是浏览还是外部嗲用否会出错,这个时候需要使用.constant来引入
1RingView(show: .constant(false))
添加样式自定义样式/图层样式
12345678910111213//新建一个样式,可以新建一个文件“Modifiers.swiftstruct ShadowModifier: ViewModifier { func body(content: Content) -> some View { content .shadow(color: C ...
经验分享 未读
SwiftUI 学习笔记 58:带有进度的圆环带有进度的圆环实现方式
设置图形描边12Circle().stroke(Color.red, style: StrokeStyle(lineWidth: 5, lineCap: .round, lineJoin: .round, miterLimit: .infinity, dash: [20,0], dashPhase: 0))
添加线性渐变1LinearGradient(gradient: Gradient(colors: [Color(#colorLiteral(red: 0.3647058904, green: 0.06666667014, blue: 0.9686274529, alpha: 1)), Color(#colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1))]), startPoint: .topLeading, endPoint: .bottomTrailing)
添加旋转1.rotationEffect(Angle(degrees: 90))
...
经验分享 未读
SwiftUI 学习笔记 56:项目7 消费记录app 复习今天将内容完善。
使用Userdefault12345678910111213141516171819202122class Expenses: ObservableObject { @Published var consumptionList: [Action]{ didSet { let encoder = JSONEncoder() if let encoded = try? encoder.encode(consumptionList){ UserDefaults.standard.set(encoded, forKey: "consumptionList") } } } init() { if let consumptionList = UserDefaults.standard.data(forKey: " ...
经验分享 未读
SwiftUI 学习笔记55:项目7 消费记录app 复习这是一个记录消费的一个app,主要练习的是Userdefult的使用。今天就先把前端部分完成,明天完成其他部分和优化。
与@ObservedObject共享SwiftUI状态@State 只能监控 结构 的更改,很难监控到 类 的更改,这个时候需要使用@ObservedObject
如果你想使用一个类与SwiftUI数据-你会想要做的,如果该数据跨多个视图共享-然后SwiftUI给了我们两个属性包装是有用的:@ObservedObject和@EnvironmentObject。稍后我们将研究环境对象,但现在让我们集中关注观察到的对象。
这是一些创建User类的代码,并在视图中显示用户数据:
1234567891011121314151617class User { var firstName = "Bilbo" var lastName = "Baggins"}struct ContentView: View { @State private var user = User() var bod ...
经验分享 未读
将添加了勾选了Git的Xcode项目如何上传到Github因为准备开始做一些练习项目上传到GitHub(我相信这是一个很好的开始)然后被网上的教程一顿坑(包括代码全部丢失,还好我有Time Machine)准备自己出一个(再也不相信网上的教程了)。
前排预警:此教程仅适合曾经在GitHub上传过项目的人(仅针对我自己)
1.在GitHub上创建项目
2.进入项目目录并更改为远程仓库使用cd命令进入Xcode项目文件夹
例子:cd /Users/zhhoo/Desktop/challenge2-mora
git remote add origin 加上你的项目地址(可以从GitHub直接复制)
例子:git remote add origin git@github.com:zhhoo/Multiplication_test_generation.git
3.添加文件更新以及描述git add *
git commit -m "首次更新"
4.合并仓库到本地git pull --rebase origin master
5.提交到远程仓库git push origin master
完成之后就可以用平常维护的方法来更新了
经验分享 未读
SwiftUI 学习笔记 54:挑战 for 35day 改进继续对昨天的程序进行改进,增加分数系统和答案查看。
在不同组件传递状态值在组件中增加binding:
1@Binding var menuClear: Bool
在有状态的父级在调用时输入变量所对应的状态值:
1AvatarButton(menuClear: $menuClear)
使用Binding时出现错误请看下一条。
在不同页面调用状态值后(使用Binding后) Previews 出现了错误12345struct HomeView_Previews: PreviewProvider { static var previews: some View { HomeView(menuClear: .constant(false)) }}
代码
GitHub:
引用站外地址,不保证站点的可用性和安全性
Multiplication_test_generation
张洪Heo
...
经验分享 未读
SwiftUI 学习笔记 53:挑战 for 35day (ChallengeFor35)之前有个生成乘法的挑战被我搁置了,现在重新做一下。
对于这个挑战我主要的难点是抛弃了曾经在python中经常使用的字典概念(我是新手),使用结构和点记法来进行编程。
其中有几次白屏,后来发现是因为自己对于数量的判断上没有写好。当循环到一个不存在的数据上时就会停止工作,白屏。
代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104//// ContentView.swift// ChallengeFor35//// Created by 张洪Hoo on 2020/4/5.// Copyright © 2020 张洪Hoo. All rights reserved.//import SwiftUIstruct ContentV ...
经验分享 未读
SwiftUI 学习笔记 52:项目4 复习 (Practise 2-4for2)这个时间这部分真的太难了。再练习一遍。增强熟练度。
时间选择器样式时间选择器隐藏文本标签,时间选择器只显示小时和分钟。
123DatePicker(selection: $wakeUp, displayedComponents: .hourAndMinute, label: { Text("Please enter a date") }) .labelsHidden() .datePickerStyle(WheelDatePickerStyle())
读取和写入时间的特定部分1234var components = DateComponents()components.hour = 8components.minute = 0let date = Calendar.current.date(from: components)
有可能出错的情况下使用 do catch 结构抓取错误12345678910111213141516do { ...
经验分享 未读
SwiftUI 学习笔记 51:项目 4 复习 (Practise 2-4)计算适合睡眠的时间,暂且估计可能要重复练习很多次,这里在日期中的处理还是比较麻烦的。
日期选择器使用日期选择器之前需要创建一个Date()属性:
1@State private var wakeUp = Date()
然后,你可以将其绑定到日期选择器,如下所示:
123var body: some View { DatePicker("Please enter a date", selection: $wakeUp)}
如果要隐藏日期选择器的标题,除了删除掉文本标签(这样会使屏幕阅读器的用户无法使用)还可以将日期选择器包裹在Form表单
12345var body: some View { Form { DatePicker("Please enter a date", selection: $wakeUp) }}
或者添加..labelsHidden()修饰符:
1234var body: some View { DatePicke ...
经验分享 未读
SwiftUI 学习笔记 50:项目2 挑战 复习 (Practise 2-3)项目2的挑战部分,增加了存储部分的挑战。
挑战最好的学习方法之一是尽可能频繁地编写自己的代码,因此,你应该尝试以下三种方式扩展此应用程序,以确保你完全了解正在发生的事情:
添加一个@State属性来存储用户的分数,在答案正确与否时对其进行修改,然后将其显示在警报中。
在标志正下方的标签中显示玩家的当前得分。
如果有人选择了错误的标志,请在你的警报消息中告诉他们他们的错误-诸如“错误!那就是法国的国旗。”
【新增】存储分数数据
【新增】默认用户拥有100分
使用UserDefault存储存储数据UserDefaults.standard.set(self.tapCount, forKey: “Tap”)
读取数据@State private var tapCount = UserDefaults.standard.integer(forKey: "Tap")
初始化程序初始化程序是为这个结构一个初始值。我们可以使用init方法来初始化程序,在之前不需要加func,但是必须要包含所有的参数:
12345678910struct Zhhoo { var ...
经验分享 未读
SwiftUI 学习笔记 49:项目2 复习 (Practise 2-3)猜国旗应用的复习。
随机化数组顺序shuffled()方法会自动为我们处理随机化数组顺序。
1var countries = ["Estonia", "France", "Germany", "Ireland", "Italy", "Nigeria", "Poland", "Russia", "Spain", "UK", "US"].shuffled()
胶囊形状裁剪.clipShape(Capsule())
按钮中插入图片12Image("Estonia") .renderingMode(.original)
生成随机数1var correctAnswer = Int.random(in: 0...2)
该Int.random(in:)方法会自动选择一个随机数
代码123456789101112131415161718192021222 ...
经验分享 未读
SwiftUI 学习笔记 48:复习 项目1 挑战 (Practise 2-2)你需要构建一个处理单位转换的应用程序:用户将选择一个输入单位和一个输出单位,然后输入一个值,然后查看转换的输出。
你选择哪种单位取决于你,但是你可以选择以下单位之一:
温度转换:用户选择摄氏度,华氏度或开氏度。
长度转换:用户选择米,公里,英尺,码或英里。
时间转换:用户选择秒,分钟,小时或天。
体积转换:用户选择毫升,升,杯,品脱或加仑。
如果要进行长度转换,则可能有:输入单位的米,千米,英尺,码或英里的分段控件。第二个分段控件,用于输出单位的米,公里,英尺,码或英里。用户在其中输入数字的文本字段。文本视图,显示转换结果。因此,如果选择米作为源单位,将英尺作为输出单位,然后输入10,则将看到32.81作为输出。
下面这两个确实有点难记。写代码的时候又忘了。
滑块Picker
.pickerStyle(SegmentedPickerStyle())
保留两位小数
Text("$ \(finalmon, specifier: "%.2f")")
代码123456789101112131415161718192021222324252627282 ...
经验分享 未读
SwiftUI 学习笔记 47:复习 项目1 (Practise 2-1)重新开始复习前面的东西。
滑块Picker
.pickerStyle(SegmentedPickerStyle())
保留两位小数
Text("$ \(finalmon, specifier: "%.2f")")
代码ContentView.swift
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071//// ContentView.swift// Practise2-1//// Created by 张洪Hoo on 2020/3/29.// Copyright © 2020 张洪Hoo. All rights reserved.//import SwiftUIstruct ContentView: View { @State private var amount = "" @St ...
经验分享 未读
SwiftUI 学习笔记 46:项目 9-4 绘画那是另一个完成的项目,到目前为止,你已经体验了几乎所有SwiftUI的绘图API。你可能想重新构建应用程序,但是请花点时间暂停一下,回顾一下所学到的内容–你可能会在一段时间内不使用所有内容,但重要的是至少要记住所涵盖的内容,以便你可以请稍后再参考。
因此,今天你有另一篇评论来测试你所记得的内容,以及一些使自己编码的挑战。一如既往,这些挑战并不是我所能解决的,但这就是重点–正如美国NFL球员Troy Polamalu曾经说过的那样:“我一直有这样的心态:没有人能比我更好地挑战我。”
你可以随心所欲地解决这些问题,无论何时何地,你都可以顺利解决。另一方面,也许在完成这些练习后,你会发现一些你的知识有些动摇的地方–唯一的方法就是尝试。
挑战最好的学习方法之一是尽可能频繁地编写自己的代码,因此,你应该尝试以下三种方式扩展此应用程序,以确保你完全了解正在发生的事情。
创建一个Arrow由矩形和三角形组成的形状-使其笔直向上是很好的。
使你的Arrow形状的线粗可设置动画。
创建一个ColorCyclingRectangle形状为的矩形表亲ColorCyclingCircle,使我们可以使用属性 ...
经验分享 未读
iOS / iPhone屏幕尺寸和分辨率一篇博客搞定iOS及iPhone的屏幕尺寸等信息参数
手机型号
屏幕尺寸
屏幕密度
开发尺寸
设计分辨率
倍率
4/4S
3.5英寸
326ppi
320*480pt
640*960px
@2x
5/5S/5c/se
4英寸
326ppi
320*568pt
640*1136px
@2x
6/6S/7/8
4.7英寸
326ppi
375*667pt
750*1334px
@2x
6/6S plus/ 7/8 plus
5.5英寸
401ppi
414*736pt
1242*2208px
@3x
X/XS/11 Pro
5.8英寸
458ppi
375*812pt
1125*2436px
@3x
XS Max/11 Pro Max
6.5英寸
458ppi
414*896pt
1242*2688px
@3x
XR/11
6.1英寸
326ppi
414*896pt
828*1792px
@2x
参考资料:iP ...
经验分享 未读
SwiftUI 学习笔记 45:项目 9-3 绘画今天,我们将通过查看特殊效果和动画来将你的绘画技巧发挥到极致。正当我们处于绘画的前沿时,可以公平地说,这些技能不太可能在日常编码中使用,但是正如Ralph Waldo Emerson曾经说过的那样,“我们的目标是超越目标以达到目标。”
当你处理今天的主题时,你将学习如何对形状进行动画处理,这是SwiftUI感觉像魔术一样的另一个实例。但是,正如你之前所看到的,这确实不是魔术– SwiftUI只是响应我们配置视图的方式。这有点像一台Rube Goldberg机器:我们将所有设备正确设置好,使整个机器运转,然后观察正确的输出。
控制动画没有什么不同:我们不想让body视图的属性每秒重新调用60或120次才能获得平滑的动画,因此我们只是提供有关动画进行时应更改内容的说明。它不是很难发现的-也就是说,你不能偶然发现该解决方案-但我希望你同意使用起来很简单。
SwiftUI中的特殊效果:模糊,融合等SwiftUI使我们能够出色地控制视图的呈现方式,包括应用实时模糊,混合模式,饱和度调整等功能。
混合模式使我们可以控制一个视图在另一个视图上的渲染方式。默认模式是.normal,它只是将新视图中的像 ...
经验分享 未读
AppStore应用上架时上传的屏幕快照尺寸有哪些?在上架iOS的AppStore和安卓各大应用市场时需要上传很多尺寸的图。我们只需要准备两个比例的图片利用symbol就可以创建多个尺寸的图片了。
首先先看一下所有的尺寸要求:
iOS
Android
375 * 812
360 * 640
414 * 896
375 * 750
375 * 667
450 * 800
414 * 736
480 * 800
其中只需要制作两种比例,一种全面屏比例(可以以iPhone11Pro的375 * 812为模板),一种传统屏幕比例(可以以iPhone8的375 * 667为模版)。将模版设置为symbol,结合Scale功能和symbol的resizing搭配完成其余部分尺寸。
之后输出切图根据需要切成@2x或@3x