自己做了一个九宫格,里面的图标都是由多张图片重叠构成,然后包装成一个button来使用;
遇到的问题是如何给这个“button”增加点击事件?
解决思路1:网友提示在该“button”上增加一个真正的透明button,这样就可以顺利执行点击事件了;但是本人尝试发现,如果我调整了button的透明度后,点击是没有效果的!可能是我操作错误,待再次验证。
解决思路2:为UIImageView增加手势
[ImageView addGestureRecognizer:我们自己的手势recognizer];
如何创建一个手势?看看UITapGestureRecognizer 的用法吧。
1 | //单指单击 |
2 | |
3 | UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self |
4 | action:@selector(handleSingleFingerEvent:)]; |
5 | singleFingerOne.numberOfTouchesRequired = 1; //手指数 |
6 | singleFingerOne.numberOfTapsRequired = 1; //tap次数 |
7 | singleFingerOne.delegate= self; |
8 | |
9 | //单指双击 |
10 | UITapGestureRecognizer *singleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self |
11 | action:@selector(handleSingleFingerEvent:)]; |
12 | singleFingerTwo.numberOfTouchesRequired = 1; |
13 | singleFingerTwo.numberOfTapsRequired = 2; |
14 | singleFingerTwo.delegate= self; |
15 | |
16 | //双指单击 |
17 | UITapGestureRecognizer *doubleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self |
18 | action:@selector(handleDoubleFingerEvent:)]; |
19 | doubleFingerOne.numberOfTouchesRequired = 2; |
20 | doubleFingerOne.numberOfTapsRequired = 1; |
21 | doubleFingerOne.delegate= self; |
22 | |
23 | UITapGestureRecognizer *doubleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self |
24 | action:@selector(handleDoubleFingerEvent:)]; |
25 | doubleFingerTwo.numberOfTouchesRequired = 2; |
26 | doubleFingerTwo.numberOfTapsRequired = 2; |
27 | doubleFingerTwo.delegate= self; |
28 | |
29 | //如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理 |
30 | [singleFingerOne requireGestureRecognizerToFail:singleFingerTwo]; |
31 | //同理双指亦是如此 |
32 | [doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo]; |
33 | |
34 | [self.view addGestureRecognizer:singleFingerOne]; |
35 | [self.view addGestureRecognizer:singleFingerTwo]; |
36 | [self.view addGestureRecognizer:doubleFingerOne]; |
37 | [self.view addGestureRecognizer:doubleFingerTwo]; |
38 | |
39 | [singleFingerOne release]; |
40 | [singleFingerTwo release]; |
41 | [doubleFingerOne release]; |
42 | [doubleFingerTwo release]; |
43 | 处理事件的方法,代码: |
44 | //处理单指事件 |
45 | - (void)handleSingleFingerEvent:(UITapGestureRecognizer *)sender |
46 | { |
47 | if(sender.numberOfTapsRequired == 1) { |
48 | //单指单击 |
49 | NSLog(@"单指单击"); |
50 | }elseif(sender.numberOfTapsRequired == 2){ |
51 | //单指双击 |
52 | NSLog(@"单指双击"); |
53 | } |
54 | } |
55 | //处理双指事件 |
56 | - (void)handleDoubleFingerEvent:(UITapGestureRecognizer *)sender |
57 | { |
58 | if(sender.numberOfTapsRequired == 1) { |
59 | //双指单击 |
60 | NSLog(@"双指单击"); |
61 | }elseif(sender.numberOfTapsRequired == 2){ |
62 | //双指双击 |
63 | NSLog(@"双指双击"); |
64 | } |
65 | } |