iOS 动画过程中不响点击事件

项目中有飘屏弹幕,这东西,然后呢?添加点击事件的时候,发现动画过程中,点击是不会被调用的。然后查了一下,在动画的时候其实是 layer 在做动画的。CALayer的两个非常重要的属性:presentationLayer(展示层) 和 modelLayer(模型层),大家可以看这篇博客了解一二。iOS CoreAnimation专题——原理篇(三) CALayer的模型层与展示层
(其实是来的时候可以的,比方说:从右边飘到左边的过程中,只要这个 presentationLayer 与我们设置 View 的frame 相交的地方,点击事件是触发的。走的动画就不触发了,这是为什么呢?,走的时候,view 的frame 已经是在屏幕外面所有不会触发)

    BRNotiView *notiView = [[BRNotiView alloc] initWithFrame:initWithFrame:CGRectMake(375, 100, 168, 27)];
    CGRect rect = notiView.frame;
    CGRect rect1 = notiView.frame;
    rect.origin.x = 28;
    rect1.origin.x = -rect1.size.width;
    
    [UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
        notiView.frame = rect;
    } completion:^(BOOL finished) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [UIView animateWithDuration:6 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
                notiView.frame = rect1;
            } completion:^(BOOL finished) {
                [notiView removeFromSuperview];
         }];
        });
    }];

解决办法:在 BRNotiView (自己创建的类中),重写 pointInside:withEvent: 方法

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event {
    CGRect presentingRect = self.frame;
    if (self.layer.presentationLayer) {//有动画的时候,才有值
        presentingRect = self.layer.presentationLayer.frame;
    }
    CGPoint superPoint = [self convertPoint:point toView:self.superview];
    BOOL isInside = CGRectContainsPoint(presentingRect, superPoint);//判断点击点是否显示层内
    return isInside;
    
}
并且动画要使用 options:为UIViewAnimationOptionAllowUserInteraction(开启用户交互,UIImageView、UILabel 默认是 NO)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi阅读 10,623评论 3 23
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,904评论 1 32
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,558评论 5 13
  • 有了前两篇的概念基础,本篇从以下两点结合具体代码探索下CoreAnimation的一些原理。 UIView动画实现...
    正谦阅读 6,865评论 2 15
  • 7、不使用IB是,下面这样做有什么问题? 6、请说说Layer和View的关系,以及你是如何使用它们的。 1.首先...
    AlanGe阅读 4,446评论 0 1

友情链接更多精彩内容