使UIView能夠支持點擊的手勢,需要用下面的代碼:
UITapGestureRecognizer *t = [[UITapGestureRecognizeralloc] initWithTarget:self action:@selector(singleTap:)];
t.delegate = self;
UIImageView *subView = (UIImageView*)[self.view viewWithTag:1234];
[subView addGestureRecognizer:t];
[t release];
這里把手勢加到了subView里,而沒有加到整個rootView中,也就只保證了在這里面的點擊手勢有效,而不對subView外面的區域產生影響。
另外在xib設計時,注意該控件的User Interaction Enabled 這一項要選上。
然后處理singleTap方法:
-(void) singleTap:(UITapGestureRecognizer*) tap {
CGPoint p = [tap locationInView:tap.view];
NSLog(@"single tap: %f %f", p.x, p.y );
}
用上面方法很容易找到單擊點的坐標,再完成相應的工作即可。
一開始不知道把手勢加到指定的View中,結果在單擊iAd廣告時,廣告的內容就是不顯示,原來是singleTap把手勢截獲了,而廣告條上得不到相應的事件了。
從網站上查到了一種解決方案:
先在.h文件中給類加上委托UIGestureRecognizerDelegate
@interface myViewController : UIViewController <ADBannerViewDelegate,UIGestureRecognizerDelegate>
然后實現下面的方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
// test if our control subview is on-screen
if ([touch.view isKindOfClass:[UIControl class]]) {
// we touched our control surface
returnNO; // ignore the touch
}
returnYES; // handle the touch
}
用這種辦法可以使一些控件不接收到tap事件,此方法沒起作用,具體原因暫時不明,以后用到時再研究。
