從頭開(kāi)始swift2.1 仿搜材通項(xiàng)目(五) 通用的點(diǎn)擊效果

早上我們已經(jīng)完成了首頁(yè)界面的布局,有朋友私信問(wèn)我油坝,怎么沒(méi)在布局時(shí)加上button嫉戚,難道后面我們不點(diǎn)擊跳轉(zhuǎn)啊澈圈?好吧彬檀,這里我們提前做一個(gè)效果,往之前提到的Library中添加第一個(gè)我們自己的控件->HMTouchView.
在Library下新建一個(gè)View文件夾瞬女,以后我們?nèi)绻儆凶远x的View就統(tǒng)一放到這個(gè)位置了窍帝。拖拽View文件夾進(jìn)Xcode中Library下:


QQ20151221-9@2x.png

創(chuàng)建一個(gè)HMTouchView,繼承UIView


QQ20151221-10@2x.png

我直接上代碼了诽偷,都有注釋:
import UIKit

class HMTouchView: UIView {
    
    /// 點(diǎn)擊回調(diào)
    private var clickhandler:((id:String?) -> Void)?
    /// 原本背景色
    private var originalColor:UIColor?
    
    /**
     為View添加點(diǎn)擊事件坤学,id即StoryBroad中設(shè)置的Restoration ID
     
     - parameter handler: 點(diǎn)擊后觸發(fā)的回調(diào)
     */
    func click(handler:((id:String?) -> Void)? ){
        originalColor = self.backgroundColor
        if handler != nil {
            self.clickhandler = handler
            //為View添加手勢(shì),觸發(fā)clickAction
            let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "clickAction")
            self.addGestureRecognizer(tapGesture)
        }
    }
    
    func clickAction(){
        //執(zhí)行一個(gè)改變背景的動(dòng)畫(huà)报慕,你甚至可以做一個(gè)比較酷炫的翻轉(zhuǎn)深浮、旋轉(zhuǎn)、放大縮小等
        UIView.animateWithDuration(0.3, delay:0.01,
            options:UIViewAnimationOptions.TransitionNone, animations:
            {
                ()-> Void in
                //self.layer.setAffineTransform(CGAffineTransformMakeRotation(90)) //旋轉(zhuǎn)
                //這里我們只做一個(gè)普通的變色效果
                self.backgroundColor = UIColor(red:227/255.0, green:227/255.0, blue:227/255.0, alpha:1.0)
            },
            completion:{
                (finished:Bool) -> Void in
                UIView.animateWithDuration(0.3, animations:{
                    ()-> Void in
                    //self.layer.setAffineTransform(CGAffineTransformIdentity) //恢復(fù)
                    //恢復(fù)為原本的顏色
                    self.backgroundColor = self.originalColor
                    //動(dòng)畫(huà)結(jié)束眠冈,執(zhí)行回調(diào)
                    self.clickhandler?(id:(self.restorationIdentifier))
                })
        })
    }
    
}

現(xiàn)在我們?nèi)toryBroad中拿一個(gè)View過(guò)來(lái)試試效果飞苇,就用這個(gè)商圈互動(dòng)吧,我們要把整塊商圈互動(dòng)的區(qū)域加上點(diǎn)擊事件和效果。


QQ20151221-11@2x.png

現(xiàn)在我們將它的Class修改為我們自定義的HMTouchView:


QQ20151221-12@2x.png

然后連線到ViewController中布卡,命名為circleListLayout:
QQ20151221-13@2x.png

新增一個(gè)initLayout方法雨让,里面使用circleListLayout.click方法


QQ20151221-14@2x.png
    func initLayout(){
        circleListLayout.click { (id) -> Void in
            print("hello")
        }
    }

現(xiàn)在我們運(yùn)行一下看看效果:


QQ20151221-15@2x.png

