之前項(xiàng)目中設(shè)計(jì)到一些重要的消息是以本地push的方式發(fā)送出來讓用戶知道,如果用戶手動(dòng)關(guān)閉了通知權(quán)限或者不允許浓镜,就沒辦法把重要的信息送達(dá)用戶。但是需求又想所有用戶都能看到收到push抒寂。所以自定義了一個(gè)類似于滴滴客戶端里面的消息push效果隔心。效果可以看下圖:
實(shí)現(xiàn)原理:
通過自定義了一個(gè)DQNotifyView,添加一個(gè)顯示時(shí)間的timer和滑動(dòng)手勢(shì)竟痰,手勢(shì)如果滑動(dòng)距離超過高度的一半就開始影藏掉签钩,如果沒有超過一半掏呼,重置回顯示的位置,重置timer的時(shí)間铅檩,顯示的影藏的時(shí)候通過動(dòng)畫的方式展現(xiàn)憎夷。
DQNotifyManager創(chuàng)建一個(gè)window屬性,設(shè)置window的windowLevel使之顯示在最上層昧旨,把自定義的view顯示在window上面拾给,控制window的isHidden屬性可以達(dá)到顯示影藏的效果。
現(xiàn)在做得比較簡(jiǎn)單兔沃,只是簡(jiǎn)單的達(dá)到了顯示的效果蒋得,后續(xù)后持續(xù)更新,增加點(diǎn)擊跳轉(zhuǎn)到具體頁面乒疏,當(dāng)有多條push同時(shí)發(fā)來需要展示時(shí)候增加隊(duì)列管理等邏輯额衙。
集成方式也很簡(jiǎn)單,自定義自己想要的文字內(nèi)容怕吴,代碼如下:
let item = DQNotifyItem()
item.title = String(format: "新消息:%d", i)
item.content = String(format: "這是一條測(cè)試的新消息:%d", i)
DQNotifyManager.shared.showNotifyView(item)
如果喜歡請(qǐng)給個(gè)??窍侧,有什么好的建議也請(qǐng)?zhí)峤o我。
最后附上 demo地址