美文网首页
斯坦福公开课Swift笔记6:画图和手势(UIBezierPat

斯坦福公开课Swift笔记6:画图和手势(UIBezierPat

作者: CyberDunk1997 | 来源:发表于2020-07-08 16:56 被阅读0次

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

相关文章

网友评论

      本文标题:斯坦福公开课Swift笔记6:画图和手势(UIBezierPat

      本文链接:https://www.haomeiwen.com/subject/zpbccktx.html