Fork me on GitHub

本行三件事:猎龙 训龙 调教龙

大家好,我是花木兰。

第一件

今天在Nothing项目中添加了一个小的功能,就是按压屏幕出现一个有弹出效果的Label,涉及到的点;

  1. thereis
  • touches

我们知道,UIResponder处理函数,根据不同的触摸状态会调用不同的函数,以下:

1
2
3
4
5
6
7
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

注意第四个取消函数,调用时机是触摸被取消,一定要注意是被取消,自己主动点击然后结束这不叫取消,举个例子如在触摸过程中被来电打断,这种情况才算;
回调中可以通过UITouch来操作点击次数和手指数,UIEvent可以操作屏幕点信息,这样就把手指与屏幕的交互处理完成。

  • transform
    这里出现了一个现象,原代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //进入时的设置
    //向x y轴方向平移 0 0
    self.transform = CGAffineTransform(translationX: 0, y: 0) //(1)
    self.transform = CGAffineTransform(rotationAngle: 0) // (2)

    self.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) //(3)
    //transform scale 改变中间不能添加其他变换
    //动画播放
    UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: {
    self.transform = CGAffineTransform(scaleX: 1, y: 1)
    }, completion: nil) //(4)

如上代码(2)如果放在(3)(4)的中间,则动画会不执行,直接形成动画后的结果,天知道这其中发生了什么,怕是动画函数做了某些优化,如果你知道,还请赐教。

  • Another Problem
    1
    2
    3
    4
    5
    6
    7
    8
    UIView.animate(withDuration: 1, delay: 0, 
    usingSpringWithDamping: 0.5,
    initialSpringVelocity: 0.5, options: .curveEaseIn, animations: {
    self.transform = CGAffineTransform(scaleX: 1, y: 1)
    }, completion: nil)
    // 抗阻尼 以及 弹簧 的问题
    // 涉及到了一些物理知识,不细究
    // 只是贴出这个api 注意用法
  1. 仿射变换

仿射空间和仿射变换
关于仿射变换的先看这篇文章了解一下吧,它是计算机图形学中一个很重要的概念,简单的理解就是线性变换加上平移变换,当然看到这里你得先知道什么是线性变换和平移变换,好了,这个概念先不多说了。

  1. currying function

经过了一系列的实验,最终得出了一个函数链的方案,虽然跟柯里化没有什么关系,代码如下,细细品味一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public func maybe(noDate: NODate, _ some: () -> ()) -> ThereIs {
switch noDate {
case let .April(date):
let myDate = date.toDate()
let currentDate = Date()
if let myDate = myDate {
if myDate.compare(currentDate) == .orderedSame {
some()
}
}
}
return self
}

其实也没有多么深奥,只是函数在调用外部传进的闭包后又返回了自身,然而,就是一个这样简单的设计,在调用时你会发现是多么的便利;

1
2
3
4
5
6
_ = thereis?.maybe(noDate: dates[0]) {
self.noLabel.appear()
}
.maybe(noDate: dates[1]) {

}

上图中的maybe函数可以无限调用,这样根据传进来的参数可以实现一个小功能,如果将本方法的类似方法分散在不同的函数中调用,那么我们可以用传进不同参数来区分调用的时机,这样可以将某一次的逻辑调用统一在一个地方处理,说的有点绕,用一张图来理一下思路:
maybe函数思维导图

第二件

此时我面前有一个作业,叫做文献综述,今天跟老铁聊天中发现自己在面对困难问题时拖延的问题。朋友说当你有一大堆的事情不知道做哪件时,挑最难的那件事情做。
于是把每天最棘手的问题做为首要,比方说难做的作业,比方说写一篇文章。
轻课听力
上图是昨晚在轻课群的口语练习,留作复习用。

第三件

已经很久没有写日志了,这么些年断断续续的,从来没把它当作一个习惯来做。在github上看到一个学习库,有所启发,想来该培养一个习惯来让自己保持一个学习的状态。完成的并不一定要完美,完成就好,记录下心情,记录下问题,记录下昨天那个“愚蠢”的自己。

0%