斯坦福公开课Swift笔记6:画图和手势(UIBezierPat
2020-07-08 本文已影响0人
CyberDunk1997
https://www.bilibili.com/video/BV1rb411C7eN?p=27
1. UIGraphicsGetCurrentContext & UIBezierPath
image.png
-
UIGraphicsGetCurrentContext 在strokPath或者fillPath后会删除路径
-
UIBezierPath路径一直存在
UIGraphicsGetCurrentContext 画图.png
UIBezierPath画图.png
-
当横置手机时,画图可能变形,解决办法:重新绘制。View.contentMode = Redraw
Redraw
2 自定义NSAttributedString
自定义NSAttributedString
- UIFontMetrics(forTextStyle)可以设置字体随着ios系统设置的字体大小变化
3 setNeedsDisplay & setNeedsLayout
setNeedsDisplay
-
setNeedsDisplay(),在需要重新画图时,调用这个方法
-
setNeedsLayout(),在需要重新布局,或者子视图需要布局时,调用这个方法,系统会自动调用layoutSubviews()
-
sizeToFit(),让View(UILabel,UIButton等其他有sizeToFit方法的组件)的大小和内容大小一致。注意:当这个View已经有宽度的时候,sizeToFit()只会增加高度而不改变宽度
-
UILabel(UIButton等)组件有一个transform属性,它可以让组件旋转(绕着左上角),移动,缩放
transform.png
-
圆周率Π在swift中用 CGFloat.pi 表示
4 数组中reduce的使用
let festivals = ["NewYear",
"SpringFestival",
"LabourDay",
"Mid-AutumnFestival",
"NationalDay"]
// 将数组中的每个字符串用”、“拼接
let str = festivals.reduce("$") { (str1, str2) -> String in
return str1 == "$" ? str2 : str1 + "、" + str2
}
print("str: \(str)")
// str: NewYear、SpringFestival、LabourDay、Mid-AutumnFestival、NationalDay
// 返回结果是拼接起来的字符串
// 我们打印一下str1和str2
let strL = festivals.reduce("$") { (str1, str2) -> String in
print("str1: \(str1)")
print("str2: \(str2)")
return str1 == "$" ? str2 : str1 + "、" + str2
}
print("strL: \(strL)")
/*
结果:
str1: $
str2: NewYear
str1: NewYear
str2: SpringFestival
str1: NewYear、SpringFestival
str2: LabourDay
str1: NewYear、SpringFestival、LabourDay
str2: Mid-AutumnFestival
str1: NewYear、SpringFestival、LabourDay、Mid-AutumnFestival
str2: NationalDay
strL: NewYear、SpringFestival、LabourDay、Mid-AutumnFestival、NationalDay
*/
// 案例二
/*
问题描述:
有一份人员名单,要从这些名单中找出来自”北京“的年龄总和.
*/
let persons = [
["姓名": "李二", "性别":"男", "年龄":"23", "籍贯":"山西", "职业":"程序员"],
["姓名": "张倩", "性别":"女", "年龄":"20", "籍贯":"北京", "职业":"体操运动员"],
["姓名": "王淼", "性别":"男", "年龄":"30", "籍贯":"四川", "职业":"饭店老板"],
["姓名": "曾无", "性别":"男", "年龄":"52", "籍贯":"北京", "职业":"公务员"],
["姓名": "梅秉", "性别":"女", "年龄":"35", "籍贯":"北京", "职业":"医生"]
]
let age = persons.reduce(0) { (average, dict) -> Int in
print("average: \(average)")
print("dict: \(dict)")
var ages = average
if dict["籍贯"] == "北京" {
if let str = dict["年龄"],
let tempAge: Int = Int(str) {
ages = ages + tempAge
}
}
return ages
}
print("age: \(age)")
/*
打印结果:
average: 0
dict: ["年龄": "23", "籍贯": "山西", "职业": "程序员", "性别": "男", "姓名": "李二"]
average: 0
dict: ["年龄": "20", "籍贯": "北京", "职业": "体操运动员", "性别": "女", "姓名": "张倩"]
average: 20
dict: ["年龄": "30", "籍贯": "四川", "职业": "饭店老板", "性别": "男", "姓名": "王淼"]
average: 20
dict: ["年龄": "52", "籍贯": "北京", "职业": "公务员", "性别": "男", "姓名": "曾无"]
average: 72
dict: ["年龄": "35", "籍贯": "北京", "职业": "医生", "性别": "女", "姓名": "梅秉"]
age: 107
*/
5 @IBDesignable & @IBInspectable
@IBDesignable .png
- 在class前面加@IBDesignable,可以让你在storyboard中看到编译后的绘图
image.png
- 在UIImage后面加参数,可以在storyboard中看到编译后的图片
@IBInspectable.png
- 在var前面加@IBInspectable,可以让你在Inspector中看到这些属性
6 Gesture
Gesture
image.png
-
UIPinchGestureRecongnizer(缩放手势如何设置)
UIPinchGestureRecongnizer.png
UIPinchGestureRecongnizer.png
-
UISwipeGestureRecongnizer(滑动手势如何设置)
UISwipeGestureRecongnizer.png
-
UITapGestureRecongnizer(点击手势如何设置)
UITapGestureRecongnizer.png