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