iOS 搭建“美圖(貼紙,涂鴉,文字,濾鏡)”系列

開(kāi)門見(jiàn)山,先看效果圖:

StoryMaker.gif

小姐姐有沒(méi)有很好看!是不是該點(diǎn)一波贊!(無(wú)恥,滾粗。。)
可能你已經(jīng)認(rèn)出來(lái)了,低調(diào)低調(diào)。。回歸正題,咳咳。。
( ̄ε(# ̄)╰╮o( ̄皿 ̄///)

主界面UI構(gòu)成:

主界面.png
  • 主體 ImageView ,初始化的時(shí)候加載初始圖
  • ToolsView,上方"Close"和"Next"按鈕,下方四個(gè)功能按鈕,從左到右分別是"貼紙 | 涂鴉 | 文字 | 濾鏡"
貼紙 | 涂鴉 | 文字 | 濾鏡.png

大致的流程,一開(kāi)始,四個(gè)功能 View 初始化完畢,隱藏在屏幕的下發(fā),hidden = YES,點(diǎn)擊按鈕,隱藏NO,做一個(gè) UIView 的平移動(dòng)畫到屏幕正中心,結(jié)束編輯再次平移下去,隱藏YES。

  1. 每次選中貼紙,會(huì)在主界面生成一個(gè)支持多種手勢(shì)的ImageView(不然咋旋轉(zhuǎn)放大),然后 addSubview 到主體
    ImageView
  2. 涂鴉結(jié)束,渲染一張 ImageView ,然后 addSubview 到主體
    ImageView
  3. 添加文字(圖中是一只顏文字拼出來(lái)的狗狗)后,同樣會(huì)在主界面生成一個(gè)支持多種手勢(shì)的 Label,然后 addSubview 到主體
    ImageView
  4. 濾鏡,最開(kāi)始是通過(guò)CPU來(lái)實(shí)現(xiàn)的,轉(zhuǎn)換成像素然后濾鏡計(jì)算得到。意味著有多少種濾鏡要生成多少新圖片,太耗內(nèi)存,不推薦用,后續(xù)改良。

點(diǎn)擊"Next"按鈕用 ImageViewLayer 渲染出編輯后的新
Image,傳遞到后續(xù),Demo中是保存到相冊(cè)。

實(shí)現(xiàn)思路:

在這先說(shuō)一下大致的實(shí)現(xiàn)思路,后續(xù)系列將詳細(xì)介紹。

  1. 貼紙的模糊是 UIVisualEffectView 的毛玻璃效果。
  2. 貼紙和文字的放縮、選擇、移動(dòng)手勢(shì)分別是
    UIPinchGestureRecognizerUIRotationGestureRecognizerUIPanGestureRecognizer,且通過(guò)delegate回調(diào)放縮和選擇可以同時(shí)識(shí)別。
  3. 涂鴉是通過(guò)下面三個(gè)方法,獲取到手指位置,并實(shí)時(shí)通過(guò)UIBezierPath畫出來(lái)的,而且偷偷地告訴你,美圖秀秀的涂鴉實(shí)現(xiàn)也是類似的。當(dāng)你打開(kāi)涂鴉界面,先將你右姑娘的食指按下去,別動(dòng),然后放下你左姑娘的食指,你會(huì)發(fā)現(xiàn),一條直線,緣,妙不可言。( ̄︶ ̄)> <( ̄︶ ̄)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
論如何在涂鴉中劃出直線.png
  1. 雖然貼紙和文字都是 addSubviewImageView 上,屬于平級(jí),但,你點(diǎn)擊會(huì)優(yōu)先選中后者加上去的。因?yàn)樗械馁N紙View都保存在
    @property (nonatomic, strong) NSMutableArray <UIView *> *stickerViewArray;
    里,而且是逆序添加進(jìn)去,所以當(dāng)點(diǎn)擊產(chǎn)生,順序遍歷
    stickerViewArray,假如點(diǎn)擊在 View 中,則停止遍歷。

不足點(diǎn):

  1. 貼紙和文字放大后,border 和刪除都一同放大,其丑無(wú)比,若有童鞋知道解決方法,歡迎告知~
    一起放大的border.和刪除png
  2. 濾鏡通過(guò)CPU來(lái)針對(duì)像素點(diǎn)處理,內(nèi)存消耗太多,后續(xù)換其他方式。
  3. 目前沒(méi)有撤銷操作,確實(shí)有點(diǎn)尷尬。正在構(gòu)思中。。(~ ̄ ̄~)

WHStoryMaker接入說(shuō)明:

  1. 在你需要用到 WHStoryMaker 的時(shí)候引用 WHStoryMakerHeader.h 頭文件,StoryMakeImageEditorViewController 就是你需要的VC。
  2. StoryMakeImageEditorViewController 只提供一種初始化方法
    - (instancetype)initWithImage:(UIImage *)image;
    在初始化的時(shí)候傳入 Image
  3. WHStoryMaker 依賴了 Masonry,寫的時(shí)候習(xí)慣性就用了,受“毒害”太深,哈哈。。 ̄ ̄

Github鏈接:

https://github.com/Balzac646729740/WHStoryMaker.git

覺(jué)得不錯(cuò)就點(diǎn)個(gè)贊唄,不要吝惜它,點(diǎn)!( ̄ε ̄)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,196評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 175,688評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 62,654評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,456評(píng)論 6 406
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 54,955評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,195評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,725評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,608評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,802評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,048評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,422評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,673評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,424評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,762評(píng)論 2 372

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,151評(píng)論 4 61
  • 最近看過(guò)一篇文章,大概意思主要介紹現(xiàn)在的年輕人沒(méi)有生活的方向,不知道生活的意義。尤其是文章中提到的人竟然是...
    墨筆書香閱讀 907評(píng)論 0 0
  • 歲月深深又淺淺 日子長(zhǎng)長(zhǎng)又短短 旅途是一場(chǎng)光和影的重疊 我突然在旅程中醒來(lái) 今夜夜涼如水 任思緒慵懶呆滯 放逐目光...
    云妮yunni閱讀 316評(píng)論 0 8
  • 搜索欄 搜索欄接收用戶輸入用于搜索的文本(如下,帶有占位文本)。 API NOTE查看UISearchBar學(xué)習(xí)如...
    Cloudox_閱讀 277評(píng)論 0 0