首页 > 技术文章 > ios 给移动的控件添加点击事件

jiayongqiang 2016-05-23 11:22 原文

前言:

给一个UIView做移动动画,虽然看起来frame在持续改变,但是它的frame已经是最终值了. 也就是说表面看到的动画都是假象,它的真实位置已经是固定的了.所以只有点击在他的真实frame范围内,点击事件才会响应. 

其实UIview的layer 有一个属性叫presentationLayer. 一个方法:- (nullable CALayer *)hitTest:(CGPoint)p;只要使用if ([view.layer.presentationLayer hitTest:touchPoint]) { } 判断一下即可.知晓点是不是在移动的view上.

代码:

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
            //给移动view的父视图添加单击手势
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(addTap:)];
            [self addGestureRecognizer:tap];
        }
    }   
    return self;
}
-(void)addTap:(UITapGestureRecognizer *)tapGesture{
    //如果手势点在移动view的父视图上,返回这个点.
    CGPoint touchPoint = [tapGesture locationInView:self];
    
    //遍历父视图的所有子视图
    for (PQBarrageItemView *item in self.subviews) {
        
        //判断点是不是在移动的view上
        if ([item.layer.presentationLayer hitTest:touchPoint]) {
            NSLog(@"此处写点在移动view之后的代码");
        }
    }
}

 

推荐阅读