效果已經(jīng)出來(lái)了,而且事件也響應(yīng)了羽利,如果其它有什么View也需要點(diǎn)擊事件的話宫患,也是一樣的步驟,在SB中修改為HMTouchView这弧,即可在VC中使用上面的代碼添加點(diǎn)擊事件娃闲。不過(guò)我們還可以再優(yōu)化一下,現(xiàn)在我們?cè)賮?lái)看看匾浪。
現(xiàn)在我們分別把商圈互動(dòng)皇帮、咨詢專家、建材價(jià)格和市場(chǎng)供應(yīng)修改成了HMTouchView蛋辈,并連線到VC中属拾。

    @IBOutlet weak var circleListLayout: HMTouchView!
    @IBOutlet weak var personListLayout: HMTouchView!
    @IBOutlet weak var priceListLayout: HMTouchView!
    @IBOutlet weak var marketLayout: HMTouchView!

如果我們要為這4個(gè)View設(shè)置點(diǎn)擊事件的話,我們得這樣寫:


QQ20151221-16@2x.png

有沒(méi)有比較簡(jiǎn)單一些的辦法呢冷溶?現(xiàn)在我們回到HMTouchView類中渐白,添加一個(gè)方法:

    /**
     一次性為多個(gè)View設(shè)置點(diǎn)擊事件
     
     - parameter views:   view集合
     - parameter handler: 回調(diào)
     */
    class func setOnClickHandler(views:[HMTouchView]?, handler:((id:String?) -> Void)? ){
        for view in views! {
            view.click(handler)
        }
    }

注意這個(gè)方法需要加上class修飾符,這樣的話我們就可以直接使用HMTouchView調(diào)用這個(gè)方法了逞频。


QQ20151221-17@2x.png

現(xiàn)在回到SB中為各個(gè)View添加一個(gè)ID纯衍,如圖所示:


QQ20151221-18@2x.png

直接在VC中調(diào)用這個(gè)方法,并print出id
        HMTouchView.setOnClickHandler([circleListLayout,personListLayout,priceListLayout,marketLayout]) { (id) -> Void in
            print(id)
        }

QQ20151221-19@2x.png

OK苗胀,效果還不錯(cuò)襟诸,本節(jié)就到這里,洗洗睡吧基协。
Git地址:https://github.com/bxcx/sctong
本節(jié)分支:https://github.com/bxcx/sctong/tree/4th_HMTouchView

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歌亲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子澜驮,更是在濱河造成了極大的恐慌陷揪,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杂穷,死亡現(xiàn)場(chǎng)離奇詭異鹅龄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)亭畜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門扮休,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人拴鸵,你說(shuō)我怎么就攤上這事玷坠∥仙Γ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵八堡,是天一觀的道長(zhǎng)樟凄。 經(jīng)常有香客問(wèn)我,道長(zhǎng)兄渺,這世上最難降的妖魔是什么缝龄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮挂谍,結(jié)果婚禮上叔壤,老公的妹妹穿的比我還像新娘。我一直安慰自己口叙,他們只是感情好炼绘,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著妄田,像睡著了一般俺亮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疟呐,一...
    開(kāi)封第一講書(shū)人閱讀 52,821評(píng)論 1 314
  • 那天脚曾,我揣著相機(jī)與錄音,去河邊找鬼启具。 笑死本讥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的富纸。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼旨椒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晓褪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起综慎,我...
    開(kāi)封第一講書(shū)人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涣仿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后示惊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體好港,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年米罚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钧汹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡录择,死狀恐怖拔莱,靈堂內(nèi)的尸體忽然破棺而出碗降,到底是詐尸還是另有隱情,我是刑警寧澤塘秦,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布讼渊,位于F島的核電站,受9級(jí)特大地震影響尊剔,放射性物質(zhì)發(fā)生泄漏爪幻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一须误、第九天 我趴在偏房一處隱蔽的房頂上張望挨稿。 院中可真熱鬧,春花似錦霹期、人聲如沸叶组。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)甩十。三九已至,卻和暖如春吭产,著一層夾襖步出監(jiān)牢的瞬間侣监,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工臣淤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留橄霉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓邑蒋,卻偏偏與公主長(zhǎng)得像姓蜂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子医吊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

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