Swift 100 Days:Project 21 –通过手势和Youtube(如播放器和详细信息)放松Segue和NSNotification

环境:Swift 4 /日期:69〜78 /日期:2018年1月3日/时间:30小时

我学到什么:

・ NSNotification进行一个画面内“三个ViewControllers”的通知与重构・手势利用NSNotification解决冲突,滚动查看并平移手势
・ Youtube喜欢播放器和细节
・放开Segue


小知识:

1.展开Segue展开 Segue又称为返回Segue,在
Project 6的小知识有聊到,那时候还不甚全然清楚,后来才发现真是重要且好用。

 情境: 
您的App一开始不强制用户登录,但一旦要使用特定功能,如:留言,就必须得先登录。
这时,你要引导使用者进入登录画面,登录了,然后呢?
1.呈现方式到首页,让使用者再度从头寻找留言画面
2.放松Segue至刚刚的留言画面很明显的地,第二个是更好的用户体验。

2. NSNotification
NSNotification俗称通知,一般来说是一个物件(发布者)向其他物件(订阅者)发送消息,Apple本身对于通知的使用也蛮连续的,像是Keyboard的弹起与收起UIKeyboardWillShowNotification / UIKeyboardWillHideNotification 。我在这个专案中,是使用在ViewControllers之间的监听来触发手势。

首先,开发者要先想清楚,是谁要听谁?又要听什么东西?

以我的案例,孩子要听父母的var enableChildScroll ,当父母的var enableChildScroll = true时,孩子的TableView, TextView or any scrollableView.isScrollEnable = true

也就是说,小狗眼前摆一盘食物,巴巴地望着主人,等待主人发号施令:「吃! (var enableChildScroll = true) ”,狗狗才可以吃(.isScrollEnable = true)

那我们就开始编码吧!
观察者:Child;被观察者:Parent

1.在ChildVC的ViewDidLoad做一个addObserver的动作,顾名思义,开始观察啰

  [[子]] <> NotificationCenter.default.addObserver(自己,选择器:#selector(catchScrollNotification(notification :)),名称:NSNotification.Name(rawValue:scrollNotification),对象:nil) 

2.做完上述事情,会爆一些错误,因为我们catchScrollNotification添加catchScrollNotificationscrollNotification

  [[小孩]] 1。 添加scrollNotification的常量,这个“ scrollEnable”将会在父母中再度被添加,也就是一个Key的概念let scrollNotification =“ scrollEnable” 2.添加catchScrollNotification,也就是从Child观察到Parent变化之后要做什么的功能,先暂时放一个Empty的函数,让错误消除,其余内容,我们以后再添加。 
@objc func catchScrollNotification(notification:Notification)->无效{

}

3.前进ParentVC,添加一些基础的变数

  [[父母]] 1。 与Child同样的Key 
let scrollNotification =“ scrollEnable” 2.变数enableChildScroll
var enableChildScroll = false 3.范例这边,简单配置一个Button,你可以使用任何动作,我在专案中是使用Pan Gesture触发
@IBAction函数setScrollToTrue(_ sender:UIButton){ }

4.做完ParentVC的基础变数跟函数,接下来是重点啦〜怎么从Parent使用NSNotification告诉观察者,enableChildScroll移动了

  [[父]] @IBAction函数setScrollToTrue(_ sender:UIButton){ 

1.让enableChildScroll变成true
enableChildScroll = true 2.通知做一个帖子的动作,同样使用scrollNotification的Key,
并且添加一个类似参数的userInfo,里面是一个

「“ enable”为键」与「enableChildScroll为value」的形式。

NotificationCenter.default.post(name:Notification.Name(rawValue:scrollNotification),object:self,userInfo:[“ enable”:enableChildScroll]) }

5.回到ChildVC,接收从Parent来的消息。

  [[小孩]] 1。 之前就建立的catchScrollNotification 
@objc func catchScrollNotification(notification:Notification)->虚空{ 2.还记得前面所说的吗,在父母中,张贴一个

「enable」为键与「enableChildScroll为value」的参数
我们在这里使用“ enable”的键接收值。guardlet以防错误。

警卫让启用= notification.userInfo![“启用”]
否则{return}
3. enable会是一个Any的Type,我们先把它转成Bool
让enableOrNot =启用为! 布尔

4.最后就可以在tableView中,或者任何你需要使用到的ScrollView进行判断啰!
tableView.isScrollEnabled = enableOrNot }

6.仅此而已! 呼真是多余~~本来是想说市面NSNotification的教学文都写得像老太婆的裹脚布般又臭又长,我来试着统整一下,干结果我写得更裹脚布真抱歉XD


心得:

做你没做过的事情叫成长,做你不愿意做的事情叫改变,做你不敢做的事情叫突破。

每一天工作,我都尝试做自己没做过的事情,学习新的观念,新的语言,新的想法,因为我很清楚感觉到这是成长。

每一天下班后,在前往兼职公司的路上,都有股冲动想要一个右转往温暖的家飞奔,但深呼吸后给自己几句鼓励的话,还是得坚决地催油门,回家之前再拼一波
每一天完成一整天的事情,回到家躺在床上的时候,我强迫自己读课外书,最近是经济学的书,有点无聊又有点有趣,因为我看着看着快睡着,却又获得另一个看待世界的新奇角度。
一整天的耗脑耗力,绝对是身心灵疲弱,为什么要强迫自己做这么痛苦的事情,因为我很清楚这除了成长,更是改变,克服自己的懒惰,跳脱世俗的朝九晚五,更重要的是心境的改变,每一天都要比昨天的自己强一点点。

每一天我都在想,还有什么事情是我可以做的,但还没机会做的,大概是我比较大胆,目前没所谓不敢,又或者是说那些我还没做的事情,都是我没有勇气接触的世界。感谢巴菲特发人省思的一句话,也许,接下来就是突破了。

PS最近更新文频率最高,因为专案赶个没完,默默地只剩22天了OMG! 中间其实有想写一些知识文,完全没时间QQ,CS193P也被我束之高阁,懒惰虫又爬进我睡窝,开始各种偷懒,最后一圈了,订个小目标,三天一文,所以大概还会有7个项目(摩拳擦掌〜