欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS實(shí)現(xiàn)不規(guī)則Button點(diǎn)擊效果實(shí)例代碼

 更新時(shí)間:2019年04月10日 11:39:18   作者:即將成為型男的濤  
這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)不規(guī)則Button點(diǎn)擊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

需求

利用圖片,實(shí)現(xiàn)一個(gè)如圖的按鈕組。

遇到的問(wèn)題

如下圖所示:

  • 功能1、2、3、4的按鈕可以實(shí)現(xiàn)點(diǎn)擊功能。但是在紅色方框四角的位置,也會(huì)響應(yīng)相應(yīng)的點(diǎn)擊事件。
  • 紫色方框內(nèi)四角區(qū)域點(diǎn)擊時(shí),響應(yīng)的方法是功能5,而不是對(duì)應(yīng)的功能。

解決思路

期望的結(jié)果

  • 尋找到合適的Button來(lái)處理點(diǎn)擊事件

需要弄明白的問(wèn)題

  • 事件在如何傳遞的?
  • 怎么判斷誰(shuí)來(lái)處理當(dāng)前事件?

事件是如何傳遞的?

  1. 當(dāng)用戶觸摸實(shí)際屏幕時(shí),會(huì)生成一個(gè)Touch Event,將此事件添加到UIApplication管理的事件隊(duì)列之中。
  2. UIApplication從事件隊(duì)列之中按順序取出事件分發(fā)到視圖去處理。
  3. 當(dāng)事件被發(fā)出以后,會(huì)從keyWindow開(kāi)始,依次向上傳遞,包括Controller以及View,最后找到合適的視圖來(lái)響應(yīng)事件。

可以看出:當(dāng)一個(gè)事件發(fā)生后,事件會(huì)從父控件傳給子控件,也就是說(shuō)由UIApplication -> UIWindow -> UIView -> initial view,以上就是事件的傳遞,也就是尋找最合適的view的過(guò)程。

涉及到兩個(gè)方法:

func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
func point(inside point: CGPoint, with event: UIEvent?) -> Bool

當(dāng)UIApplication發(fā)送事件到keyWindow時(shí),會(huì)調(diào)用 hitTest來(lái)尋找最合適的視圖處理事件。判斷邏輯如下:

  1. 首先判斷自身是否能夠響應(yīng)觸摸事件(userInteractionEnabled==true、hidden==true、alpha<=0.01不能響應(yīng)觸摸事件),若能響應(yīng)則下一步,否則返回nil。
  2. 如果可以響應(yīng)觸摸事件,調(diào)用pointInside來(lái)判斷是否在顯示區(qū)域內(nèi),如果不在其中,pointInside返回false,同時(shí)hitTest返回nil。
  3. 如果 pointInside返回true,表示在當(dāng)前的視圖之中,然后倒序遍歷該視圖的子視圖,重復(fù)上述步驟,直到某一視圖可以響應(yīng),hitTest:返回該視圖。
  4. 如果執(zhí)行完上述步驟以后,沒(méi)有符合條件的視圖響應(yīng)事件,則返回視圖本身,表示只有當(dāng)前視圖符合條件,能夠處理該事件。

 Q:為什么倒序遍歷?
 A:因?yàn)樵趕ubViews數(shù)組中,最后添加的視圖,在視圖層級(jí)中處于最上方。

怎么判斷誰(shuí)來(lái)處理當(dāng)前事件?

當(dāng)知道的上面事件傳遞機(jī)制后,我們就能理清楚我們的Button處理事件的邏輯了:

1、自定義Button繼承自系統(tǒng)的Button。

2、重寫(xiě) point(inside point: CGPoint, with event: UIEvent?) -> Bool 方法。在其中判斷當(dāng)前事件是否需要自身處理。

  • 判斷點(diǎn)是否在自身button.imageView的frame范圍內(nèi)
  • 得到點(diǎn)擊點(diǎn)在button.imageView中該點(diǎn)的顏色值
  • 如果得到的色值中alpha小于閥值,則返回false

具體代碼可以查看JTShapedButton源碼 (本地下載)。

實(shí)現(xiàn)效果


總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • ios下OC與JS交互之WKWebView

    ios下OC與JS交互之WKWebView

    本篇文章主要介紹了ios下OC與JS交互之WKWebView,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • IOS游戲開(kāi)發(fā)之五子棋OC版

    IOS游戲開(kāi)發(fā)之五子棋OC版

    五子棋是大家比較熟悉的一款小游戲,相信很多人用多種語(yǔ)言寫(xiě)過(guò)五子棋小游戲,本文試著用OC實(shí)現(xiàn)了一下,在這里給大家分享一下。有需要的可以參考學(xué)習(xí)。
    2016-08-08
  • Xcode中Info.plist字段詳解

    Xcode中Info.plist字段詳解

    我們通過(guò)本篇文章給大家整理了Xcode中Info.plist字段的詳細(xì)內(nèi)容,有需要的朋友學(xué)習(xí)下。
    2018-01-01
  • iOS實(shí)現(xiàn)微信搖一搖功能

    iOS實(shí)現(xiàn)微信搖一搖功能

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)微信搖一搖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • IOS 波紋進(jìn)度(waveProgress)動(dòng)畫(huà)實(shí)現(xiàn)

    IOS 波紋進(jìn)度(waveProgress)動(dòng)畫(huà)實(shí)現(xiàn)

    這篇文章主要介紹了IOS 紋進(jìn)度(waveProgress)動(dòng)畫(huà)實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • iOS8調(diào)用相機(jī)報(bào)警告Snapshotting a view的解決方法

    iOS8調(diào)用相機(jī)報(bào)警告Snapshotting a view的解決方法

    這篇文章主要介紹了iOS8調(diào)用相機(jī)報(bào)警告Snapshotting a view……的解決方法 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • iOS實(shí)現(xiàn)圖片壓縮的兩種方法及圖片壓縮上傳功能

    iOS實(shí)現(xiàn)圖片壓縮的兩種方法及圖片壓縮上傳功能

    ios 圖片壓縮有兩種方法,分別是,壓縮圖片質(zhì)量(Quality),壓縮圖片尺寸(Size),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2017-01-01
  • UITableViewCell在編輯狀態(tài)下背景顏色的修改方法

    UITableViewCell在編輯狀態(tài)下背景顏色的修改方法

    這篇文章主要給大家介紹了關(guān)于UITableViewCell在編輯狀態(tài)下背景顏色的修改方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • 淺談Xcode 開(kāi)發(fā)工具 XCActionBar

    淺談Xcode 開(kāi)發(fā)工具 XCActionBar

    本文主要給大家簡(jiǎn)單講解了Xcode的開(kāi)發(fā)工具 XCActionBar的介紹與使用方法,非常的全面實(shí)用,有需要的小伙伴可以參考下。
    2015-11-11
  • iOS開(kāi)發(fā)實(shí)戰(zhàn)之Label全方位對(duì)齊的輕松實(shí)現(xiàn)

    iOS開(kāi)發(fā)實(shí)戰(zhàn)之Label全方位對(duì)齊的輕松實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于iOS開(kāi)發(fā)實(shí)戰(zhàn)之輕松實(shí)現(xiàn)Label全方位對(duì)齊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10

最新評(píng)論