【iOS開發筆記20/50】Tap手勢


使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事件,此方法沒起作用,具體原因暫時不明,以后用到時再研究。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM