在做动画的控件不触发手势事件问题及解决方案

简介: 在做动画的控件不触发手势事件问题及解决方案

1.首先排除表格的父试图是否能交互(userInteractionEnabled);

2.其次排除表格是否能交互(userInteractionEnabled);

3.再次排查表格是否被其它透明可交互控件遮盖(Xcode强大的多视图立体分层显示View UI Herarchy)。

4.是否表格超过父试图的范围(Xcode强大的多视图立体分层显示View UI Herarchy)。

5.若以上都没有问题,那么很可能是你的表格的父试图设置了手势,手势的优先级高于表格点击事件。在容器页面(一个容器包含多个控制器页面)更容易出现该问题。

首先设置动画的可交互属性:UIViewAnimationOptionAllowUserInteraction或UIViewKeyframeAnimationOptionAllowUserInteraction。removedOnCompletion设置为NO

    [UIView beginAnimations:@"Marquee" context:NULL];
    //动画时长
    [UIView setAnimationDuration:2.0];
    //动画节奏
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction];
    //重复次数
    [UIView setAnimationRepeatCount:1];

    self.decribeImageView.alpha = 1.0;
    self.describeTitleLabel.alpha = 1.0;
    [UIView animateKeyframesWithDuration: 5.0 delay: 0 options: UIViewKeyframeAnimationOptionCalculationModeLinear|UIViewKeyframeAnimationOptionAllowUserInteraction animations: ^{
        self.decribeImageView.frame = CGRectMake(self.decribeImageViewEdge+FULL_WIDTH, self.decribeImageViewTop, SCREEN_WIDTH -self.decribeImageViewEdge*2, self.decribeImageViewHeight*FULL_WIDTH/375);
        [UIView addKeyframeWithRelativeStartTime: 0 relativeDuration: 1.0/(5*4) animations: ^{
            self.decribeImageView.frame = CGRectMake(self.decribeImageViewEdge, self.decribeImageViewTop, SCREEN_WIDTH -self.decribeImageViewEdge*2, self.decribeImageViewHeight*FULL_WIDTH/375);
        }];

        [UIView addKeyframeWithRelativeStartTime: (1 - 1.0/(5*4) - 0.001) relativeDuration: 1.0/(5*4) animations: ^{
            self.decribeImageView.frame = CGRectMake(-self.decribeImageViewEdge-FULL_WIDTH, self.decribeImageViewTop, SCREEN_WIDTH -self.decribeImageViewEdge*2, self.decribeImageViewHeight*FULL_WIDTH/375);
        }];
        
        [UIView addKeyframeWithRelativeStartTime: (1 - 0.001) relativeDuration:0.001 animations: ^{
            self.decribeImageView.alpha = 0;
            self.describeTitleLabel.alpha = 0;
        }];
    } completion:^(BOOL finished) {
        [self removeFromSuperview];
    }];
    CAAnimationGroup *group = [[CAAnimationGroup alloc] init];
    
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
    animation.values = @[@0.0, @1.0, @1.0];
    animation.keyTimes = @[[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.5], [NSNumber numberWithFloat:1.0]];
    
    CAKeyframeAnimation * opacityAnimation = [CAKeyframeAnimation animation];
    opacityAnimation.keyPath = @"opacity";
    opacityAnimation.values = @[@0.0, @1.0];
    group.animations = @[animation, opacityAnimation];
    group.duration = 2.0;
    group.delegate = self;
    group.repeatCount = 1.0;
    
    group.removedOnCompletion = NO;
    group.fillMode = kCAFillModeForwards;
    group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
    [self.diceAnimatedImageView.layer addAnimation:group forKey:@"diceAnimatedImageViewAnimation"];

若还不行就在动画控件上增加一个透明按钮,添加按钮事件。

目录
相关文章
|
10月前
|
前端开发 JavaScript 定位技术
移动端手势事件和触摸交互
移动端手势事件和触摸交互
120 0
|
前端开发 C# Windows
WPF鼠标、键盘、拖拽事件、用行为封装事件
本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述如何用行为(Behavior)来封装事件。
|
JavaScript 前端开发
史上最详细的DOM事件之拖动事件
史上最详细的DOM事件之拖动事件 上篇博客讲了DOM的剪贴板事件,这篇博客我们来讲一讲DOM的拖动(DragEvent)事件。 HTMl代码: <img src="../../CSS/0421/car.jpg" draggable="false"> 1 JS代码: var oImg=document.getElementsByTagName("img")[0]; // DragEvent 拖动事件 // ondrag 该事件在元素正在拖动时触发 oImg.ondrag=function(ev){ console
|
图形学
Unity碰撞事件和触发事件
大家在刚开始接触Unity的时候,一定要理解碰撞与触发
455 0
Unity碰撞事件和触发事件
|
JavaScript 前端开发 开发者
Js 功能-理解滑动手势事件 |学习笔记
快速学习 Js 功能-理解滑动手势事件
97 0
|
Dart 开发者
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(三)
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(三)
202 0
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(三)
|
Dart 开发者
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )(三)
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )(三)
156 0
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )(三)
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(二)
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(二)
231 0
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(一)
【Flutter】监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )(一)
142 0
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )(二)
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )(二)
144 0