iOS為移動(dòng)中的UIView(UIButton )添加點(diǎn)擊事件
高高興興迎接新的產(chǎn)品新需求,滿心歡喜的開(kāi)始工作,結(jié)果研究了一下午才發(fā)現(xiàn),是自己想的太簡(jiǎn)單了,是我太單純呀。
需求是這樣的類似下雪的效果,隨機(jī)產(chǎn)生一些小雪花,然后每個(gè)雪花可以點(diǎn)擊到下個(gè)頁(yè)面。
接到需求之后我的首先想法就是用button實(shí)現(xiàn)不久可以了,多簡(jiǎn)單點(diǎn)事情,結(jié)果實(shí)踐之后就知道自己多么的無(wú)知了,在移動(dòng)中的button根本沒(méi)有辦法接收點(diǎn)擊事件。
然后同事給出了一種解決辦法,通過(guò)手勢(shì)獲取點(diǎn)擊的位置,然后遍歷頁(yè)面上的控件,如果在這個(gè)范圍內(nèi)就點(diǎn)擊成功。通過(guò)這個(gè)想法我嘗試用frame來(lái)實(shí)現(xiàn)需求,然后發(fā)現(xiàn)自己又白癡了,頁(yè)面上所有的“雪花”的frame,都是動(dòng)畫結(jié)束的位置,并不是實(shí)時(shí)的位置。
但是我感到用手勢(shì),然后通過(guò)位置,遍歷,這個(gè)思路應(yīng)該是對(duì)的,于是繼續(xù)百度,發(fā)現(xiàn)了一個(gè)好東西
- (CALayer *)hitTest:(CGPoint)p;
通過(guò)這個(gè)可以得到這個(gè)頁(yè)面時(shí)候覆蓋了這個(gè)點(diǎn),這樣就可以解決我的問(wèn)題了,把手勢(shì)加在“雪花”的父頁(yè)面上,然后點(diǎn)擊事件里進(jìn)行處理(當(dāng)然 用這個(gè)方法就沒(méi)有必要一定用button)
-(void)tapClick:(UITapGestureRecognizer *)tap { CGPoint clickPoint = [tap locationInView:self]; for (UIImageView *imageView in [self subviews]) { if ([imageView.layer.presentationLayer hitTest:clickPoint]) { // This button was hit whilst moving - do something with it here break; } } } } |
這樣就可以解決問(wèn)題,當(dāng)然應(yīng)該還有其他的方法,歡迎補(bǔ)充。
posted on 2014-11-26 15:08 順其自然EVO 閱讀(1378) 評(píng)論(0) 編輯 收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄 、android