高高興興迎接新的產品新需求,滿心歡喜的開始
工作,結果研究了一下午才發現,是自己想的太簡單了,是我太單純呀。
需求是這樣的類似下雪的效果,隨機產生一些小雪花,然后每個雪花可以點擊到下個頁面。
接到需求之后我的首先想法就是用button實現不久可以了,多簡單點事情,結果實踐之后就知道自己多么的無知了,在
移動中的button根本沒有辦法接收點擊事件。
然后同事給出了一種解決辦法,通過手勢獲取點擊的位置,然后遍歷頁面上的控件,如果在這個范圍內就點擊成功。通過這個想法我嘗試用frame來實現需求,然后發現自己又白癡了,頁面上所有的“雪花”的frame,都是動畫結束的位置,并不是實時的位置。
但是我感到用手勢,然后通過位置,遍歷,這個思路應該是對的,于是繼續
百度,發現了一個好東西
- (CALayer *)hitTest:(CGPoint)p;
通過這個可以得到這個頁面時候覆蓋了這個點,這樣就可以解決我的問題了,把手勢加在“雪花”的父頁面上,然后點擊事件里進行處理(當然 用這個方法就沒有必要一定用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; } } } } |
這樣就可以解決問題,當然應該還有其他的方法,歡迎補充。
English » | | | | | | | | |
Text-to-speech function is limited to 100 characters